Files
disasm/NROM/Clu Clu Land (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

9152 lines
389 KiB
ArmAsm

.include "symbols.inc"
.include "locals.inc"
.segment "PRG"
;------------------------------------------------------------
; Initial PRG data
; CPU $C000-$C195
; PRG $0000-$0195
;
; Pointer tables, title/credit text, resource descriptors, and
; startup lookup data. Boundaries below are conservative Pass-1
; classifications; uncertain structures remain explicit bytes.
;------------------------------------------------------------
; Embedded developer credit: "T.SAWANO".
DeveloperCreditText:
.byte $54, $2E, $53, $41, $57, $41, $4E, $4F ; CPU:$C000 PRG:0000 0B
; Pointers into the upper-PRG resource/script area.
ResourceScriptPointerTable:
.word $E75D, $E79A, $E7E1, $E826 ; CPU:$C008 PRG:0008 0B
.word $E869, $E8A6, $E8DF, $E916 ; CPU:$C010 PRG:0010 0B
.word $E949, $E988, $E9CD, $EA10 ; CPU:$C018 PRG:0018 0B
.word $EA4F, $EA96, $EAE7, $EB32 ; CPU:$C020 PRG:0020 0B
.word $EB7B, $EBB0, $EBE7, $EC1E ; CPU:$C028 PRG:0028 0B
.word $EC56, $ECF3, $ED1E, $ED5E ; CPU:$C030 PRG:0030 0B
.word $EDAF, $EE27, $EE90, $EF91 ; CPU:$C038 PRG:0038 0B
.word $F117, $F11D ; CPU:$C040 PRG:0040 0B
; Encoded title/message tile values; not ASCII text at runtime.
TitleOrMessageTileString:
.byte $28, $32, $33, $31, $34, $32, $30, $30, $29, $32, $29, $29, $31, $34, $34, $32 ; CPU:$C044 PRG:0044 0B
.byte $22, $24, $23, $24 ; CPU:$C054 PRG:0054 0B
; Variable-length resource descriptor records.
ResourceDescriptorData_C058:
.byte $66, $00, $01, $20, $00, $07, $29, $F2, $06, $00, $28, $EF, $06, $00, $2A, $AF ; CPU:$C058 PRG:0058 0B
.byte $06, $00, $20, $54, $03, $00, $29, $B6, $02, $00, $29, $49, $03, $01, $2B, $09 ; CPU:$C068 PRG:0068 0B
.byte $03, $01, $20, $4D, $02, $00, $00, $01, $04, $0C, $07, $22, $10, $03, $00, $00 ; CPU:$C078 PRG:0078 0B
.byte $01, $04, $0C, $07, $29, $E8, $03, $00, $00, $01, $0C, $00, $07, $22, $CE, $06 ; CPU:$C088 PRG:0088 0B
.byte $00, $23, $06, $06, $00, $23, $13, $06, $00, $0F, $E4, $00, $18, $0F, $E5, $00 ; CPU:$C098 PRG:0098 0B
.byte $28, $0F, $E4, $01, $D0, $0F, $E5, $01, $E0, $FF, $FF, $FF ; CPU:$C0A8 PRG:00A8 0B
; Small direction, coordinate, and signed-offset lookup tables.
DirectionAndCoordinateTables_C0B4:
.byte $FF, $00, $00, $00, $01, $A0, $80, $40, $00, $60, $80, $C0, $00, $64, $3C, $2C ; CPU:$C0B4 PRG:00B4 0B
.byte $1C, $44, $3C, $34, $2C, $80, $50, $30, $10, $40, $30, $20, $10, $02, $02, $04 ; CPU:$C0C4 PRG:00C4 0B
.byte $04, $01, $01, $01, $01, $01, $02, $02, $02, $00, $80, $B8, $D8, $F4, $14, $34 ; CPU:$C0D4 PRG:00D4 0B
.byte $54, $40, $02, $10, $00 ; CPU:$C0E4 PRG:00E4 0B
; Startup object/template records and compact lookup data.
StartupObjectTemplateData_C0E9:
.byte $04, $01, $00, $00, $00, $00, $00, $04, $00, $00, $00, $22, $00, $05, $05, $0B ; CPU:$C0E9 PRG:00E9 0B
.byte $0B, $10, $06, $0C, $20, $04, $01, $00, $00, $00, $00, $00, $01, $EE, $00, $00 ; CPU:$C0F9 PRG:00F9 0B
.byte $11, $10, $20, $08, $11, $00, $05, $01, $00, $00, $00, $00, $00, $02, $A0, $00 ; CPU:$C109 PRG:0109 0B
.byte $03, $00, $68, $00, $00, $00, $00, $00, $20, $04, $11, $80, $04, $01, $00, $00 ; CPU:$C119 PRG:0119 0B
.byte $00, $00, $00, $04, $7C, $00, $03, $22, $28, $02, $02, $0E, $0E, $00, $00, $01 ; CPU:$C129 PRG:0129 0B
.byte $06, $F6, $03, $08, $E6, $00, $02, $24, $E0, $20, $08, $11, $00, $06, $80, $00 ; CPU:$C139 PRG:0139 0B
.byte $00, $00, $00, $00, $02, $D0, $00, $00, $21, $A8, $04, $00, $0C, $08, $00, $10 ; CPU:$C149 PRG:0149 0B
.byte $04, $0D, $C0, $03, $01, $00, $00, $00, $00, $00, $02, $C8, $00, $03, $12, $C0 ; CPU:$C159 PRG:0159 0B
.byte $00, $40, $02, $0C, $00, $04, $00, $30, $00, $2C, $00, $00, $06, $70, $00, $00 ; CPU:$C169 PRG:0169 0B
.byte $23, $68, $20, $02, $0A, $80, $04, $00, $4A, $00, $30, $00, $00, $04, $7C, $00 ; CPU:$C179 PRG:0179 0B
.byte $03, $00, $01, $07, $E7, $00, $13, $2E, $24, $2F, $14, $0F, $30 ; CPU:$C189 PRG:0189 0B
;------------------------------------------------------------
; ResetEntry / IRQHandler
;
; Global:
; RESET and IRQ/BRK vector target. Initializes CPU, RAM, PPU,
; APU, startup resources, and enables NMI before entering the
; permanent main-program loop at $C1EB.
;
; Parameters:
; None.
;
; Returns:
; Never returns.
;------------------------------------------------------------
ResetEntry:
CLD ; CPU:$C196 PRG:0196 D8
LDA #$00 ; CPU:$C197 PRG:0197 A9 00
STA PPUCTRL ; CPU:$C199 PRG:0199 8D 00 20
SEI ; CPU:$C19C PRG:019C 78
LDX #$FF ; CPU:$C19D PRG:019D A2 FF
TXS ; CPU:$C19F PRG:019F 9A
LDX #$02 ; CPU:$C1A0 PRG:01A0 A2 02
InterruptPathLoop_C1A2:
LDA PPUSTATUS ; CPU:$C1A2 PRG:01A2 AD 02 20
BPL InterruptPathLoop_C1A2 ; CPU:$C1A5 PRG:01A5 10 FB
DEX ; CPU:$C1A7 PRG:01A7 CA
BNE InterruptPathLoop_C1A2 ; CPU:$C1A8 PRG:01A8 D0 F8
LDY #$24 ; CPU:$C1AA PRG:01AA A0 24
LDA StartupPreserveFlag0 ; CPU:$C1AC PRG:01AC A5 48
BNE InterruptPathOnNonZero_C1B4 ; CPU:$C1AE PRG:01AE D0 04
LDA StartupPreserveFlag1 ; CPU:$C1B0 PRG:01B0 A5 49
BEQ InterruptPathOnZero_C1B6 ; CPU:$C1B2 PRG:01B2 F0 02
InterruptPathOnNonZero_C1B4:
LDY #$18 ; CPU:$C1B4 PRG:01B4 A0 18
InterruptPathOnZero_C1B6:
LDA #$00 ; CPU:$C1B6 PRG:01B6 A9 00
InterruptPathLoop_C1B8:
STA $0000,Y ; CPU:$C1B8 PRG:01B8 99 00 00
INY ; CPU:$C1BB PRG:01BB C8
BNE InterruptPathLoop_C1B8 ; CPU:$C1BC PRG:01BC D0 FA
LDY #$07 ; CPU:$C1BE PRG:01BE A0 07
LDX #$06 ; CPU:$C1C0 PRG:01C0 A2 06
JSR RunGameTaskRoutine_CBA6 ; CPU:$C1C2 PRG:01C2 20 A6 CB
LDA #$55 ; CPU:$C1C5 PRG:01C5 A9 55
STA FrameShiftRegister0 ; CPU:$C1C7 PRG:01C7 85 10
LDA #$12 ; CPU:$C1C9 PRG:01C9 A9 12
STA PPUCTRL ; CPU:$C1CB PRG:01CB 8D 00 20
STA ShadowPPUCTRL ; CPU:$C1CE PRG:01CE 85 40
LDA #$06 ; CPU:$C1D0 PRG:01D0 A9 06
STA PPUMASK ; CPU:$C1D2 PRG:01D2 8D 01 20
STA ShadowPPUMASK ; CPU:$C1D5 PRG:01D5 85 41
LDA #$0F ; CPU:$C1D7 PRG:01D7 A9 0F
STA APUSTATUS ; CPU:$C1D9 PRG:01D9 8D 15 40
STA $0100 ; CPU:$C1DC PRG:01DC 8D 00 01
JSR RunGameTaskRoutine_C3E4 ; CPU:$C1DF PRG:01DF 20 E4 C3
LDA ShadowPPUCTRL ; CPU:$C1E2 PRG:01E2 A5 40
ORA #$80 ; CPU:$C1E4 PRG:01E4 09 80
STA ShadowPPUCTRL ; CPU:$C1E6 PRG:01E6 85 40
STA PPUCTRL ; CPU:$C1E8 PRG:01E8 8D 00 20
InterruptPathDispatch_C1EB:
JSR EnginePath_F58D ; CPU:$C1EB PRG:01EB 20 8D F5
JMP InterruptPathDispatch_C1EB ; CPU:$C1EE PRG:01EE 4C EB C1
;------------------------------------------------------------
; NMIHandler
;
; Global:
; Saves A and $00, performs OAM DMA and frame services,
; restores PPU state, then returns with RTI.
;
; Parameters:
; None.
;
; Returns:
; RTI.
;------------------------------------------------------------
NMIHandler:
PHA ; CPU:$C1F1 PRG:01F1 48
LDA WorkPtr0Lo ; CPU:$C1F2 PRG:01F2 A5 00
PHA ; CPU:$C1F4 PRG:01F4 48
LDA ShadowPPUCTRL ; CPU:$C1F5 PRG:01F5 A5 40
AND #$7F ; CPU:$C1F7 PRG:01F7 29 7F
STA ShadowPPUCTRL ; CPU:$C1F9 PRG:01F9 85 40
STA PPUCTRL ; CPU:$C1FB PRG:01FB 8D 00 20
LDA ShadowPPUMASK ; CPU:$C1FE PRG:01FE A5 41
AND #$E7 ; CPU:$C200 PRG:0200 29 E7
STA ShadowPPUMASK ; CPU:$C202 PRG:0202 85 41
STA PPUMASK ; CPU:$C204 PRG:0204 8D 01 20
JSR UpdateGameStateRoutine_C996 ; CPU:$C207 PRG:0207 20 96 C9
LDA #$00 ; CPU:$C20A PRG:020A A9 00
STA OAMADDR ; CPU:$C20C PRG:020C 8D 03 20
LDA #$02 ; CPU:$C20F PRG:020F A9 02
STA OAMDMA ; CPU:$C211 PRG:0211 8D 14 40
JSR ResourceAndLevelData ; CPU:$C214 PRG:0214 20 0B F2
JSR ObjectPath_E113 ; CPU:$C217 PRG:0217 20 13 E1
LDA ShadowPPUCTRL ; CPU:$C21A PRG:021A A5 40
STA PPUCTRL ; CPU:$C21C PRG:021C 8D 00 20
LDA ShadowPPUMASK ; CPU:$C21F PRG:021F A5 41
ORA #$18 ; CPU:$C221 PRG:0221 09 18
STA ShadowPPUMASK ; CPU:$C223 PRG:0223 85 41
STA PPUMASK ; CPU:$C225 PRG:0225 8D 01 20
JSR AudioDriverCode ; CPU:$C228 PRG:0228 20 C1 F7
JSR EnginePath_F5AE ; CPU:$C22B PRG:022B 20 AE F5
JSR ObjectPath_DDC1 ; CPU:$C22E PRG:022E 20 C1 DD
JSR RunGameTaskRoutine_C368 ; CPU:$C231 PRG:0231 20 68 C3
NMIReadPPUStatus_C234:
LDA PPUSTATUS ; CPU:$C234 PRG:0234 AD 02 20
LDA ShadowPPUCTRL ; CPU:$C237 PRG:0237 A5 40
ORA #$80 ; CPU:$C239 PRG:0239 09 80
STA ShadowPPUCTRL ; CPU:$C23B PRG:023B 85 40
STA PPUCTRL ; CPU:$C23D PRG:023D 8D 00 20
PLA ; CPU:$C240 PRG:0240 68
STA WorkPtr0Lo ; CPU:$C241 PRG:0241 85 00
PLA ; CPU:$C243 PRG:0243 68
RTI ; CPU:$C244 PRG:0244 40
;------------------------------------------------------------
; CoreGameCode
;
; Global:
; First-pass core-game entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Game state, object pointers, and frame state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
CoreGameCode:
JSR RunGameTaskRoutine_CBB9 ; CPU:$C245 PRG:0245 20 B9 CB
JSR ObjectPath_D34E ; CPU:$C248 PRG:0248 20 4E D3
BCS ProcessCurrentObjectContinue_C264 ; CPU:$C24B PRG:024B B0 17
JSR UpdateObjectRecord_D27D ; CPU:$C24D PRG:024D 20 7D D2
BCS ProcessCurrentObjectContinue_C264 ; CPU:$C250 PRG:0250 B0 12
LDY #$00 ; CPU:$C252 PRG:0252 A0 00
LDA (CurrentObjectPtrLo),Y ; CPU:$C254 PRG:0254 B1 08
BNE ProcessCurrentObjectContinue_C264 ; CPU:$C256 PRG:0256 D0 0C
JSR ProcessCurrentObjectRoutine_CBE3 ; CPU:$C258 PRG:0258 20 E3 CB
JSR ReadObjectRecord_DADA ; CPU:$C25B PRG:025B 20 DA DA
JSR ReadObjectRecord_CD7B ; CPU:$C25E PRG:025E 20 7B CD
JSR ReadObjectRecord_D11E ; CPU:$C261 PRG:0261 20 1E D1
ProcessCurrentObjectContinue_C264:
JSR ObjectPath_D06D ; CPU:$C264 PRG:0264 20 6D D0
JSR RunGameTaskRoutine_CBC6 ; CPU:$C267 PRG:0267 20 C6 CB
JSR ObjectPath_D34E ; CPU:$C26A PRG:026A 20 4E D3
BCS CorePathContinue_C286 ; CPU:$C26D PRG:026D B0 17
JSR UpdateObjectRecord_D27D ; CPU:$C26F PRG:026F 20 7D D2
BCS CorePathContinue_C286 ; CPU:$C272 PRG:0272 B0 12
LDY #$00 ; CPU:$C274 PRG:0274 A0 00
LDA (CurrentObjectPtrLo),Y ; CPU:$C276 PRG:0276 B1 08
BNE CorePathContinue_C286 ; CPU:$C278 PRG:0278 D0 0C
JSR ProcessCurrentObjectRoutine_CBE3 ; CPU:$C27A PRG:027A 20 E3 CB
JSR ReadObjectRecord_DADA ; CPU:$C27D PRG:027D 20 DA DA
JSR ReadObjectRecord_CD7B ; CPU:$C280 PRG:0280 20 7B CD
JSR ReadObjectRecord_D11E ; CPU:$C283 PRG:0283 20 1E D1
CorePathContinue_C286:
JSR ObjectPath_D08F ; CPU:$C286 PRG:0286 20 8F D0
JSR ObjectPath_DD10 ; CPU:$C289 PRG:0289 20 10 DD
JSR ObjectPath_DC5A ; CPU:$C28C PRG:028C 20 5A DC
JSR UpdateObjectBuffer_DB52 ; CPU:$C28F PRG:028F 20 52 DB
JSR ObjectPath_D856 ; CPU:$C292 PRG:0292 20 56 D8
JSR ObjectPath_D8BA ; CPU:$C295 PRG:0295 20 BA D8
JSR UpdateObjectBuffer_D64F ; CPU:$C298 PRG:0298 20 4F D6
JSR ObjectPath_D97B ; CPU:$C29B PRG:029B 20 7B D9
JSR UpdateObjectBuffer_D0C8 ; CPU:$C29E PRG:029E 20 C8 D0
JSR ObjectPath_CFA1 ; CPU:$C2A1 PRG:02A1 20 A1 CF
JSR ObjectPath_D0B1 ; CPU:$C2A4 PRG:02A4 20 B1 D0
JSR ProcessObjectStateRoutine_E6F3 ; CPU:$C2A7 PRG:02A7 20 F3 E6
JSR ObjectPath_DA91 ; CPU:$C2AA PRG:02AA 20 91 DA
JSR UpdateObjectBuffer_DBC7 ; CPU:$C2AD PRG:02AD 20 C7 DB
JSR ObjectPath_D0DF ; CPU:$C2B0 PRG:02B0 20 DF D0
JSR ObjectPath_D1D6 ; CPU:$C2B3 PRG:02B3 20 D6 D1
JSR UpdateObjectBuffer_DD8F ; CPU:$C2B6 PRG:02B6 20 8F DD
JSR UpdateObjectBuffer_D0F6 ; CPU:$C2B9 PRG:02B9 20 F6 D0
JSR UpdateGameStateRoutine_C47A ; CPU:$C2BC PRG:02BC 20 7A C4
JSR ObjectPath_D209 ; CPU:$C2BF PRG:02BF 20 09 D2
RTS ; CPU:$C2C2 PRG:02C2 60
CorePathLoop_C2C3:
JSR RunGameTaskRoutine_C84B ; CPU:$C2C3 PRG:02C3 20 4B C8
LDA #$00 ; CPU:$C2C6 PRG:02C6 A9 00
LDY #$1F ; CPU:$C2C8 PRG:02C8 A0 1F
CorePathLoop_C2CA:
STA a:$0080,Y ; CPU:$C2CA PRG:02CA 99 80 00
DEY ; CPU:$C2CD PRG:02CD 88
BPL CorePathLoop_C2CA ; CPU:$C2CE PRG:02CE 10 FA
STA RoundOrSubstate ; CPU:$C2D0 PRG:02D0 85 88
LDX ContextIndex ; CPU:$C2D2 PRG:02D2 A6 4A
InitializePlayerAndGameState:
STX PreviousContextIndex ; CPU:$C2D4 PRG:02D4 86 87
INX ; CPU:$C2D6 PRG:02D6 E8
CPX #$05 ; CPU:$C2D7 PRG:02D7 E0 05
BNE UpdateGameStateOnNonZero_C2DD ; CPU:$C2D9 PRG:02D9 D0 02
LDX #$00 ; CPU:$C2DB PRG:02DB A2 00
UpdateGameStateOnNonZero_C2DD:
STX $4A ; CPU:$C2DD PRG:02DD 86 4A
LDA $87 ; CPU:$C2DF PRG:02DF A5 87
ASL A ; CPU:$C2E1 PRG:02E1 0A
ASL A ; CPU:$C2E2 PRG:02E2 0A
ORA $88 ; CPU:$C2E3 PRG:02E3 05 88
STA $89 ; CPU:$C2E5 PRG:02E5 85 89
LDA #$01 ; CPU:$C2E7 PRG:02E7 A9 01
STA $4C ; CPU:$C2E9 PRG:02E9 85 4C
STA $8D ; CPU:$C2EB PRG:02EB 85 8D
STA $80 ; CPU:$C2ED PRG:02ED 85 80
STA $81 ; CPU:$C2EF PRG:02EF 85 81
UpdateGameStateDispatch_C2F1:
STA $8A ; CPU:$C2F1 PRG:02F1 85 8A
LDA #$02 ; CPU:$C2F3 PRG:02F3 A9 02
STA $8B ; CPU:$C2F5 PRG:02F5 85 8B
RTS ; CPU:$C2F7 PRG:02F7 60
CorePathLoop_C2F8:
LDA $7D ; CPU:$C2F8 PRG:02F8 A5 7D
BEQ CorePathLoop_C2C3 ; CPU:$C2FA PRG:02FA F0 C7
LDA $44 ; CPU:$C2FC PRG:02FC A5 44
AND #$20 ; CPU:$C2FE PRG:02FE 29 20
BEQ UpdatePlayerStateContinue_C310 ; CPU:$C300 PRG:0300 F0 0E
LDA $4F ; CPU:$C302 PRG:0302 A5 4F
BNE UpdatePlayerStateContinue_C310 ; CPU:$C304 PRG:0304 D0 0A
LDA $4B ; CPU:$C306 PRG:0306 A5 4B
EOR #$01 ; CPU:$C308 PRG:0308 49 01
STA $4B ; CPU:$C30A PRG:030A 85 4B
LDA #$40 ; CPU:$C30C PRG:030C A9 40
STA $7D ; CPU:$C30E PRG:030E 85 7D
UpdatePlayerStateContinue_C310:
STA $4F ; CPU:$C310 PRG:0310 85 4F
LDA #$90 ; CPU:$C312 PRG:0312 A9 90
LDX $4B ; CPU:$C314 PRG:0314 A6 4B
STX $4C ; CPU:$C316 PRG:0316 86 4C
BEQ CorePathOnZero_C31C ; CPU:$C318 PRG:0318 F0 02
LDA #$A0 ; CPU:$C31A PRG:031A A9 A0
CorePathOnZero_C31C:
STA $0200 ; CPU:$C31C PRG:031C 8D 00 02
LDA #$E5 ; CPU:$C31F PRG:031F A9 E5
STA $0201 ; CPU:$C321 PRG:0321 8D 01 02
LDA #$00 ; CPU:$C324 PRG:0324 A9 00
STA $0202 ; CPU:$C326 PRG:0326 8D 02 02
LDA #$40 ; CPU:$C329 PRG:0329 A9 40
STA $0203 ; CPU:$C32B PRG:032B 8D 03 02
LDA $44 ; CPU:$C32E PRG:032E A5 44
AND #$10 ; CPU:$C330 PRG:0330 29 10
BEQ CorePathContinue_C365 ; CPU:$C332 PRG:0332 F0 31
LDA $4E ; CPU:$C334 PRG:0334 A5 4E
BNE CorePathContinue_C365 ; CPU:$C336 PRG:0336 D0 2D
LDY #$1B ; CPU:$C338 PRG:0338 A0 1B
CorePathLoop_C33A:
STA a:$0024,Y ; CPU:$C33A PRG:033A 99 24 00
DEY ; CPU:$C33D PRG:033D 88
BPL CorePathLoop_C33A ; CPU:$C33E PRG:033E 10 FA
LDY #$1F ; CPU:$C340 PRG:0340 A0 1F
UpdatePlayerStateLoop_C342:
STA a:$0080,Y ; CPU:$C342 PRG:0342 99 80 00
DEY ; CPU:$C345 PRG:0345 88
BPL UpdatePlayerStateLoop_C342 ; CPU:$C346 PRG:0346 10 FA
JSR RunGameTaskRoutine_C84B ; CPU:$C348 PRG:0348 20 4B C8
LDA #$05 ; CPU:$C34B PRG:034B A9 05
STA $80 ; CPU:$C34D PRG:034D 85 80
LDX $4C ; CPU:$C34F PRG:034F A6 4C
BNE UpdateGameStateOnNonZero_C359 ; CPU:$C351 PRG:0351 D0 06
LDX #$01 ; CPU:$C353 PRG:0353 A2 01
STX $91 ; CPU:$C355 PRG:0355 86 91
LDA #$00 ; CPU:$C357 PRG:0357 A9 00
UpdateGameStateOnNonZero_C359:
STA $81 ; CPU:$C359 PRG:0359 85 81
LDA #$02 ; CPU:$C35B PRG:035B A9 02
STA $8B ; CPU:$C35D PRG:035D 85 8B
LDA #$01 ; CPU:$C35F PRG:035F A9 01
STA $8A ; CPU:$C361 PRG:0361 85 8A
STA $33 ; CPU:$C363 PRG:0363 85 33
CorePathContinue_C365:
STA $4E ; CPU:$C365 PRG:0365 85 4E
RTS ; CPU:$C367 PRG:0367 60
;------------------------------------------------------------
; RunGameTaskRoutine_C368
;
; Global:
; First-pass core-game entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Game state, object pointers, and frame state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
RunGameTaskRoutine_C368:
LDA $92 ; CPU:$C368 PRG:0368 A5 92
BNE CorePathOnNonZero_C3CD ; CPU:$C36A PRG:036A D0 61
LDA $B0 ; CPU:$C36C PRG:036C A5 B0
BNE UpdateGameStateOnNonZero_C373 ; CPU:$C36E PRG:036E D0 03
JSR ProcessResourceStateRoutine_F577 ; CPU:$C370 PRG:0370 20 77 F5
UpdateGameStateOnNonZero_C373:
LDA $8A ; CPU:$C373 PRG:0373 A5 8A
BEQ CorePathLoop_C2F8 ; CPU:$C375 PRG:0375 F0 81
LDA $8D ; CPU:$C377 PRG:0377 A5 8D
BEQ CorePathOnZero_C38D ; CPU:$C379 PRG:0379 F0 12
LDA $90 ; CPU:$C37B PRG:037B A5 90
CMP #$01 ; CPU:$C37D PRG:037D C9 01
BNE CorePathOnNonZero_C387 ; CPU:$C37F PRG:037F D0 06
LDA $91 ; CPU:$C381 PRG:0381 A5 91
CMP #$01 ; CPU:$C383 PRG:0383 C9 01
BEQ RunGameTaskRoutine_C3E4 ; CPU:$C385 PRG:0385 F0 5D
CorePathOnNonZero_C387:
LDA $44 ; CPU:$C387 PRG:0387 A5 44
AND #$30 ; CPU:$C389 PRG:0389 29 30
BNE RunGameTaskRoutine_C3E4 ; CPU:$C38B PRG:038B D0 57
CorePathOnZero_C38D:
LDA $44 ; CPU:$C38D PRG:038D A5 44
AND #$10 ; CPU:$C38F PRG:038F 29 10
BEQ UpdateGameStateContinue_C3A9 ; CPU:$C391 PRG:0391 F0 16
LDA $4E ; CPU:$C393 PRG:0393 A5 4E
BNE UpdateGameStateContinue_C3A9 ; CPU:$C395 PRG:0395 D0 12
LDA #$01 ; CPU:$C397 PRG:0397 A9 01
EOR $B0 ; CPU:$C399 PRG:0399 45 B0
STA $B0 ; CPU:$C39B PRG:039B 85 B0
BNE CorePathOnNonZero_C3A3 ; CPU:$C39D PRG:039D D0 04
LDA #$06 ; CPU:$C39F PRG:039F A9 06
STA $92 ; CPU:$C3A1 PRG:03A1 85 92
CorePathOnNonZero_C3A3:
LDA #$20 ; CPU:$C3A3 PRG:03A3 A9 20
STA $FB ; CPU:$C3A5 PRG:03A5 85 FB
LDA #$01 ; CPU:$C3A7 PRG:03A7 A9 01
UpdateGameStateContinue_C3A9:
STA $4E ; CPU:$C3A9 PRG:03A9 85 4E
LDA $92 ; CPU:$C3AB PRG:03AB A5 92
BNE CorePathLoop_C3CC ; CPU:$C3AD PRG:03AD D0 1D
LDA $B0 ; CPU:$C3AF PRG:03AF A5 B0
BNE CorePathLoop_C3CC ; CPU:$C3B1 PRG:03B1 D0 19
LDA $8A ; CPU:$C3B3 PRG:03B3 A5 8A
CMP #$02 ; CPU:$C3B5 PRG:03B5 C9 02
BEQ CorePathOnZero_C3E0 ; CPU:$C3B7 PRG:03B7 F0 27
JSR CoreGameCode ; CPU:$C3B9 PRG:03B9 20 45 C2
;------------------------------------------------------------
; UpdateGameStateRoutine_C3BC
;
; Global:
; First-pass core-game entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Game state, object pointers, and frame state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
UpdateGameStateRoutine_C3BC:
LDA $8D ; CPU:$C3BC PRG:03BC A5 8D
BEQ CorePathLoop_C3CC ; CPU:$C3BE PRG:03BE F0 0C
LDA #$00 ; CPU:$C3C0 PRG:03C0 A9 00
STA $FB ; CPU:$C3C2 PRG:03C2 85 FB
STA $FC ; CPU:$C3C4 PRG:03C4 85 FC
STA $FD ; CPU:$C3C6 PRG:03C6 85 FD
STA $FE ; CPU:$C3C8 PRG:03C8 85 FE
STA $FF ; CPU:$C3CA PRG:03CA 85 FF
CorePathLoop_C3CC:
RTS ; CPU:$C3CC PRG:03CC 60
CorePathOnNonZero_C3CD:
CMP #$01 ; CPU:$C3CD PRG:03CD C9 01
BEQ CorePathOnZero_C400 ; CPU:$C3CF PRG:03CF F0 2F
DEC $93 ; CPU:$C3D1 PRG:03D1 C6 93
BPL CorePathContinue_C3DF ; CPU:$C3D3 PRG:03D3 10 0A
LDA #$0A ; CPU:$C3D5 PRG:03D5 A9 0A
STA $93 ; CPU:$C3D7 PRG:03D7 85 93
LDA $92 ; CPU:$C3D9 PRG:03D9 A5 92
BEQ CorePathContinue_C3DF ; CPU:$C3DB PRG:03DB F0 02
DEC $92 ; CPU:$C3DD PRG:03DD C6 92
CorePathContinue_C3DF:
RTS ; CPU:$C3DF PRG:03DF 60
CorePathOnZero_C3E0:
JSR RunGameTaskRoutine_C6BE ; CPU:$C3E0 PRG:03E0 20 BE C6
RTS ; CPU:$C3E3 PRG:03E3 60
;------------------------------------------------------------
; RunGameTaskRoutine_C3E4
;
; Global:
; First-pass core-game entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Game state, object pointers, and frame state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
RunGameTaskRoutine_C3E4:
LDX $4D ; CPU:$C3E4 PRG:03E4 A6 4D
BNE CorePathOnNonZero_C3EE ; CPU:$C3E6 PRG:03E6 D0 06
LDA #$01 ; CPU:$C3E8 PRG:03E8 A9 01
STA $FB ; CPU:$C3EA PRG:03EA 85 FB
LDX #$04 ; CPU:$C3EC PRG:03EC A2 04
CorePathOnNonZero_C3EE:
DEX ; CPU:$C3EE PRG:03EE CA
STX $4D ; CPU:$C3EF PRG:03EF 86 4D
LDA #$40 ; CPU:$C3F1 PRG:03F1 A9 40
STA $7D ; CPU:$C3F3 PRG:03F3 85 7D
LDA #$01 ; CPU:$C3F5 PRG:03F5 A9 01
STA $4F ; CPU:$C3F7 PRG:03F7 85 4F
STA $4E ; CPU:$C3F9 PRG:03F9 85 4E
LDA #$00 ; CPU:$C3FB PRG:03FB A9 00
JMP UpdateGameStateDispatch_C2F1 ; CPU:$C3FD PRG:03FD 4C F1 C2
CorePathOnZero_C400:
DEC $92 ; CPU:$C400 PRG:0400 C6 92
;------------------------------------------------------------
; UpdateGameStateRoutine_C402
;
; Global:
; First-pass core-game entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Game state, object pointers, and frame state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
UpdateGameStateRoutine_C402:
LDA $8A ; CPU:$C402 PRG:0402 A5 8A
CMP #$01 ; CPU:$C404 PRG:0404 C9 01
BNE CorePathLoop_C3CC ; CPU:$C406 PRG:0406 D0 C4
LDA $78 ; CPU:$C408 PRG:0408 A5 78
BNE CorePathLoop_C3CC ; CPU:$C40A PRG:040A D0 C0
LDX #$10 ; CPU:$C40C PRG:040C A2 10
LDA $8F ; CPU:$C40E PRG:040E A5 8F
BNE CorePathContinue_C41C ; CPU:$C410 PRG:0410 D0 0A
LDX #$08 ; CPU:$C412 PRG:0412 A2 08
LDA $2E ; CPU:$C414 PRG:0414 A5 2E
CMP #$02 ; CPU:$C416 PRG:0416 C9 02
BCC CorePathContinue_C41C ; CPU:$C418 PRG:0418 90 02
LDX #$04 ; CPU:$C41A PRG:041A A2 04
CorePathContinue_C41C:
STX $FB ; CPU:$C41C PRG:041C 86 FB
JMP UpdateGameStateRoutine_C3BC ; CPU:$C41E PRG:041E 4C BC C3
CorePathLoop_C421:
LDA $55 ; CPU:$C421 PRG:0421 A5 55
BNE CorePathOnNonZero_C437 ; CPU:$C423 PRG:0423 D0 12
LDA #$04 ; CPU:$C425 PRG:0425 A9 04
STA $55 ; CPU:$C427 PRG:0427 85 55
LDA #$01 ; CPU:$C429 PRG:0429 A9 01
EOR $A7 ; CPU:$C42B PRG:042B 45 A7
STA $A7 ; CPU:$C42D PRG:042D 85 A7
BEQ CorePathLoop_C432 ; CPU:$C42F PRG:042F F0 01
INY ; CPU:$C431 PRG:0431 C8
CorePathLoop_C432:
LDX #$08 ; CPU:$C432 PRG:0432 A2 08
JSR UpdateObjectBufferRoutine_D1AE ; CPU:$C434 PRG:0434 20 AE D1
CorePathOnNonZero_C437:
RTS ; CPU:$C437 PRG:0437 60
CorePathLoop_C438:
LDX #$01 ; CPU:$C438 PRG:0438 A2 01
UpdatePlayerStateLoop_C43A:
LDA $90,X ; CPU:$C43A PRG:043A B5 90
CMP #$02 ; CPU:$C43C PRG:043C C9 02
BCS CorePathOnCarry_C475 ; CPU:$C43E PRG:043E B0 35
DEX ; CPU:$C440 PRG:0440 CA
BPL UpdatePlayerStateLoop_C43A ; CPU:$C441 PRG:0441 10 F7
LDX $43 ; CPU:$C443 PRG:0443 A6 43
LDA $40 ; CPU:$C445 PRG:0445 A5 40
AND #$02 ; CPU:$C447 PRG:0447 29 02
BEQ CorePathOnZero_C45A ; CPU:$C449 PRG:0449 F0 0F
LDA $40 ; CPU:$C44B PRG:044B A5 40
AND #$FD ; CPU:$C44D PRG:044D 29 FD
STA $40 ; CPU:$C44F PRG:044F 85 40
LDY #$14 ; CPU:$C451 PRG:0451 A0 14
LDX #$0C ; CPU:$C453 PRG:0453 A2 0C
JSR UpdateObjectBufferRoutine_D1AE ; CPU:$C455 PRG:0455 20 AE D1
LDX #$FF ; CPU:$C458 PRG:0458 A2 FF
CorePathOnZero_C45A:
INX ; CPU:$C45A PRG:045A E8
INX ; CPU:$C45B PRG:045B E8
INX ; CPU:$C45C PRG:045C E8
CPX #$F2 ; CPU:$C45D PRG:045D E0 F2
BEQ RunGameTaskRoutine_C463 ; CPU:$C45F PRG:045F F0 02
STX $43 ; CPU:$C461 PRG:0461 86 43
;------------------------------------------------------------
; RunGameTaskRoutine_C463
;
; Global:
; First-pass core-game entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Game state, object pointers, and frame state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
RunGameTaskRoutine_C463:
LDY #$1F ; CPU:$C463 PRG:0463 A0 1F
LDA #$F4 ; CPU:$C465 PRG:0465 A9 F4
CorePathLoop_C467:
STA $02E0,Y ; CPU:$C467 PRG:0467 99 E0 02
DEY ; CPU:$C46A PRG:046A 88
BPL CorePathLoop_C467 ; CPU:$C46B PRG:046B 10 FA
RTS ; CPU:$C46D PRG:046D 60
CorePathLoop_C46E:
JSR UpdatePlayerStateRoutine_C504 ; CPU:$C46E PRG:046E 20 04 C5
JSR ProcessObjectStateRoutine_DA26 ; CPU:$C471 PRG:0471 20 26 DA
RTS ; CPU:$C474 PRG:0474 60
CorePathOnCarry_C475:
LDA #$0A ; CPU:$C475 PRG:0475 A9 0A
STA $78 ; CPU:$C477 PRG:0477 85 78
RTS ; CPU:$C479 PRG:0479 60
;------------------------------------------------------------
; UpdateGameStateRoutine_C47A
;
; Global:
; First-pass core-game entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Game state, object pointers, and frame state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
UpdateGameStateRoutine_C47A:
JSR ProcessObjectStateRoutine_D1CE ; CPU:$C47A PRG:047A 20 CE D1
LDA $78 ; CPU:$C47D PRG:047D A5 78
BEQ CorePathLoop_C46E ; CPU:$C47F PRG:047F F0 ED
CMP #$22 ; CPU:$C481 PRG:0481 C9 22
BCS CorePathLoop_C4B3 ; CPU:$C483 PRG:0483 B0 2E
CMP #$0B ; CPU:$C485 PRG:0485 C9 0B
BEQ CorePathLoop_C432 ; CPU:$C487 PRG:0487 F0 A9
BCS CorePathLoop_C421 ; CPU:$C489 PRG:0489 B0 96
CMP #$01 ; CPU:$C48B PRG:048B C9 01
BNE CorePathLoop_C438 ; CPU:$C48D PRG:048D D0 A9
DEC $78 ; CPU:$C48F PRG:048F C6 78
LDA #$02 ; CPU:$C491 PRG:0491 A9 02
STA $8A ; CPU:$C493 PRG:0493 85 8A
LDA #$00 ; CPU:$C495 PRG:0495 A9 00
STA $76 ; CPU:$C497 PRG:0497 85 76
STA $D0 ; CPU:$C499 PRG:0499 85 D0
STA $D1 ; CPU:$C49B PRG:049B 85 D1
LDA $90 ; CPU:$C49D PRG:049D A5 90
BNE UpdatePlayerStateOnNonZero_C4A3 ; CPU:$C49F PRG:049F D0 02
INC $80 ; CPU:$C4A1 PRG:04A1 E6 80
UpdatePlayerStateOnNonZero_C4A3:
LDA $91 ; CPU:$C4A3 PRG:04A3 A5 91
BNE CorePathOnNonZero_C4A9 ; CPU:$C4A5 PRG:04A5 D0 02
INC $81 ; CPU:$C4A7 PRG:04A7 E6 81
CorePathOnNonZero_C4A9:
LDA #$87 ; CPU:$C4A9 PRG:04A9 A9 87
LDX #$C0 ; CPU:$C4AB PRG:04AB A2 C0
JSR ProcessResourceStateRoutine_F77D ; CPU:$C4AD PRG:04AD 20 7D F7
JMP ProcessObjectStateDispatch_DD48 ; CPU:$C4B0 PRG:04B0 4C 48 DD
CorePathLoop_C4B3:
LDA #$21 ; CPU:$C4B3 PRG:04B3 A9 21
LDX $AF ; CPU:$C4B5 PRG:04B5 A6 AF
BEQ CorePathOnZero_C4BF ; CPU:$C4B7 PRG:04B7 F0 06
LDA #$FF ; CPU:$C4B9 PRG:04B9 A9 FF
STA $55 ; CPU:$C4BB PRG:04BB 85 55
LDA #$17 ; CPU:$C4BD PRG:04BD A9 17
CorePathOnZero_C4BF:
STA $78 ; CPU:$C4BF PRG:04BF 85 78
LDA #$F0 ; CPU:$C4C1 PRG:04C1 A9 F0
CorePathLoop_C4C3:
TAY ; CPU:$C4C3 PRG:04C3 A8
LDA #$01 ; CPU:$C4C4 PRG:04C4 A9 01
STA $03F0,Y ; CPU:$C4C6 PRG:04C6 99 F0 03
TYA ; CPU:$C4C9 PRG:04C9 98
SEC ; CPU:$C4CA PRG:04CA 38
SBC #$10 ; CPU:$C4CB PRG:04CB E9 10
BNE CorePathLoop_C4C3 ; CPU:$C4CD PRG:04CD D0 F4
LDA #$F0 ; CPU:$C4CF PRG:04CF A9 F0
CorePathLoop_C4D1:
TAY ; CPU:$C4D1 PRG:04D1 A8
LDA #$00 ; CPU:$C4D2 PRG:04D2 A9 00
STA $0600,Y ; CPU:$C4D4 PRG:04D4 99 00 06
LDX $05F0,Y ; CPU:$C4D7 PRG:04D7 BE F0 05
BNE CorePathOnNonZero_C4E1 ; CPU:$C4DA PRG:04DA D0 05
LDA #$01 ; CPU:$C4DC PRG:04DC A9 01
STA $05F0,Y ; CPU:$C4DE PRG:04DE 99 F0 05
CorePathOnNonZero_C4E1:
TYA ; CPU:$C4E1 PRG:04E1 98
SEC ; CPU:$C4E2 PRG:04E2 38
SBC #$20 ; CPU:$C4E3 PRG:04E3 E9 20
CMP #$F0 ; CPU:$C4E5 PRG:04E5 C9 F0
BNE CorePathLoop_C4D1 ; CPU:$C4E7 PRG:04E7 D0 E8
LDA #$80 ; CPU:$C4E9 PRG:04E9 A9 80
CorePathLoop_C4EB:
TAY ; CPU:$C4EB PRG:04EB A8
LDA #$00 ; CPU:$C4EC PRG:04EC A9 00
STA $0470,Y ; CPU:$C4EE PRG:04EE 99 70 04
TYA ; CPU:$C4F1 PRG:04F1 98
SEC ; CPU:$C4F2 PRG:04F2 38
SBC #$20 ; CPU:$C4F3 PRG:04F3 E9 20
BNE CorePathLoop_C4EB ; CPU:$C4F5 PRG:04F5 D0 F4
LDA #$40 ; CPU:$C4F7 PRG:04F7 A9 40
STA $FB ; CPU:$C4F9 PRG:04F9 85 FB
JSR RunGameTaskRoutine_C7F3 ; CPU:$C4FB PRG:04FB 20 F3 C7
LDA #$83 ; CPU:$C4FE PRG:04FE A9 83
JSR ProcessResourceStateRoutine_F31A ; CPU:$C500 PRG:0500 20 1A F3
RTS ; CPU:$C503 PRG:0503 60
;------------------------------------------------------------
; UpdatePlayerStateRoutine_C504
;
; Global:
; First-pass core-game entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Game state, object pointers, and frame state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
UpdatePlayerStateRoutine_C504:
LDA $90 ; CPU:$C504 PRG:0504 A5 90
CMP #$01 ; CPU:$C506 PRG:0506 C9 01
BNE CorePathOnNonZero_C51A ; CPU:$C508 PRG:0508 D0 10
LDA $91 ; CPU:$C50A PRG:050A A5 91
CMP #$01 ; CPU:$C50C PRG:050C C9 01
BNE CorePathOnNonZero_C51A ; CPU:$C50E PRG:050E D0 0A
LDA #$01 ; CPU:$C510 PRG:0510 A9 01
STA $AF ; CPU:$C512 PRG:0512 85 AF
LDA #$23 ; CPU:$C514 PRG:0514 A9 23
STA $78 ; CPU:$C516 PRG:0516 85 78
BNE CorePathLoop_C4B3 ; CPU:$C518 PRG:0518 D0 99
CorePathOnNonZero_C51A:
RTS ; CPU:$C51A PRG:051A 60
.byte $12, $F5, $F6, $1C, $0B, $18, $17, $1E, $1C, $24, $24, $02, $00, $00, $00, $AD ; CPU:$C51B PRG:051B 0B
.byte $29, $2B, $1D, $19, $0E, $1B, $0F, $0E, $0C, $1D, $24, $03, $00, $00, $00, $AD ; CPU:$C52B PRG:052B 0B
RunGameTaskDispatch_C53B:
LDA $3F ; CPU:$C53B PRG:053B A5 3F
BNE CorePathOnNonZero_C581 ; CPU:$C53D PRG:053D D0 42
LDA #$01 ; CPU:$C53F PRG:053F A9 01
STA $0F ; CPU:$C541 PRG:0541 85 0F
LDA #$2A ; CPU:$C543 PRG:0543 A9 2A
LDX #$EE ; CPU:$C545 PRG:0545 A2 EE
UpdatePlayerStateLoop_C547:
STX $00 ; CPU:$C547 PRG:0547 86 00
STA $01 ; CPU:$C549 PRG:0549 85 01
LDX $0F ; CPU:$C54B PRG:054B A6 0F
LDA $90,X ; CPU:$C54D PRG:054D B5 90
CMP #$01 ; CPU:$C54F PRG:054F C9 01
BEQ CorePathOnZero_C56B ; CPU:$C551 PRG:0551 F0 18
LDA #$2D ; CPU:$C553 PRG:0553 A9 2D
STA $02 ; CPU:$C555 PRG:0555 85 02
LDA #$C5 ; CPU:$C557 PRG:0557 A9 C5
STA $03 ; CPU:$C559 PRG:0559 85 03
JSR UpdateCommandBufferRoutine_F3A1 ; CPU:$C55B PRG:055B 20 A1 F3
LDA $0F ; CPU:$C55E PRG:055E A5 0F
ORA #$80 ; CPU:$C560 PRG:0560 09 80
STA $01 ; CPU:$C562 PRG:0562 85 01
LDA #$30 ; CPU:$C564 PRG:0564 A9 30
STA $00 ; CPU:$C566 PRG:0566 85 00
JSR ProcessResourceStateRoutine_F40C ; CPU:$C568 PRG:0568 20 0C F4
CorePathOnZero_C56B:
LDA #$29 ; CPU:$C56B PRG:056B A9 29
LDX #$2E ; CPU:$C56D PRG:056D A2 2E
DEC $0F ; CPU:$C56F PRG:056F C6 0F
BPL UpdatePlayerStateLoop_C547 ; CPU:$C571 PRG:0571 10 D4
JSR RunGameTaskRoutine_C7EF ; CPU:$C573 PRG:0573 20 EF C7
LDA #$02 ; CPU:$C576 PRG:0576 A9 02
STA $FE ; CPU:$C578 PRG:0578 85 FE
JSR RunGameTaskRoutine_C809 ; CPU:$C57A PRG:057A 20 09 C8
INC $AC ; CPU:$C57D PRG:057D E6 AC
LDA #$18 ; CPU:$C57F PRG:057F A9 18
CorePathOnNonZero_C581:
JMP RunGameTaskDispatch_C7EA ; CPU:$C581 PRG:0581 4C EA C7
CorePathLoop_C584:
LDA $A1 ; CPU:$C584 PRG:0584 A5 A1
BNE CorePathContinue_C5C5 ; CPU:$C586 PRG:0586 D0 3D
LDA $2E ; CPU:$C588 PRG:0588 A5 2E
BNE CorePathOnNonZero_C590 ; CPU:$C58A PRG:058A D0 04
LDA $2F ; CPU:$C58C PRG:058C A5 2F
BEQ CorePathContinue_C5C5 ; CPU:$C58E PRG:058E F0 35
CorePathOnNonZero_C590:
LDA #$01 ; CPU:$C590 PRG:0590 A9 01
STA $0F ; CPU:$C592 PRG:0592 85 0F
UpdatePlayerStateLoop_C594:
LDA #$10 ; CPU:$C594 PRG:0594 A9 10
STA $00 ; CPU:$C596 PRG:0596 85 00
LDX $0F ; CPU:$C598 PRG:0598 A6 0F
LDA $90,X ; CPU:$C59A PRG:059A B5 90
CMP #$01 ; CPU:$C59C PRG:059C C9 01
BEQ CorePathOnZero_C5A5 ; CPU:$C59E PRG:059E F0 05
STX $01 ; CPU:$C5A0 PRG:05A0 86 01
JSR ProcessResourceStateRoutine_F40C ; CPU:$C5A2 PRG:05A2 20 0C F4
CorePathOnZero_C5A5:
DEC $0F ; CPU:$C5A5 PRG:05A5 C6 0F
BPL UpdatePlayerStateLoop_C594 ; CPU:$C5A7 PRG:05A7 10 EB
JSR RunGameTaskRoutine_C7EF ; CPU:$C5A9 PRG:05A9 20 EF C7
LDA #$10 ; CPU:$C5AC PRG:05AC A9 10
STA $00 ; CPU:$C5AE PRG:05AE 85 00
LDA #$02 ; CPU:$C5B0 PRG:05B0 A9 02
STA $01 ; CPU:$C5B2 PRG:05B2 85 01
JSR ProcessResourceStateRoutine_F408 ; CPU:$C5B4 PRG:05B4 20 08 F4
LDA $2F ; CPU:$C5B7 PRG:05B7 A5 2F
AND #$F0 ; CPU:$C5B9 PRG:05B9 29 F0
STA $2F ; CPU:$C5BB PRG:05BB 85 2F
LDA #$82 ; CPU:$C5BD PRG:05BD A9 82
JSR ProcessResourceStateRoutine_F31A ; CPU:$C5BF PRG:05BF 20 1A F3
JMP RunGameTaskRoutine_C809 ; CPU:$C5C2 PRG:05C2 4C 09 C8
CorePathContinue_C5C5:
JMP RunGameTaskDispatch_C7E5 ; CPU:$C5C5 PRG:05C5 4C E5 C7
CorePathLoop_C5C8:
JMP RunGameTaskDispatch_C53B ; CPU:$C5C8 PRG:05C8 4C 3B C5
CorePathLoop_C5CB:
LDA $8F ; CPU:$C5CB PRG:05CB A5 8F
BNE CorePathLoop_C5C8 ; CPU:$C5CD PRG:05CD D0 F9
LDA #$7B ; CPU:$C5CF PRG:05CF A9 7B
LDX #$C1 ; CPU:$C5D1 PRG:05D1 A2 C1
JSR ProcessResourceStateRoutine_F77D ; CPU:$C5D3 PRG:05D3 20 7D F7
LDA #$BA ; CPU:$C5D6 PRG:05D6 A9 BA
STA $04A1 ; CPU:$C5D8 PRG:05D8 8D A1 04
LDX $4C ; CPU:$C5DB PRG:05DB A6 4C
BNE CorePathOnNonZero_C5E4 ; CPU:$C5DD PRG:05DD D0 05
LDX #$01 ; CPU:$C5DF PRG:05DF A2 01
STX $04A0 ; CPU:$C5E1 PRG:05E1 8E A0 04
CorePathOnNonZero_C5E4:
JSR RunGameTaskRoutine_C81A ; CPU:$C5E4 PRG:05E4 20 1A C8
LDA #$20 ; CPU:$C5E7 PRG:05E7 A9 20
JMP RunGameTaskDispatch_C7EA ; CPU:$C5E9 PRG:05E9 4C EA C7
UpdatePlayerStateDispatch_C5EC:
LDA $AF ; CPU:$C5EC PRG:05EC A5 AF
BEQ CorePathLoop_C584 ; CPU:$C5EE PRG:05EE F0 94
LDA #$90 ; CPU:$C5F0 PRG:05F0 A9 90
RunGameTaskDispatch_C5F2:
STA $51 ; CPU:$C5F2 PRG:05F2 85 51
INC $AC ; CPU:$C5F4 PRG:05F4 E6 AC
RTS ; CPU:$C5F6 PRG:05F6 60
RunGameTaskDispatch_C5F7:
LDA $D6 ; CPU:$C5F7 PRG:05F7 A5 D6
BNE CorePathOnNonZero_C5FF ; CPU:$C5F9 PRG:05F9 D0 04
LDA $D7 ; CPU:$C5FB PRG:05FB A5 D7
BEQ CorePathOnZero_C61E ; CPU:$C5FD PRG:05FD F0 1F
CorePathOnNonZero_C5FF:
LDX #$01 ; CPU:$C5FF PRG:05FF A2 01
CorePathLoop_C601:
STX $0F ; CPU:$C601 PRG:0601 86 0F
LDA $D6,X ; CPU:$C603 PRG:0603 B5 D6
BEQ CorePathOnZero_C60E ; CPU:$C605 PRG:0605 F0 07
DEC $D6,X ; CPU:$C607 PRG:0607 D6 D6
LDA #$05 ; CPU:$C609 PRG:0609 A9 05
JSR RunGameTaskRoutine_C830 ; CPU:$C60B PRG:060B 20 30 C8
CorePathOnZero_C60E:
LDX $0F ; CPU:$C60E PRG:060E A6 0F
DEX ; CPU:$C610 PRG:0610 CA
BPL CorePathLoop_C601 ; CPU:$C611 PRG:0611 10 EE
JSR RunGameTaskRoutine_C7EF ; CPU:$C613 PRG:0613 20 EF C7
JSR RunGameTaskRoutine_C824 ; CPU:$C616 PRG:0616 20 24 C8
LDA #$18 ; CPU:$C619 PRG:0619 A9 18
JMP RunGameTaskDispatch_C80B ; CPU:$C61B PRG:061B 4C 0B C8
CorePathOnZero_C61E:
JMP RunGameTaskDispatch_C7E5 ; CPU:$C61E PRG:061E 4C E5 C7
RunGameTaskDispatch_C621:
LDA $AF ; CPU:$C621 PRG:0621 A5 AF
BEQ CorePathLoop_C5CB ; CPU:$C623 PRG:0623 F0 A6
JSR RunGameTaskRoutine_C809 ; CPU:$C625 PRG:0625 20 09 C8
LDA #$FF ; CPU:$C628 PRG:0628 A9 FF
JMP RunGameTaskDispatch_C5F2 ; CPU:$C62A PRG:062A 4C F2 C5
RunGameTaskDispatch_C62D:
LDA #$82 ; CPU:$C62D PRG:062D A9 82
JSR ProcessResourceStateRoutine_F31A ; CPU:$C62F PRG:062F 20 1A F3
LDA #$6A ; CPU:$C632 PRG:0632 A9 6A
LDX #$C1 ; CPU:$C634 PRG:0634 A2 C1
JSR ProcessResourceStateRoutine_F77D ; CPU:$C636 PRG:0636 20 7D F7
LDA #$A0 ; CPU:$C639 PRG:0639 A9 A0
STA $0441 ; CPU:$C63B PRG:063B 8D 41 04
LDA #$01 ; CPU:$C63E PRG:063E A9 01
STA $0449 ; CPU:$C640 PRG:0640 8D 49 04
LDA #$C0 ; CPU:$C643 PRG:0643 A9 C0
STA $044B ; CPU:$C645 PRG:0645 8D 4B 04
LDX #$00 ; CPU:$C648 PRG:0648 A2 00
JSR ProcessObjectStateRoutine_D44A ; CPU:$C64A PRG:064A 20 4A D4
LDX $4C ; CPU:$C64D PRG:064D A6 4C
BEQ CorePathOnZero_C682 ; CPU:$C64F PRG:064F F0 31
JSR ProcessObjectStateRoutine_D44A ; CPU:$C651 PRG:0651 20 4A D4
CorePathLoop_C654:
LDX #$00 ; CPU:$C654 PRG:0654 A2 00
LDA $4C ; CPU:$C656 PRG:0656 A5 4C
BEQ CorePathOnZero_C670 ; CPU:$C658 PRG:0658 F0 16
LDA $D5 ; CPU:$C65A PRG:065A A5 D5
BMI CorePathLoop_C66A ; CPU:$C65C PRG:065C 30 0C
SEC ; CPU:$C65E PRG:065E 38
LDY $D4 ; CPU:$C65F PRG:065F A4 D4
BMI CorePathOnNegative_C667 ; CPU:$C661 PRG:0661 30 04
CMP $D4 ; CPU:$C663 PRG:0663 C5 D4
BEQ CorePathLoop_C66B ; CPU:$C665 PRG:0665 F0 04
CorePathOnNegative_C667:
INX ; CPU:$C667 PRG:0667 E8
BCC CorePathLoop_C66B ; CPU:$C668 PRG:0668 90 01
CorePathLoop_C66A:
INX ; CPU:$C66A PRG:066A E8
CorePathLoop_C66B:
STX $AE ; CPU:$C66B PRG:066B 86 AE
JMP RunGameTaskDispatch_C7E8 ; CPU:$C66D PRG:066D 4C E8 C7
CorePathOnZero_C670:
LDA $2E ; CPU:$C670 PRG:0670 A5 2E
CMP $A8 ; CPU:$C672 PRG:0672 C5 A8
BCS CorePathLoop_C66A ; CPU:$C674 PRG:0674 B0 F4
BCC CorePathLoop_C66B ; CPU:$C676 PRG:0676 90 F3
CorePathLoop_C678:
LDA $AF ; CPU:$C678 PRG:0678 A5 AF
BEQ CorePathOnZero_C67F ; CPU:$C67A PRG:067A F0 03
JMP RunGameTaskRoutine_C3E4 ; CPU:$C67C PRG:067C 4C E4 C3
CorePathOnZero_C67F:
JMP RunGameTaskDispatch_C5F7 ; CPU:$C67F PRG:067F 4C F7 C5
CorePathOnZero_C682:
LDA #$01 ; CPU:$C682 PRG:0682 A9 01
STA $0440 ; CPU:$C684 PRG:0684 8D 40 04
BNE CorePathLoop_C654 ; CPU:$C687 PRG:0687 D0 CB
CorePathLoop_C689:
LDA #$00 ; CPU:$C689 PRG:0689 A9 00
LDX $0405 ; CPU:$C68B PRG:068B AE 05 04
BNE CorePathOnNonZero_C6A2 ; CPU:$C68E PRG:068E D0 12
LDA $54 ; CPU:$C690 PRG:0690 A5 54
BNE CorePathOnNonZero_C6A8 ; CPU:$C692 PRG:0692 D0 14
LDA #$10 ; CPU:$C694 PRG:0694 A9 10
STA $54 ; CPU:$C696 PRG:0696 85 54
LDA #$04 ; CPU:$C698 PRG:0698 A9 04
STA $FC ; CPU:$C69A PRG:069A 85 FC
LDA $AD ; CPU:$C69C PRG:069C A5 AD
EOR #$40 ; CPU:$C69E PRG:069E 49 40
STA $AD ; CPU:$C6A0 PRG:06A0 85 AD
CorePathOnNonZero_C6A2:
STA $0408 ; CPU:$C6A2 PRG:06A2 8D 08 04
STA $0448 ; CPU:$C6A5 PRG:06A5 8D 48 04
CorePathOnNonZero_C6A8:
JSR ProcessObjectStateRoutine_D083 ; CPU:$C6A8 PRG:06A8 20 83 D0
JSR ProcessObjectStateRoutine_D0A5 ; CPU:$C6AB PRG:06AB 20 A5 D0
JSR UpdateObjectBuffer_D0C8 ; CPU:$C6AE PRG:06AE 20 C8 D0
JSR ObjectPath_D1D6 ; CPU:$C6B1 PRG:06B1 20 D6 D1
RTS ; CPU:$C6B4 PRG:06B4 60
CorePathLoop_C6B5:
JMP UpdatePlayerStateDispatch_C5EC ; CPU:$C6B5 PRG:06B5 4C EC C5
CorePathLoop_C6B8:
JMP RunGameTaskDispatch_C621 ; CPU:$C6B8 PRG:06B8 4C 21 C6
CorePathLoop_C6BB:
JMP RunGameTaskDispatch_C62D ; CPU:$C6BB PRG:06BB 4C 2D C6
;------------------------------------------------------------
; RunGameTaskRoutine_C6BE
;
; Global:
; First-pass core-game entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Game state, object pointers, and frame state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
RunGameTaskRoutine_C6BE:
LDA $51 ; CPU:$C6BE PRG:06BE A5 51
BNE CorePathLoop_C689 ; CPU:$C6C0 PRG:06C0 D0 C7
LDX $AC ; CPU:$C6C2 PRG:06C2 A6 AC
BEQ CorePathLoop_C6BB ; CPU:$C6C4 PRG:06C4 F0 F5
DEX ; CPU:$C6C6 PRG:06C6 CA
BEQ CorePathLoop_C6B5 ; CPU:$C6C7 PRG:06C7 F0 EC
DEX ; CPU:$C6C9 PRG:06C9 CA
BEQ CorePathLoop_C6B8 ; CPU:$C6CA PRG:06CA F0 EC
DEX ; CPU:$C6CC PRG:06CC CA
BEQ CorePathLoop_C678 ; CPU:$C6CD PRG:06CD F0 A9
DEX ; CPU:$C6CF PRG:06CF CA
BEQ CorePathOnZero_C740 ; CPU:$C6D0 PRG:06D0 F0 6E
DEX ; CPU:$C6D2 PRG:06D2 CA
BEQ CorePathOnZero_C73A ; CPU:$C6D3 PRG:06D3 F0 65
DEX ; CPU:$C6D5 PRG:06D5 CA
BEQ CorePathOnZero_C73D ; CPU:$C6D6 PRG:06D6 F0 65
LDA #$00 ; CPU:$C6D8 PRG:06D8 A9 00
LDX $87 ; CPU:$C6DA PRG:06DA A6 87
INX ; CPU:$C6DC PRG:06DC E8
STX $87 ; CPU:$C6DD PRG:06DD 86 87
CPX #$05 ; CPU:$C6DF PRG:06DF E0 05
BNE CorePathOnNonZero_C6E5 ; CPU:$C6E1 PRG:06E1 D0 02
LDA #$01 ; CPU:$C6E3 PRG:06E3 A9 01
CorePathOnNonZero_C6E5:
STA $8F ; CPU:$C6E5 PRG:06E5 85 8F
CPX #$06 ; CPU:$C6E7 PRG:06E7 E0 06
BNE CorePathOnNonZero_C703 ; CPU:$C6E9 PRG:06E9 D0 18
LDX #$01 ; CPU:$C6EB PRG:06EB A2 01
STX $87 ; CPU:$C6ED PRG:06ED 86 87
LDA $88 ; CPU:$C6EF PRG:06EF A5 88
INC $88 ; CPU:$C6F1 PRG:06F1 E6 88
CMP #$03 ; CPU:$C6F3 PRG:06F3 C9 03
BNE CorePathOnNonZero_C703 ; CPU:$C6F5 PRG:06F5 D0 0C
STX $8C ; CPU:$C6F7 PRG:06F7 86 8C
STX $84 ; CPU:$C6F9 PRG:06F9 86 84
LDA #$00 ; CPU:$C6FB PRG:06FB A9 00
STA $82 ; CPU:$C6FD PRG:06FD 85 82
STA $83 ; CPU:$C6FF PRG:06FF 85 83
STA $88 ; CPU:$C701 PRG:0701 85 88
CorePathOnNonZero_C703:
LDA $87 ; CPU:$C703 PRG:0703 A5 87
ASL A ; CPU:$C705 PRG:0705 0A
ASL A ; CPU:$C706 PRG:0706 0A
ORA $88 ; CPU:$C707 PRG:0707 05 88
STA $89 ; CPU:$C709 PRG:0709 85 89
LDX $8C ; CPU:$C70B PRG:070B A6 8C
LDA $8F ; CPU:$C70D PRG:070D A5 8F
BEQ UpdateGameStateOnZero_C713 ; CPU:$C70F PRG:070F F0 02
LDX #$00 ; CPU:$C711 PRG:0711 A2 00
UpdateGameStateOnZero_C713:
STX $8E ; CPU:$C713 PRG:0713 86 8E
LDA #$02 ; CPU:$C715 PRG:0715 A9 02
STA $8B ; CPU:$C717 PRG:0717 85 8B
DEC $84 ; CPU:$C719 PRG:0719 C6 84
BPL CorePathContinue_C72E ; CPU:$C71B PRG:071B 10 11
LDA #$02 ; CPU:$C71D PRG:071D A9 02
STA $84 ; CPU:$C71F PRG:071F 85 84
LDA $82 ; CPU:$C721 PRG:0721 A5 82
CMP #$07 ; CPU:$C723 PRG:0723 C9 07
BEQ CorePathContinue_C72E ; CPU:$C725 PRG:0725 F0 07
INC $82 ; CPU:$C727 PRG:0727 E6 82
LDA $82 ; CPU:$C729 PRG:0729 A5 82
LSR A ; CPU:$C72B PRG:072B 4A
STA $83 ; CPU:$C72C PRG:072C 85 83
CorePathContinue_C72E:
LDA #$01 ; CPU:$C72E PRG:072E A9 01
STA $00 ; CPU:$C730 PRG:0730 85 00
LDA #$03 ; CPU:$C732 PRG:0732 A9 03
STA $01 ; CPU:$C734 PRG:0734 85 01
JSR ProcessResourceStateRoutine_F40C ; CPU:$C736 PRG:0736 20 0C F4
RTS ; CPU:$C739 PRG:0739 60
CorePathOnZero_C73A:
JMP RunGameTaskDispatch_C772 ; CPU:$C73A PRG:073A 4C 72 C7
CorePathOnZero_C73D:
JMP RunGameTaskDispatch_C7AD ; CPU:$C73D PRG:073D 4C AD C7
CorePathOnZero_C740:
LDA #$01 ; CPU:$C740 PRG:0740 A9 01
STA $0480 ; CPU:$C742 PRG:0742 8D 80 04
STA $04A0 ; CPU:$C745 PRG:0745 8D A0 04
LDA #$46 ; CPU:$C748 PRG:0748 A9 46
STA $00 ; CPU:$C74A PRG:074A 85 00
LDA #$29 ; CPU:$C74C PRG:074C A9 29
STA $01 ; CPU:$C74E PRG:074E 85 01
LDA #$1B ; CPU:$C750 PRG:0750 A9 1B
STA $02 ; CPU:$C752 PRG:0752 85 02
LDA #$C5 ; CPU:$C754 PRG:0754 A9 C5
STA $03 ; CPU:$C756 PRG:0756 85 03
JSR UpdateCommandBufferRoutine_F3A1 ; CPU:$C758 PRG:0758 20 A1 F3
LDX $4C ; CPU:$C75B PRG:075B A6 4C
BEQ CorePathOnZero_C76A ; CPU:$C75D PRG:075D F0 0B
LDA #$06 ; CPU:$C75F PRG:075F A9 06
STA $00 ; CPU:$C761 PRG:0761 85 00
LDA #$2B ; CPU:$C763 PRG:0763 A9 2B
STA $01 ; CPU:$C765 PRG:0765 85 01
JSR UpdateCommandBufferRoutine_F3A1 ; CPU:$C767 PRG:0767 20 A1 F3
CorePathOnZero_C76A:
JSR RunGameTaskRoutine_C81A ; CPU:$C76A PRG:076A 20 1A C8
LDA #$20 ; CPU:$C76D PRG:076D A9 20
JMP RunGameTaskDispatch_C7EA ; CPU:$C76F PRG:076F 4C EA C7
RunGameTaskDispatch_C772:
LDA $D4 ; CPU:$C772 PRG:0772 A5 D4
BNE CorePathOnNonZero_C77A ; CPU:$C774 PRG:0774 D0 04
LDA $D5 ; CPU:$C776 PRG:0776 A5 D5
BEQ RunGameTaskDispatch_C7E5 ; CPU:$C778 PRG:0778 F0 6B
CorePathOnNonZero_C77A:
LDX #$01 ; CPU:$C77A PRG:077A A2 01
CorePathLoop_C77C:
STX $0F ; CPU:$C77C PRG:077C 86 0F
LDA $D4,X ; CPU:$C77E PRG:077E B5 D4
BEQ RunGameTaskDispatch_C78B ; CPU:$C780 PRG:0780 F0 09
BMI CorePathOnNegative_C79B ; CPU:$C782 PRG:0782 30 17
DEC $D4,X ; CPU:$C784 PRG:0784 D6 D4
LDA #$01 ; CPU:$C786 PRG:0786 A9 01
JSR RunGameTaskRoutine_C830 ; CPU:$C788 PRG:0788 20 30 C8
RunGameTaskDispatch_C78B:
LDX $0F ; CPU:$C78B PRG:078B A6 0F
DEX ; CPU:$C78D PRG:078D CA
BPL CorePathLoop_C77C ; CPU:$C78E PRG:078E 10 EC
JSR RunGameTaskRoutine_C7EF ; CPU:$C790 PRG:0790 20 EF C7
JSR RunGameTaskRoutine_C824 ; CPU:$C793 PRG:0793 20 24 C8
LDA #$05 ; CPU:$C796 PRG:0796 A9 05
JMP RunGameTaskDispatch_C80B ; CPU:$C798 PRG:0798 4C 0B C8
CorePathOnNegative_C79B:
INC $D4,X ; CPU:$C79B PRG:079B F6 D4
LDA #$01 ; CPU:$C79D PRG:079D A9 01
STA $00 ; CPU:$C79F PRG:079F 85 00
INX ; CPU:$C7A1 PRG:07A1 E8
INX ; CPU:$C7A2 PRG:07A2 E8
INX ; CPU:$C7A3 PRG:07A3 E8
INX ; CPU:$C7A4 PRG:07A4 E8
STX $01 ; CPU:$C7A5 PRG:07A5 86 01
JSR ProcessResourceStateRoutine_F408 ; CPU:$C7A7 PRG:07A7 20 08 F4
JMP RunGameTaskDispatch_C78B ; CPU:$C7AA PRG:07AA 4C 8B C7
RunGameTaskDispatch_C7AD:
LDX $AE ; CPU:$C7AD PRG:07AD A6 AE
BEQ CorePathOnZero_C7DD ; CPU:$C7AF PRG:07AF F0 2C
DEX ; CPU:$C7B1 PRG:07B1 CA
LDA $FFF8,X ; CPU:$C7B2 PRG:07B2 BD F8 FF
STA $00 ; CPU:$C7B5 PRG:07B5 85 00
LDA $C52B,X ; CPU:$C7B7 PRG:07B7 BD 2B C5
STA $01 ; CPU:$C7BA PRG:07BA 85 01
LDA #$1E ; CPU:$C7BC PRG:07BC A9 1E
STA $02 ; CPU:$C7BE PRG:07BE 85 02
LDA #$C5 ; CPU:$C7C0 PRG:07C0 A9 C5
STA $03 ; CPU:$C7C2 PRG:07C2 85 03
JSR UpdateCommandBufferRoutine_F3A1 ; CPU:$C7C4 PRG:07C4 20 A1 F3
DEC $AE ; CPU:$C7C7 PRG:07C7 C6 AE
LDA $AE ; CPU:$C7C9 PRG:07C9 A5 AE
ORA #$08 ; CPU:$C7CB PRG:07CB 09 08
STA $01 ; CPU:$C7CD PRG:07CD 85 01
LDA #$20 ; CPU:$C7CF PRG:07CF A9 20
STA $00 ; CPU:$C7D1 PRG:07D1 85 00
JSR ProcessResourceStateRoutine_F40C ; CPU:$C7D3 PRG:07D3 20 0C F4
JSR RunGameTaskRoutine_C7EF ; CPU:$C7D6 PRG:07D6 20 EF C7
LDA #$02 ; CPU:$C7D9 PRG:07D9 A9 02
STA $FE ; CPU:$C7DB PRG:07DB 85 FE
CorePathOnZero_C7DD:
JSR RunGameTaskRoutine_C809 ; CPU:$C7DD PRG:07DD 20 09 C8
LDA #$FF ; CPU:$C7E0 PRG:07E0 A9 FF
JMP RunGameTaskDispatch_C7EA ; CPU:$C7E2 PRG:07E2 4C EA C7
RunGameTaskDispatch_C7E5:
JSR RunGameTaskRoutine_C816 ; CPU:$C7E5 PRG:07E5 20 16 C8
RunGameTaskDispatch_C7E8:
LDA #$20 ; CPU:$C7E8 PRG:07E8 A9 20
RunGameTaskDispatch_C7EA:
STA $51 ; CPU:$C7EA PRG:07EA 85 51
INC $AC ; CPU:$C7EC PRG:07EC E6 AC
RTS ; CPU:$C7EE PRG:07EE 60
;------------------------------------------------------------
; RunGameTaskRoutine_C7EF
;
; Global:
; First-pass core-game entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Game state, object pointers, and frame state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
RunGameTaskRoutine_C7EF:
LDA #$01 ; CPU:$C7EF PRG:07EF A9 01
STA $FE ; CPU:$C7F1 PRG:07F1 85 FE
;------------------------------------------------------------
; RunGameTaskRoutine_C7F3
;
; Global:
; First-pass core-game entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Game state, object pointers, and frame state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
RunGameTaskRoutine_C7F3:
LDA #$F9 ; CPU:$C7F3 PRG:07F3 A9 F9
STA $00 ; CPU:$C7F5 PRG:07F5 85 00
JSR ProcessResourceStateRoutine_F500 ; CPU:$C7F7 PRG:07F7 20 00 F5
LDA #$0F ; CPU:$C7FA PRG:07FA A9 0F
JSR ProcessResourceStateRoutine_F31A ; CPU:$C7FC PRG:07FC 20 1A F3
LDX $4C ; CPU:$C7FF PRG:07FF A6 4C
BEQ CorePathOnZero_C808 ; CPU:$C801 PRG:0801 F0 05
LDA #$81 ; CPU:$C803 PRG:0803 A9 81
JSR ProcessResourceStateRoutine_F31A ; CPU:$C805 PRG:0805 20 1A F3
CorePathOnZero_C808:
RTS ; CPU:$C808 PRG:0808 60
;------------------------------------------------------------
; RunGameTaskRoutine_C809
;
; Global:
; First-pass core-game entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Game state, object pointers, and frame state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
RunGameTaskRoutine_C809:
LDA #$04 ; CPU:$C809 PRG:0809 A9 04
RunGameTaskDispatch_C80B:
STA $51 ; CPU:$C80B PRG:080B 85 51
LDA #$01 ; CPU:$C80D PRG:080D A9 01
CorePathLoop_C80F:
STA $0405 ; CPU:$C80F PRG:080F 8D 05 04
STA $0445 ; CPU:$C812 PRG:0812 8D 45 04
RTS ; CPU:$C815 PRG:0815 60
;------------------------------------------------------------
; RunGameTaskRoutine_C816
;
; Global:
; First-pass core-game entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Game state, object pointers, and frame state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
RunGameTaskRoutine_C816:
LDA #$00 ; CPU:$C816 PRG:0816 A9 00
BEQ CorePathLoop_C80F ; CPU:$C818 PRG:0818 F0 F5
;------------------------------------------------------------
; RunGameTaskRoutine_C81A
;
; Global:
; First-pass core-game entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Game state, object pointers, and frame state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
RunGameTaskRoutine_C81A:
LDY #$07 ; CPU:$C81A PRG:081A A0 07
LDA #$00 ; CPU:$C81C PRG:081C A9 00
CorePathLoop_C81E:
STA a:$0034,Y ; CPU:$C81E PRG:081E 99 34 00
DEY ; CPU:$C821 PRG:0821 88
BPL CorePathLoop_C81E ; CPU:$C822 PRG:0822 10 FA
;------------------------------------------------------------
; RunGameTaskRoutine_C824
;
; Global:
; First-pass core-game entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Game state, object pointers, and frame state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
RunGameTaskRoutine_C824:
LDA #$48 ; CPU:$C824 PRG:0824 A9 48
LDX $4C ; CPU:$C826 PRG:0826 A6 4C
BEQ CorePathOnZero_C82C ; CPU:$C828 PRG:0828 F0 02
LDA #$45 ; CPU:$C82A PRG:082A A9 45
CorePathOnZero_C82C:
JSR ProcessResourceStateRoutine_F31A ; CPU:$C82C PRG:082C 20 1A F3
RTS ; CPU:$C82F PRG:082F 60
;------------------------------------------------------------
; RunGameTaskRoutine_C830
;
; Global:
; First-pass core-game entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Game state, object pointers, and frame state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
RunGameTaskRoutine_C830:
PHA ; CPU:$C830 PRG:0830 48
INX ; CPU:$C831 PRG:0831 E8
INX ; CPU:$C832 PRG:0832 E8
INX ; CPU:$C833 PRG:0833 E8
INX ; CPU:$C834 PRG:0834 E8
STX $01 ; CPU:$C835 PRG:0835 86 01
LDA #$01 ; CPU:$C837 PRG:0837 A9 01
STA $00 ; CPU:$C839 PRG:0839 85 00
JSR ProcessResourceStateRoutine_F40C ; CPU:$C83B PRG:083B 20 0C F4
PLA ; CPU:$C83E PRG:083E 68
STA $00 ; CPU:$C83F PRG:083F 85 00
LDA #$08 ; CPU:$C841 PRG:0841 A9 08
ORA $0F ; CPU:$C843 PRG:0843 05 0F
STA $01 ; CPU:$C845 PRG:0845 85 01
JSR ProcessResourceStateRoutine_F40C ; CPU:$C847 PRG:0847 20 0C F4
RTS ; CPU:$C84A PRG:084A 60
;------------------------------------------------------------
; RunGameTaskRoutine_C84B
;
; Global:
; First-pass core-game entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Game state, object pointers, and frame state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
RunGameTaskRoutine_C84B:
LDA #$05 ; CPU:$C84B PRG:084B A9 05
STA $01 ; CPU:$C84D PRG:084D 85 01
LDY #$13 ; CPU:$C84F PRG:084F A0 13
CorePathLoop_C851:
TYA ; CPU:$C851 PRG:0851 98
AND #$FC ; CPU:$C852 PRG:0852 29 FC
STA $0720,Y ; CPU:$C854 PRG:0854 99 20 07
DEY ; CPU:$C857 PRG:0857 88
BPL CorePathLoop_C851 ; CPU:$C858 PRG:0858 10 F7
LDA #$20 ; CPU:$C85A PRG:085A A9 20
STA $04 ; CPU:$C85C PRG:085C 85 04
LDA #$07 ; CPU:$C85E PRG:085E A9 07
STA $05 ; CPU:$C860 PRG:0860 85 05
CorePathLoop_C862:
LDA $10 ; CPU:$C862 PRG:0862 A5 10
AND #$03 ; CPU:$C864 PRG:0864 29 03
LDY #$03 ; CPU:$C866 PRG:0866 A0 03
ORA ($04),Y ; CPU:$C868 PRG:0868 11 04
CorePathLoop_C86A:
STA ($04),Y ; CPU:$C86A PRG:086A 91 04
DEY ; CPU:$C86C PRG:086C 88
BPL CorePathLoop_C86A ; CPU:$C86D PRG:086D 10 FB
LDX #$02 ; CPU:$C86F PRG:086F A2 02
STX $03 ; CPU:$C871 PRG:0871 86 03
CorePathLoop_C873:
LDY $14 ; CPU:$C873 PRG:0873 A4 14
CorePathLoop_C875:
JSR EnginePath_F58D ; CPU:$C875 PRG:0875 20 8D F5
DEY ; CPU:$C878 PRG:0878 88
BNE CorePathLoop_C875 ; CPU:$C879 PRG:0879 D0 FA
LDA $11 ; CPU:$C87B PRG:087B A5 11
AND #$03 ; CPU:$C87D PRG:087D 29 03
STA $02 ; CPU:$C87F PRG:087F 85 02
LDY #$03 ; CPU:$C881 PRG:0881 A0 03
LDA ($04),Y ; CPU:$C883 PRG:0883 B1 04
AND #$FC ; CPU:$C885 PRG:0885 29 FC
ORA $02 ; CPU:$C887 PRG:0887 05 02
CorePathLoop_C889:
CMP ($04),Y ; CPU:$C889 PRG:0889 D1 04
BEQ CorePathLoop_C873 ; CPU:$C88B PRG:088B F0 E6
DEY ; CPU:$C88D PRG:088D 88
BPL CorePathLoop_C889 ; CPU:$C88E PRG:088E 10 F9
LDY $03 ; CPU:$C890 PRG:0890 A4 03
STA ($04),Y ; CPU:$C892 PRG:0892 91 04
DEC $03 ; CPU:$C894 PRG:0894 C6 03
BPL CorePathLoop_C873 ; CPU:$C896 PRG:0896 10 DB
CLC ; CPU:$C898 PRG:0898 18
LDA #$04 ; CPU:$C899 PRG:0899 A9 04
ADC $04 ; CPU:$C89B PRG:089B 65 04
STA $04 ; CPU:$C89D PRG:089D 85 04
LDA #$00 ; CPU:$C89F PRG:089F A9 00
ADC $05 ; CPU:$C8A1 PRG:08A1 65 05
STA $05 ; CPU:$C8A3 PRG:08A3 85 05
DEC $01 ; CPU:$C8A5 PRG:08A5 C6 01
BNE CorePathLoop_C862 ; CPU:$C8A7 PRG:08A7 D0 B9
RTS ; CPU:$C8A9 PRG:08A9 60
;------------------------------------------------------------
; RunGameTaskRoutine_C8AA
;
; Global:
; First-pass core-game entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Game state, object pointers, and frame state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
RunGameTaskRoutine_C8AA:
LDA $85 ; CPU:$C8AA PRG:08AA A5 85
ASL A ; CPU:$C8AC PRG:08AC 0A
TAX ; CPU:$C8AD PRG:08AD AA
LDA $C008,X ; CPU:$C8AE PRG:08AE BD 08 C0
STA $04 ; CPU:$C8B1 PRG:08B1 85 04
LDA $C009,X ; CPU:$C8B3 PRG:08B3 BD 09 C0
STA $05 ; CPU:$C8B6 PRG:08B6 85 05
RTS ; CPU:$C8B8 PRG:08B8 60
;------------------------------------------------------------
; RunGameTaskRoutine_C8B9
;
; Global:
; First-pass core-game entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Game state, object pointers, and frame state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
RunGameTaskRoutine_C8B9:
LDY #$10 ; CPU:$C8B9 PRG:08B9 A0 10
LDX $83 ; CPU:$C8BB PRG:08BB A6 83
LDA $C0D1,X ; CPU:$C8BD PRG:08BD BD D1 C0
STA $0F ; CPU:$C8C0 PRG:08C0 85 0F
LDA #$80 ; CPU:$C8C2 PRG:08C2 A9 80
STA $00 ; CPU:$C8C4 PRG:08C4 85 00
LDA #$04 ; CPU:$C8C6 PRG:08C6 A9 04
STA $01 ; CPU:$C8C8 PRG:08C8 85 01
CorePathLoop_C8CA:
LDA #$01 ; CPU:$C8CA PRG:08CA A9 01
STA ($00),Y ; CPU:$C8CC PRG:08CC 91 00
LDX #$00 ; CPU:$C8CE PRG:08CE A2 00
JSR RunGameTaskRoutine_CBD3 ; CPU:$C8D0 PRG:08D0 20 D3 CB
BNE CorePathLoop_C8CA ; CPU:$C8D3 PRG:08D3 D0 F5
RTS ; CPU:$C8D5 PRG:08D5 60
;------------------------------------------------------------
; RunGameTaskRoutine_C8D6
;
; Global:
; First-pass core-game entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Game state, object pointers, and frame state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
RunGameTaskRoutine_C8D6:
JSR RunGameTaskRoutine_C463 ; CPU:$C8D6 PRG:08D6 20 63 C4
LDY #$0F ; CPU:$C8D9 PRG:08D9 A0 0F
LDA $4C ; CPU:$C8DB PRG:08DB A5 4C
BNE CorePathLoop_C8E1 ; CPU:$C8DD PRG:08DD D0 02
LDY #$07 ; CPU:$C8DF PRG:08DF A0 07
CorePathLoop_C8E1:
LDA $C0A1,Y ; CPU:$C8E1 PRG:08E1 B9 A1 C0
STA $02E0,Y ; CPU:$C8E4 PRG:08E4 99 E0 02
DEY ; CPU:$C8E7 PRG:08E7 88
BPL CorePathLoop_C8E1 ; CPU:$C8E8 PRG:08E8 10 F7
RTS ; CPU:$C8EA PRG:08EA 60
.byte $1C, $34, $4C, $64, $94, $AC, $C4, $DC, $20, $38, $50, $68, $80, $98, $B0, $C8 ; CPU:$C8EB PRG:08EB 0B
;------------------------------------------------------------
; RunGameTaskRoutine_C8FB
;
; Global:
; First-pass core-game entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Game state, object pointers, and frame state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
RunGameTaskRoutine_C8FB:
LDA #$07 ; CPU:$C8FB PRG:08FB A9 07
STA $0E ; CPU:$C8FD PRG:08FD 85 0E
LDA #$00 ; CPU:$C8FF PRG:08FF A9 00
STA $04 ; CPU:$C901 PRG:0901 85 04
LDA #$06 ; CPU:$C903 PRG:0903 A9 06
STA $05 ; CPU:$C905 PRG:0905 85 05
CorePathLoop_C907:
LDA $16 ; CPU:$C907 PRG:0907 A5 16
AND #$07 ; CPU:$C909 PRG:0909 29 07
TAX ; CPU:$C90B PRG:090B AA
LDA $C8EB,X ; CPU:$C90C PRG:090C BD EB C8
STA $01 ; CPU:$C90F PRG:090F 85 01
LDA $17 ; CPU:$C911 PRG:0911 A5 17
AND #$07 ; CPU:$C913 PRG:0913 29 07
TAX ; CPU:$C915 PRG:0915 AA
LDA $C8F3,X ; CPU:$C916 PRG:0916 BD F3 C8
STA $00 ; CPU:$C919 PRG:0919 85 00
JSR UpdateObjectBufferRoutine_E0DF ; CPU:$C91B PRG:091B 20 DF E0
LDA #$00 ; CPU:$C91E PRG:091E A9 00
JSR ProcessObjectStateRoutine_E0B2 ; CPU:$C920 PRG:0920 20 B2 E0
JSR ObjectPath_E113 ; CPU:$C923 PRG:0923 20 13 E1
LDA #$00 ; CPU:$C926 PRG:0926 A9 00
JSR ProcessObjectStateRoutine_E0B2 ; CPU:$C928 PRG:0928 20 B2 E0
CMP #$24 ; CPU:$C92B PRG:092B C9 24
BEQ CorePathContinue_C941 ; CPU:$C92D PRG:092D F0 12
CMP #$4E ; CPU:$C92F PRG:092F C9 4E
BCS CorePathLoop_C937 ; CPU:$C931 PRG:0931 B0 04
CMP #$49 ; CPU:$C933 PRG:0933 C9 49
BCS CorePathContinue_C941 ; CPU:$C935 PRG:0935 B0 0A
CorePathLoop_C937:
LDX $10 ; CPU:$C937 PRG:0937 A6 10
CorePathLoop_C939:
JSR EnginePath_F58D ; CPU:$C939 PRG:0939 20 8D F5
DEX ; CPU:$C93C PRG:093C CA
BNE CorePathLoop_C939 ; CPU:$C93D PRG:093D D0 FA
BEQ CorePathLoop_C907 ; CPU:$C93F PRG:093F F0 C6
CorePathContinue_C941:
LDA #$07 ; CPU:$C941 PRG:0941 A9 07
STA $0F ; CPU:$C943 PRG:0943 85 0F
LDA #$00 ; CPU:$C945 PRG:0945 A9 00
STA $06 ; CPU:$C947 PRG:0947 85 06
LDA #$06 ; CPU:$C949 PRG:0949 A9 06
STA $07 ; CPU:$C94B PRG:094B 85 07
CorePathLoop_C94D:
LDY #$01 ; CPU:$C94D PRG:094D A0 01
LDA ($06),Y ; CPU:$C94F PRG:094F B1 06
CMP $00 ; CPU:$C951 PRG:0951 C5 00
BNE CorePathOnNonZero_C95D ; CPU:$C953 PRG:0953 D0 08
LDY #$03 ; CPU:$C955 PRG:0955 A0 03
LDA ($06),Y ; CPU:$C957 PRG:0957 B1 06
CMP $01 ; CPU:$C959 PRG:0959 C5 01
BEQ CorePathLoop_C937 ; CPU:$C95B PRG:095B F0 DA
CorePathOnNonZero_C95D:
LDX #$06 ; CPU:$C95D PRG:095D A2 06
JSR RunGameTaskRoutine_CBD3 ; CPU:$C95F PRG:095F 20 D3 CB
BPL CorePathLoop_C94D ; CPU:$C962 PRG:0962 10 E9
LDY #$01 ; CPU:$C964 PRG:0964 A0 01
LDA #$00 ; CPU:$C966 PRG:0966 A9 00
LDX $8F ; CPU:$C968 PRG:0968 A6 8F
BNE CorePathContinue_C974 ; CPU:$C96A PRG:096A D0 08
LDX $11 ; CPU:$C96C PRG:096C A6 11
CPX #$3C ; CPU:$C96E PRG:096E E0 3C
BCS CorePathContinue_C974 ; CPU:$C970 PRG:0970 B0 02
LDA WorkPtr0Lo ; CPU:$C972 PRG:0972 A5 00
CorePathContinue_C974:
STA ($04),Y ; CPU:$C974 PRG:0974 91 04
LDA ($04),Y ; CPU:$C976 PRG:0976 B1 04
BEQ CorePathContinue_C986 ; CPU:$C978 PRG:0978 F0 0C
LDX $12 ; CPU:$C97A PRG:097A A6 12
CPX #$40 ; CPU:$C97C PRG:097C E0 40
BCS CorePathContinue_C986 ; CPU:$C97E PRG:097E B0 06
LDY #$10 ; CPU:$C980 PRG:0980 A0 10
LDA #$01 ; CPU:$C982 PRG:0982 A9 01
STA ($04),Y ; CPU:$C984 PRG:0984 91 04
CorePathContinue_C986:
LDY #$03 ; CPU:$C986 PRG:0986 A0 03
LDA WorkPtr0Hi ; CPU:$C988 PRG:0988 A5 01
STA ($04),Y ; CPU:$C98A PRG:098A 91 04
LDX #$04 ; CPU:$C98C PRG:098C A2 04
JSR RunGameTaskRoutine_CBD3 ; CPU:$C98E PRG:098E 20 D3 CB
DEC $0E ; CPU:$C991 PRG:0991 C6 0E
BPL CorePathLoop_C937 ; CPU:$C993 PRG:0993 10 A2
RTS ; CPU:$C995 PRG:0995 60
;------------------------------------------------------------
; UpdateGameStateRoutine_C996
;
; Global:
; First-pass core-game entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Game state, object pointers, and frame state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
UpdateGameStateRoutine_C996:
LDA $8B ; CPU:$C996 PRG:0996 A5 8B
BNE UpdateGameStateOnNonZero_C99B ; CPU:$C998 PRG:0998 D0 01
RTS ; CPU:$C99A PRG:099A 60
UpdateGameStateOnNonZero_C99B:
DEC $8B ; CPU:$C99B PRG:099B C6 8B
BEQ CorePathOnZero_C9DA ; CPU:$C99D PRG:099D F0 3B
LDA #$24 ; CPU:$C99F PRG:099F A9 24
STA $00 ; CPU:$C9A1 PRG:09A1 85 00
LDA #$01 ; CPU:$C9A3 PRG:09A3 A9 01
STA $01 ; CPU:$C9A5 PRG:09A5 85 01
JSR ProcessResourceStateRoutine_F257 ; CPU:$C9A7 PRG:09A7 20 57 F2
LDA #$03 ; CPU:$C9AA PRG:09AA A9 03
STA $01 ; CPU:$C9AC PRG:09AC 85 01
JSR ProcessResourceStateRoutine_F257 ; CPU:$C9AE PRG:09AE 20 57 F2
LDY #$1C ; CPU:$C9B1 PRG:09B1 A0 1C
LDA $4C ; CPU:$C9B3 PRG:09B3 A5 4C
BEQ UpdateGameStateOnZero_C9B8 ; CPU:$C9B5 PRG:09B5 F0 01
INY ; CPU:$C9B7 PRG:09B7 C8
UpdateGameStateOnZero_C9B8:
STY $85 ; CPU:$C9B8 PRG:09B8 84 85
JSR RunGameTaskRoutine_CB8C ; CPU:$C9BA PRG:09BA 20 8C CB
LDA #$1B ; CPU:$C9BD PRG:09BD A9 1B
LDX #$14 ; CPU:$C9BF PRG:09BF A2 14
LDY $8A ; CPU:$C9C1 PRG:09C1 A4 8A
BEQ CorePathOnZero_C9D3 ; CPU:$C9C3 PRG:09C3 F0 0E
LDA $87 ; CPU:$C9C5 PRG:09C5 A5 87
CLC ; CPU:$C9C7 PRG:09C7 18
ADC #$15 ; CPU:$C9C8 PRG:09C8 69 15
CMP #$1A ; CPU:$C9CA PRG:09CA C9 1A
BEQ CorePathOnZero_C9D3 ; CPU:$C9CC PRG:09CC F0 05
LDY $89 ; CPU:$C9CE PRG:09CE A4 89
LDX $0720,Y ; CPU:$C9D0 PRG:09D0 BE 20 07
CorePathOnZero_C9D3:
STA $85 ; CPU:$C9D3 PRG:09D3 85 85
STX $86 ; CPU:$C9D5 PRG:09D5 86 86
JMP RunGameTaskDispatch_CB87 ; CPU:$C9D7 PRG:09D7 4C 87 CB
CorePathOnZero_C9DA:
JSR RunGameTaskRoutine_CB8C ; CPU:$C9DA PRG:09DA 20 8C CB
LDA $86 ; CPU:$C9DD PRG:09DD A5 86
ASL A ; CPU:$C9DF PRG:09DF 0A
TAX ; CPU:$C9E0 PRG:09E0 AA
LDA $C008,X ; CPU:$C9E1 PRG:09E1 BD 08 C0
STA $00 ; CPU:$C9E4 PRG:09E4 85 00
LDA $C009,X ; CPU:$C9E6 PRG:09E6 BD 09 C0
STA $01 ; CPU:$C9E9 PRG:09E9 85 01
JSR ObjectPath_DF2F ; CPU:$C9EB PRG:09EB 20 2F DF
LDA $85 ; CPU:$C9EE PRG:09EE A5 85
CMP #$1B ; CPU:$C9F0 PRG:09F0 C9 1B
BEQ CorePathOnZero_CA09 ; CPU:$C9F2 PRG:09F2 F0 15
JSR ProcessObjectStateRoutine_D211 ; CPU:$C9F4 PRG:09F4 20 11 D2
JSR ProcessObjectStateRoutine_D211 ; CPU:$C9F7 PRG:09F7 20 11 D2
JSR ProcessObjectStateRoutine_D211 ; CPU:$C9FA PRG:09FA 20 11 D2
JSR ProcessObjectStateRoutine_D211 ; CPU:$C9FD PRG:09FD 20 11 D2
JSR ResourceAndLevelData ; CPU:$CA00 PRG:0A00 20 0B F2
JSR ObjectPath_DE15 ; CPU:$CA03 PRG:0A03 20 15 DE
JSR UpdateObjectBuffer_DF5E ; CPU:$CA06 PRG:0A06 20 5E DF
CorePathOnZero_CA09:
LDY #$06 ; CPU:$CA09 PRG:0A09 A0 06
LDX #$04 ; CPU:$CA0B PRG:0A0B A2 04
JSR RunGameTaskRoutine_CBA6 ; CPU:$CA0D PRG:0A0D 20 A6 CB
LDY #$02 ; CPU:$CA10 PRG:0A10 A0 02
LDX #$01 ; CPU:$CA12 PRG:0A12 A2 01
LDA #$F4 ; CPU:$CA14 PRG:0A14 A9 F4
JSR RunGameTaskRoutine_CBA8 ; CPU:$CA16 PRG:0A16 20 A8 CB
LDY #$50 ; CPU:$CA19 PRG:0A19 A0 50
LDA #$00 ; CPU:$CA1B PRG:0A1B A9 00
CorePathLoop_CA1D:
STA a:$009F,Y ; CPU:$CA1D PRG:0A1D 99 9F 00
DEY ; CPU:$CA20 PRG:0A20 88
BNE CorePathLoop_CA1D ; CPU:$CA21 PRG:0A21 D0 FA
LDY #$28 ; CPU:$CA23 PRG:0A23 A0 28
UpdateGameStateLoop_CA25:
STA a:$0053,Y ; CPU:$CA25 PRG:0A25 99 53 00
DEY ; CPU:$CA28 PRG:0A28 88
BNE UpdateGameStateLoop_CA25 ; CPU:$CA29 PRG:0A29 D0 FA
LDA $40 ; CPU:$CA2B PRG:0A2B A5 40
ORA #$02 ; CPU:$CA2D PRG:0A2D 09 02
STA $40 ; CPU:$CA2F PRG:0A2F 85 40
LDA #$EF ; CPU:$CA31 PRG:0A31 A9 EF
STA $43 ; CPU:$CA33 PRG:0A33 85 43
LDA $8A ; CPU:$CA35 PRG:0A35 A5 8A
BNE CorePathOnNonZero_CA4D ; CPU:$CA37 PRG:0A37 D0 14
LDA #$90 ; CPU:$CA39 PRG:0A39 A9 90
LDX #$C0 ; CPU:$CA3B PRG:0A3B A2 C0
JSR ProcessResourceStateRoutine_F77D ; CPU:$CA3D PRG:0A3D 20 7D F7
LDA #$0F ; CPU:$CA40 PRG:0A40 A9 0F
JSR ProcessResourceStateRoutine_F31A ; CPU:$CA42 PRG:0A42 20 1A F3
LDA #$81 ; CPU:$CA45 PRG:0A45 A9 81
JSR ProcessResourceStateRoutine_F31A ; CPU:$CA47 PRG:0A47 20 1A F3
JMP RunGameTaskDispatch_CB87 ; CPU:$CA4A PRG:0A4A 4C 87 CB
CorePathOnNonZero_CA4D:
LDY $86 ; CPU:$CA4D PRG:0A4D A4 86
LDA $C044,Y ; CPU:$CA4F PRG:0A4F B9 44 C0
STA $3F ; CPU:$CA52 PRG:0A52 85 3F
LDA #$FA ; CPU:$CA54 PRG:0A54 A9 FA
LDX #$C0 ; CPU:$CA56 PRG:0A56 A2 C0
JSR ProcessResourceStateRoutine_F77D ; CPU:$CA58 PRG:0A58 20 7D F7
LDA #$E5 ; CPU:$CA5B PRG:0A5B A9 E5
LDX #$C0 ; CPU:$CA5D PRG:0A5D A2 C0
JSR ProcessResourceStateRoutine_F77D ; CPU:$CA5F PRG:0A5F 20 7D F7
LDA #$F2 ; CPU:$CA62 PRG:0A62 A9 F2
STA $0437 ; CPU:$CA64 PRG:0A64 8D 37 04
STA $0477 ; CPU:$CA67 PRG:0A67 8D 77 04
LDA #$01 ; CPU:$CA6A PRG:0A6A A9 01
STA $0449 ; CPU:$CA6C PRG:0A6C 8D 49 04
STA $0469 ; CPU:$CA6F PRG:0A6F 8D 69 04
STA $0479 ; CPU:$CA72 PRG:0A72 8D 79 04
LDA #$D8 ; CPU:$CA75 PRG:0A75 A9 D8
STA $043B ; CPU:$CA77 PRG:0A77 8D 3B 04
LDA #$14 ; CPU:$CA7A PRG:0A7A A9 14
STA $044B ; CPU:$CA7C PRG:0A7C 8D 4B 04
LDA #$24 ; CPU:$CA7F PRG:0A7F A9 24
STA $046B ; CPU:$CA81 PRG:0A81 8D 6B 04
LDA #$DC ; CPU:$CA84 PRG:0A84 A9 DC
STA $047B ; CPU:$CA86 PRG:0A86 8D 7B 04
LDA #$0B ; CPU:$CA89 PRG:0A89 A9 0B
LDX #$C1 ; CPU:$CA8B PRG:0A8B A2 C1
JSR ProcessResourceStateRoutine_F77D ; CPU:$CA8D PRG:0A8D 20 7D F7
LDA #$70 ; CPU:$CA90 PRG:0A90 A9 70
STA $052B ; CPU:$CA92 PRG:0A92 8D 2B 05
LDA #$78 ; CPU:$CA95 PRG:0A95 A9 78
STA $054B ; CPU:$CA97 PRG:0A97 8D 4B 05
LDA #$80 ; CPU:$CA9A PRG:0A9A A9 80
STA $056B ; CPU:$CA9C PRG:0A9C 8D 6B 05
LDA #$88 ; CPU:$CA9F PRG:0A9F A9 88
STA $058B ; CPU:$CAA1 PRG:0AA1 8D 8B 05
LDA #$90 ; CPU:$CAA4 PRG:0AA4 A9 90
STA $05AB ; CPU:$CAA6 PRG:0AA6 8D AB 05
LDA #$98 ; CPU:$CAA9 PRG:0AA9 A9 98
STA $05CB ; CPU:$CAAB PRG:0AAB 8D CB 05
LDA #$A0 ; CPU:$CAAE PRG:0AAE A9 A0
STA $05EB ; CPU:$CAB0 PRG:0AB0 8D EB 05
LDA #$21 ; CPU:$CAB3 PRG:0AB3 A9 21
LDX #$C1 ; CPU:$CAB5 PRG:0AB5 A2 C1
JSR ProcessResourceStateRoutine_F77D ; CPU:$CAB7 PRG:0AB7 20 7D F7
LDA #$38 ; CPU:$CABA PRG:0ABA A9 38
STA $04AB ; CPU:$CABC PRG:0ABC 8D AB 04
LDA #$48 ; CPU:$CABF PRG:0ABF A9 48
STA $04CB ; CPU:$CAC1 PRG:0AC1 8D CB 04
LDA #$58 ; CPU:$CAC4 PRG:0AC4 A9 58
STA $04EB ; CPU:$CAC6 PRG:0AC6 8D EB 04
LDA #$42 ; CPU:$CAC9 PRG:0AC9 A9 42
LDX #$C1 ; CPU:$CACB PRG:0ACB A2 C1
JSR ProcessResourceStateRoutine_F77D ; CPU:$CACD PRG:0ACD 20 7D F7
LDX #$05 ; CPU:$CAD0 PRG:0AD0 A2 05
LDY #$07 ; CPU:$CAD2 PRG:0AD2 A0 07
CorePathLoop_CAD4:
TYA ; CPU:$CAD4 PRG:0AD4 98
STA $0600,X ; CPU:$CAD5 PRG:0AD5 9D 00 06
TXA ; CPU:$CAD8 PRG:0AD8 8A
CLC ; CPU:$CAD9 PRG:0AD9 18
ADC #$20 ; CPU:$CADA PRG:0ADA 69 20
TAX ; CPU:$CADC PRG:0ADC AA
DEY ; CPU:$CADD PRG:0ADD 88
BNE CorePathLoop_CAD4 ; CPU:$CADE PRG:0ADE D0 F4
LDA #$01 ; CPU:$CAE0 PRG:0AE0 A9 01
STA $0629 ; CPU:$CAE2 PRG:0AE2 8D 29 06
STA $0649 ; CPU:$CAE5 PRG:0AE5 8D 49 06
STA $06E9 ; CPU:$CAE8 PRG:0AE8 8D E9 06
JSR RunGameTaskRoutine_C8FB ; CPU:$CAEB PRG:0AEB 20 FB C8
LDA #$58 ; CPU:$CAEE PRG:0AEE A9 58
LDX #$C1 ; CPU:$CAF0 PRG:0AF0 A2 C1
JSR ProcessResourceStateRoutine_F77D ; CPU:$CAF2 PRG:0AF2 20 7D F7
LDA #$C8 ; CPU:$CAF5 PRG:0AF5 A9 C8
STA $03DB ; CPU:$CAF7 PRG:0AF7 8D DB 03
LDA #$D0 ; CPU:$CAFA PRG:0AFA A9 D0
STA $03EB ; CPU:$CAFC PRG:0AFC 8D EB 03
LDA #$37 ; CPU:$CAFF PRG:0AFF A9 37
LDX #$C1 ; CPU:$CB01 PRG:0B01 A2 C1
JSR ProcessResourceStateRoutine_F77D ; CPU:$CB03 PRG:0B03 20 7D F7
LDA #$01 ; CPU:$CB06 PRG:0B06 A9 01
STA $8A ; CPU:$CB08 PRG:0B08 85 8A
LDA #$02 ; CPU:$CB0A PRG:0B0A A9 02
LDY $8F ; CPU:$CB0C PRG:0B0C A4 8F
BNE UpdateGameStateOnNonZero_CB15 ; CPU:$CB0E PRG:0B0E D0 05
LDA #$08 ; CPU:$CB10 PRG:0B10 A9 08
SEC ; CPU:$CB12 PRG:0B12 38
SBC $83 ; CPU:$CB13 PRG:0B13 E5 83
UpdateGameStateOnNonZero_CB15:
STA $2E ; CPU:$CB15 PRG:0B15 85 2E
SEC ; CPU:$CB17 PRG:0B17 38
SBC #$03 ; CPU:$CB18 PRG:0B18 E9 03
STA $A8 ; CPU:$CB1A PRG:0B1A 85 A8
LDA #$00 ; CPU:$CB1C PRG:0B1C A9 00
STA $2F ; CPU:$CB1E PRG:0B1E 85 2F
STA $2C ; CPU:$CB20 PRG:0B20 85 2C
LDA #$8A ; CPU:$CB22 PRG:0B22 A9 8A
LDX #$C1 ; CPU:$CB24 PRG:0B24 A2 C1
JSR ProcessResourceStateRoutine_F77D ; CPU:$CB26 PRG:0B26 20 7D F7
LDA #$59 ; CPU:$CB29 PRG:0B29 A9 59
LDX #$C0 ; CPU:$CB2B PRG:0B2B A2 C0
JSR ProcessResourceStateRoutine_F77D ; CPU:$CB2D PRG:0B2D 20 7D F7
LDA #$26 ; CPU:$CB30 PRG:0B30 A9 26
LDY $8F ; CPU:$CB32 PRG:0B32 A4 8F
BEQ UpdatePlayerStateOnZero_CB3F ; CPU:$CB34 PRG:0B34 F0 09
LDA #$7E ; CPU:$CB36 PRG:0B36 A9 7E
LDX #$C0 ; CPU:$CB38 PRG:0B38 A2 C0
JSR ProcessResourceStateRoutine_F77D ; CPU:$CB3A PRG:0B3A 20 7D F7
LDA #$28 ; CPU:$CB3D PRG:0B3D A9 28
UpdatePlayerStateOnZero_CB3F:
JSR ProcessResourceStateRoutine_F31A ; CPU:$CB3F PRG:0B3F 20 1A F3
LDX #$00 ; CPU:$CB42 PRG:0B42 A2 00
JSR ProcessObjectStateRoutine_D42C ; CPU:$CB44 PRG:0B44 20 2C D4
LDX $4C ; CPU:$CB47 PRG:0B47 A6 4C
JSR ProcessObjectStateRoutine_D42C ; CPU:$CB49 PRG:0B49 20 2C D4
LDX #$11 ; CPU:$CB4C PRG:0B4C A2 11
LDA $90 ; CPU:$CB4E PRG:0B4E A5 90
CMP #$01 ; CPU:$CB50 PRG:0B50 C9 01
BEQ UpdatePlayerStateOnZero_CB56 ; CPU:$CB52 PRG:0B52 F0 02
STX $90 ; CPU:$CB54 PRG:0B54 86 90
UpdatePlayerStateOnZero_CB56:
LDA $91 ; CPU:$CB56 PRG:0B56 A5 91
CMP #$01 ; CPU:$CB58 PRG:0B58 C9 01
BEQ UpdateGameStateOnZero_CB5E ; CPU:$CB5A PRG:0B5A F0 02
STX $91 ; CPU:$CB5C PRG:0B5C 86 91
UpdateGameStateOnZero_CB5E:
JSR RunGameTaskRoutine_C8D6 ; CPU:$CB5E PRG:0B5E 20 D6 C8
JSR RunGameTaskRoutine_C8B9 ; CPU:$CB61 PRG:0B61 20 B9 C8
LDA #$08 ; CPU:$CB64 PRG:0B64 A9 08
STA $0495 ; CPU:$CB66 PRG:0B66 8D 95 04
LDA #$18 ; CPU:$CB69 PRG:0B69 A9 18
STA $04B5 ; CPU:$CB6B PRG:0B6B 8D B5 04
LDA #$28 ; CPU:$CB6E PRG:0B6E A9 28
STA $04D5 ; CPU:$CB70 PRG:0B70 8D D5 04
LDA #$38 ; CPU:$CB73 PRG:0B73 A9 38
STA $04F5 ; CPU:$CB75 PRG:0B75 8D F5 04
LDA #$02 ; CPU:$CB78 PRG:0B78 A9 02
STA $FB ; CPU:$CB7A PRG:0B7A 85 FB
JSR UpdateGameStateRoutine_C3BC ; CPU:$CB7C PRG:0B7C 20 BC C3
LDA $8D ; CPU:$CB7F PRG:0B7F A5 8D
BNE CorePathOnNonZero_CB85 ; CPU:$CB81 PRG:0B81 D0 02
LDA #$21 ; CPU:$CB83 PRG:0B83 A9 21
CorePathOnNonZero_CB85:
STA $92 ; CPU:$CB85 PRG:0B85 85 92
RunGameTaskDispatch_CB87:
PLA ; CPU:$CB87 PRG:0B87 68
PLA ; CPU:$CB88 PRG:0B88 68
JMP NMIReadPPUStatus_C234 ; CPU:$CB89 PRG:0B89 4C 34 C2
;------------------------------------------------------------
; RunGameTaskRoutine_CB8C
;
; Global:
; First-pass core-game entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Game state, object pointers, and frame state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
RunGameTaskRoutine_CB8C:
JSR RunGameTaskRoutine_C8AA ; CPU:$CB8C PRG:0B8C 20 AA C8
LDY #$01 ; CPU:$CB8F PRG:0B8F A0 01
LDA ($04),Y ; CPU:$CB91 PRG:0B91 B1 04
CLC ; CPU:$CB93 PRG:0B93 18
ADC $04 ; CPU:$CB94 PRG:0B94 65 04
STA $00 ; CPU:$CB96 PRG:0B96 85 00
LDA #$00 ; CPU:$CB98 PRG:0B98 A9 00
ADC $05 ; CPU:$CB9A PRG:0B9A 65 05
STA $01 ; CPU:$CB9C PRG:0B9C 85 01
JSR ProcessResourceStateDispatch_F2EA ; CPU:$CB9E PRG:0B9E 20 EA F2
INY ; CPU:$CBA1 PRG:0BA1 C8
JSR ObjectPath_DF2F ; CPU:$CBA2 PRG:0BA2 20 2F DF
RTS ; CPU:$CBA5 PRG:0BA5 60
;------------------------------------------------------------
; RunGameTaskRoutine_CBA6
;
; Global:
; First-pass core-game entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Game state, object pointers, and frame state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
RunGameTaskRoutine_CBA6:
LDA #$00 ; CPU:$CBA6 PRG:0BA6 A9 00
;------------------------------------------------------------
; RunGameTaskRoutine_CBA8
;
; Global:
; First-pass core-game entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Game state, object pointers, and frame state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
RunGameTaskRoutine_CBA8:
STY $01 ; CPU:$CBA8 PRG:0BA8 84 01
LDY #$00 ; CPU:$CBAA PRG:0BAA A0 00
STY $00 ; CPU:$CBAC PRG:0BAC 84 00
CorePathLoop_CBAE:
STA ($00),Y ; CPU:$CBAE PRG:0BAE 91 00
DEY ; CPU:$CBB0 PRG:0BB0 88
BNE CorePathLoop_CBAE ; CPU:$CBB1 PRG:0BB1 D0 FB
DEC $01 ; CPU:$CBB3 PRG:0BB3 C6 01
DEX ; CPU:$CBB5 PRG:0BB5 CA
BNE CorePathLoop_CBAE ; CPU:$CBB6 PRG:0BB6 D0 F6
RTS ; CPU:$CBB8 PRG:0BB8 60
;------------------------------------------------------------
; RunGameTaskRoutine_CBB9
;
; Global:
; First-pass core-game entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Game state, object pointers, and frame state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
RunGameTaskRoutine_CBB9:
LDA #$00 ; CPU:$CBB9 PRG:0BB9 A9 00
STA $08 ; CPU:$CBBB PRG:0BBB 85 08
LDA #$04 ; CPU:$CBBD PRG:0BBD A9 04
STA $09 ; CPU:$CBBF PRG:0BBF 85 09
LDA #$00 ; CPU:$CBC1 PRG:0BC1 A9 00
STA $0A ; CPU:$CBC3 PRG:0BC3 85 0A
RTS ; CPU:$CBC5 PRG:0BC5 60
;------------------------------------------------------------
; RunGameTaskRoutine_CBC6
;
; Global:
; First-pass core-game entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Game state, object pointers, and frame state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
RunGameTaskRoutine_CBC6:
LDA #$40 ; CPU:$CBC6 PRG:0BC6 A9 40
STA $08 ; CPU:$CBC8 PRG:0BC8 85 08
LDA #$04 ; CPU:$CBCA PRG:0BCA A9 04
STA $09 ; CPU:$CBCC PRG:0BCC 85 09
LDA #$01 ; CPU:$CBCE PRG:0BCE A9 01
STA $0A ; CPU:$CBD0 PRG:0BD0 85 0A
RTS ; CPU:$CBD2 PRG:0BD2 60
;------------------------------------------------------------
; RunGameTaskRoutine_CBD3
;
; Global:
; First-pass core-game entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Game state, object pointers, and frame state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
RunGameTaskRoutine_CBD3:
CLC ; CPU:$CBD3 PRG:0BD3 18
LDA #$20 ; CPU:$CBD4 PRG:0BD4 A9 20
ADC $00,X ; CPU:$CBD6 PRG:0BD6 75 00
STA $00,X ; CPU:$CBD8 PRG:0BD8 95 00
LDA #$00 ; CPU:$CBDA PRG:0BDA A9 00
ADC $01,X ; CPU:$CBDC PRG:0BDC 75 01
STA $01,X ; CPU:$CBDE PRG:0BDE 95 01
DEC $0F ; CPU:$CBE0 PRG:0BE0 C6 0F
RTS ; CPU:$CBE2 PRG:0BE2 60
;------------------------------------------------------------
; ProcessCurrentObjectRoutine_CBE3
;
; Global:
; First-pass core-game entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Game state, object pointers, and frame state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessCurrentObjectRoutine_CBE3:
LDY #$10 ; CPU:$CBE3 PRG:0BE3 A0 10
LDA (CurrentObjectPtrLo),Y ; CPU:$CBE5 PRG:0BE5 B1 08
STA $06 ; CPU:$CBE7 PRG:0BE7 85 06
LDA $06 ; CPU:$CBE9 PRG:0BE9 A5 06
BPL CorePathOnPositive_CBFA ; CPU:$CBEB PRG:0BEB 10 0D
LDX $0A ; CPU:$CBED PRG:0BED A6 0A
LDA #$00 ; CPU:$CBEF PRG:0BEF A9 00
STA $90,X ; CPU:$CBF1 PRG:0BF1 95 90
JSR UpdateObjectBufferRoutine_E468 ; CPU:$CBF3 PRG:0BF3 20 68 E4
JSR ReadObjectRecordRoutine_E539 ; CPU:$CBF6 PRG:0BF6 20 39 E5
RTS ; CPU:$CBF9 PRG:0BF9 60
CorePathOnPositive_CBFA:
CMP #$30 ; CPU:$CBFA PRG:0BFA C9 30
BCS CorePathOnCarry_CC23 ; CPU:$CBFC PRG:0BFC B0 25
JSR ReadObjectRecordRoutine_E06A ; CPU:$CBFE PRG:0BFE 20 6A E0
LDA $0A ; CPU:$CC01 PRG:0C01 A5 0A
JSR ReadObjectRecordRoutine_E5AA ; CPU:$CC03 PRG:0C03 20 AA E5
BCS CorePathContinue_CC10 ; CPU:$CC06 PRG:0C06 B0 08
JSR ProcessObjectStateRoutine_E17F ; CPU:$CC08 PRG:0C08 20 7F E1
BCC CorePathContinue_CC10 ; CPU:$CC0B PRG:0C0B 90 03
JSR ProcessObjectStateRoutine_E1BF ; CPU:$CC0D PRG:0C0D 20 BF E1
CorePathContinue_CC10:
JSR PrepareObjectMovementContext ; CPU:$CC10 PRG:0C10 20 A8 CC
JSR ReadObjectRecordRoutine_E351 ; CPU:$CC13 PRG:0C13 20 51 E3
BCC CorePathOnNoCarry_CC22 ; CPU:$CC16 PRG:0C16 90 0A
JSR UpdateObjectRecordRoutine_E3A7 ; CPU:$CC18 PRG:0C18 20 A7 E3
LDA #$04 ; CPU:$CC1B PRG:0C1B A9 04
STA $FC ; CPU:$CC1D PRG:0C1D 85 FC
RunGameTaskDispatch_CC1F:
JSR PrepareObjectMovementContext ; CPU:$CC1F PRG:0C1F 20 A8 CC
CorePathOnNoCarry_CC22:
RTS ; CPU:$CC22 PRG:0C22 60
CorePathOnCarry_CC23:
JSR ProcessObjectStateRoutine_E28F ; CPU:$CC23 PRG:0C23 20 8F E2
JSR ReadObjectRecordRoutine_E06A ; CPU:$CC26 PRG:0C26 20 6A E0
JMP RunGameTaskDispatch_CC1F ; CPU:$CC29 PRG:0C29 4C 1F CC
.byte $00, $00, $02, $02, $00, $00, $00, $00, $02, $02, $02, $02, $00, $80, $40, $00 ; CPU:$CC2C PRG:0C2C 0B
.byte $00, $40, $80, $C0 ; CPU:$CC3C PRG:0C3C 0B
;------------------------------------------------------------
; Movement tables and object-engine setup
; CPU $CC40-$CCB7
; PRG $0C40-$0CB7
;------------------------------------------------------------
MovementTables:
.byte $00, $80, $40, $C0, $80, $00, $00, $40, $00, $80, $40, $00, $00, $40, $80, $C0 ; CPU:$CC40 PRG:0C40 0B
.byte $00, $80, $40, $C0, $C0, $40, $80, $C0, $00, $00, $00, $00, $04, $04, $04, $04 ; CPU:$CC50 PRG:0C50 0B
.byte $10, $F8, $10, $F8, $00, $08, $F8, $F8, $00, $00, $00, $00, $0F, $F9, $0F, $F9 ; CPU:$CC60 PRG:0C60 0B
.byte $04, $04, $04, $04, $F8, $F8, $00, $08, $00, $00, $00, $00, $00, $00, $00, $00 ; CPU:$CC70 PRG:0C70 0B
.byte $01, $01, $01, $01, $F8, $10, $04, $04, $F8, $F8, $10, $10, $04, $04, $04, $04 ; CPU:$CC80 PRG:0C80 0B
.byte $00, $08, $10, $10, $04, $04, $F8, $10, $04, $04, $04, $04, $10, $10, $F8, $F8 ; CPU:$CC90 PRG:0C90 0B
.byte $10, $10, $00, $08, $04, $05, $08, $09 ; CPU:$CCA0 PRG:0CA0 0B
;------------------------------------------------------------
; PrepareObjectMovementContext
;
; Global:
; Prepares an index and object-state selector before falling
; through into ObjectEngineCodeAndTables at CPU $CCB8.
;
; Parameters:
; $06 supplies a two-bit selector.
;
; Returns:
; X = $03 normally, or $0C when the selector is at least two.
; Y = $10.
; $00 = $06 & $03.
;------------------------------------------------------------
PrepareObjectMovementContext:
LDX #$03 ; CPU:$CCA8 PRG:0CA8 A2 03
LDA $06 ; CPU:$CCAA PRG:0CAA A5 06
AND #$03 ; CPU:$CCAC PRG:0CAC 29 03
STA $00 ; CPU:$CCAE PRG:0CAE 85 00
CMP #$02 ; CPU:$CCB0 PRG:0CB0 C9 02
BCC @SetObjectFieldOffset ; CPU:$CCB2 PRG:0CB2 90 02
LDX #$0C ; CPU:$CCB4 PRG:0CB4 A2 0C
@SetObjectFieldOffset:
LDY #$10 ; CPU:$CCB6 PRG:0CB6 A0 10
; Falls through to ObjectEngineCodeAndTables at CPU $CCB8.
;------------------------------------------------------------
; Object engine code with embedded lookup tables
; CPU $CCB8-$E77F
; PRG $0CB8-$277F
;
; Pass 1 recursively traced from verified entry roots in this region.
; Direct branches, jumps, and subroutine calls are decoded.
; Bytes not reached by that trace remain explicit .byte data.
;------------------------------------------------------------
;------------------------------------------------------------
; ObjectEngineCodeAndTables
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ObjectEngineCodeAndTables:
LDA (CurrentObjectPtrLo),Y ; CPU:$CCB8 PRG:0CB8 B1 08
BMI ObjectPathContinue_CCCC ; CPU:$CCBA PRG:0CBA 30 10
LDY #$1B ; CPU:$CCBC PRG:0CBC A0 1B
LDA (CurrentObjectPtrLo),Y ; CPU:$CCBE PRG:0CBE B1 08
CMP #$50 ; CPU:$CCC0 PRG:0CC0 C9 50
BCS ObjectPathContinue_CCE9 ; CPU:$CCC2 PRG:0CC2 B0 25
CMP #$40 ; CPU:$CCC4 PRG:0CC4 C9 40
BCS ObjectPathContinue_CCCC ; CPU:$CCC6 PRG:0CC6 B0 04
CMP #$30 ; CPU:$CCC8 PRG:0CC8 C9 30
BCS ObjectPathOnCarry_CCEF ; CPU:$CCCA PRG:0CCA B0 23
ObjectPathContinue_CCCC:
TXA ; CPU:$CCCC PRG:0CCC 8A
LDY $0A ; CPU:$CCCD PRG:0CCD A4 0A
AND a:$0046,Y ; CPU:$CCCF PRG:0CCF 39 46 00
BEQ ObjectPathContinue_CCE9 ; CPU:$CCD2 PRG:0CD2 F0 15
JSR ProcessObjectStateRoutine_CD54 ; CPU:$CCD4 PRG:0CD4 20 54 CD
STX $07 ; CPU:$CCD7 PRG:0CD7 86 07
ObjectPathLoop_CCD9:
JSR UpdateObjectRecordRoutine_CCF7 ; CPU:$CCD9 PRG:0CD9 20 F7 CC
LDA #$00 ; CPU:$CCDC PRG:0CDC A9 00
UpdateObjectRecordLoop_CCDE:
LDY #$20 ; CPU:$CCDE PRG:0CDE A0 20
STA (CurrentObjectPtrLo),Y ; CPU:$CCE0 PRG:0CE0 91 08
JSR UpdateObjectRecordRoutine_CD1E ; CPU:$CCE2 PRG:0CE2 20 1E CD
JSR UpdateObjectRecordRoutine_CD45 ; CPU:$CCE5 PRG:0CE5 20 45 CD
RTS ; CPU:$CCE8 PRG:0CE8 60
ObjectPathContinue_CCE9:
LDX $00 ; CPU:$CCE9 PRG:0CE9 A6 00
LDA #$01 ; CPU:$CCEB PRG:0CEB A9 01
BNE UpdateObjectRecordLoop_CCDE ; CPU:$CCED PRG:0CED D0 EF
ObjectPathOnCarry_CCEF:
AND #$03 ; CPU:$CCEF PRG:0CEF 29 03
CLC ; CPU:$CCF1 PRG:0CF1 18
ADC #$0C ; CPU:$CCF2 PRG:0CF2 69 0C
TAX ; CPU:$CCF4 PRG:0CF4 AA
BNE ObjectPathLoop_CCD9 ; CPU:$CCF5 PRG:0CF5 D0 E2
;------------------------------------------------------------
; UpdateObjectRecordRoutine_CCF7
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
UpdateObjectRecordRoutine_CCF7:
CLC ; CPU:$CCF7 PRG:0CF7 18
LDY #$01 ; CPU:$CCF8 PRG:0CF8 A0 01
LDA $CC58,X ; CPU:$CCFA PRG:0CFA BD 58 CC
ADC (CurrentObjectPtrLo),Y ; CPU:$CCFD PRG:0CFD 71 08
LDY #$21 ; CPU:$CCFF PRG:0CFF A0 21
STA (CurrentObjectPtrLo),Y ; CPU:$CD01 PRG:0D01 91 08
CLC ; CPU:$CD03 PRG:0D03 18
LDY #$03 ; CPU:$CD04 PRG:0D04 A0 03
LDA $CC68,X ; CPU:$CD06 PRG:0D06 BD 68 CC
ADC (CurrentObjectPtrLo),Y ; CPU:$CD09 PRG:0D09 71 08
LDY #$23 ; CPU:$CD0B PRG:0D0B A0 23
STA (CurrentObjectPtrLo),Y ; CPU:$CD0D PRG:0D0D 91 08
LDY #$25 ; CPU:$CD0F PRG:0D0F A0 25
LDA $CC78,X ; CPU:$CD11 PRG:0D11 BD 78 CC
STA (CurrentObjectPtrLo),Y ; CPU:$CD14 PRG:0D14 91 08
LDY #$28 ; CPU:$CD16 PRG:0D16 A0 28
LDA $CC38,X ; CPU:$CD18 PRG:0D18 BD 38 CC
STA (CurrentObjectPtrLo),Y ; CPU:$CD1B PRG:0D1B 91 08
RTS ; CPU:$CD1D PRG:0D1D 60
;------------------------------------------------------------
; UpdateObjectRecordRoutine_CD1E
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
UpdateObjectRecordRoutine_CD1E:
CLC ; CPU:$CD1E PRG:0D1E 18
LDY #$01 ; CPU:$CD1F PRG:0D1F A0 01
LDA $CC84,X ; CPU:$CD21 PRG:0D21 BD 84 CC
ADC (CurrentObjectPtrLo),Y ; CPU:$CD24 PRG:0D24 71 08
LDY #$31 ; CPU:$CD26 PRG:0D26 A0 31
STA (CurrentObjectPtrLo),Y ; CPU:$CD28 PRG:0D28 91 08
CLC ; CPU:$CD2A PRG:0D2A 18
LDY #$03 ; CPU:$CD2B PRG:0D2B A0 03
LDA $CC94,X ; CPU:$CD2D PRG:0D2D BD 94 CC
ADC (CurrentObjectPtrLo),Y ; CPU:$CD30 PRG:0D30 71 08
LDY #$33 ; CPU:$CD32 PRG:0D32 A0 33
STA (CurrentObjectPtrLo),Y ; CPU:$CD34 PRG:0D34 91 08
LDY #$35 ; CPU:$CD36 PRG:0D36 A0 35
LDA $CC2C,X ; CPU:$CD38 PRG:0D38 BD 2C CC
STA (CurrentObjectPtrLo),Y ; CPU:$CD3B PRG:0D3B 91 08
LDY #$38 ; CPU:$CD3D PRG:0D3D A0 38
LDA $CC48,X ; CPU:$CD3F PRG:0D3F BD 48 CC
STA (CurrentObjectPtrLo),Y ; CPU:$CD42 PRG:0D42 91 08
RTS ; CPU:$CD44 PRG:0D44 60
;------------------------------------------------------------
; UpdateObjectRecordRoutine_CD45
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
UpdateObjectRecordRoutine_CD45:
LDY #$05 ; CPU:$CD45 PRG:0D45 A0 05
LDA $CC2C,X ; CPU:$CD47 PRG:0D47 BD 2C CC
STA (CurrentObjectPtrLo),Y ; CPU:$CD4A PRG:0D4A 91 08
LDY #$08 ; CPU:$CD4C PRG:0D4C A0 08
LDA $CC38,X ; CPU:$CD4E PRG:0D4E BD 38 CC
STA (CurrentObjectPtrLo),Y ; CPU:$CD51 PRG:0D51 91 08
RTS ; CPU:$CD53 PRG:0D53 60
;------------------------------------------------------------
; ProcessObjectStateRoutine_CD54
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessObjectStateRoutine_CD54:
LDX #$00 ; CPU:$CD54 PRG:0D54 A2 00
CMP #$04 ; CPU:$CD56 PRG:0D56 C9 04
BCC ObjectPathOnNoCarry_CD5C ; CPU:$CD58 PRG:0D58 90 02
LDX #$03 ; CPU:$CD5A PRG:0D5A A2 03
ObjectPathOnNoCarry_CD5C:
CPX $00 ; CPU:$CD5C PRG:0D5C E4 00
BEQ ObjectPathOnZero_CD62 ; CPU:$CD5E PRG:0D5E F0 02
ORA #$10 ; CPU:$CD60 PRG:0D60 09 10
ObjectPathOnZero_CD62:
LDY #$FF ; CPU:$CD62 PRG:0D62 A0 FF
ObjectPathLoop_CD64:
LSR A ; CPU:$CD64 PRG:0D64 4A
INY ; CPU:$CD65 PRG:0D65 C8
BCC ObjectPathLoop_CD64 ; CPU:$CD66 PRG:0D66 90 FC
LDX $CCA4,Y ; CPU:$CD68 PRG:0D68 BE A4 CC
TAY ; CPU:$CD6B PRG:0D6B A8
BEQ ObjectPathOnZero_CD70 ; CPU:$CD6C PRG:0D6C F0 02
INX ; CPU:$CD6E PRG:0D6E E8
INX ; CPU:$CD6F PRG:0D6F E8
ObjectPathOnZero_CD70:
RTS ; CPU:$CD70 PRG:0D70 60
.byte $21, $24, $24, $12, $24, $24, $71, $74, $CD, $CD ; CPU:$CD71 PRG:0D71 0B
;------------------------------------------------------------
; ReadObjectRecord_CD7B
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ReadObjectRecord_CD7B:
LDX $0A ; CPU:$CD7B PRG:0D7B A6 0A
LDA $5A,X ; CPU:$CD7D PRG:0D7D B5 5A
BNE ObjectPathContinue_CDCD ; CPU:$CD7F PRG:0D7F D0 4C
CLC ; CPU:$CD81 PRG:0D81 18
LDY #$01 ; CPU:$CD82 PRG:0D82 A0 01
LDA #$06 ; CPU:$CD84 PRG:0D84 A9 06
ADC (CurrentObjectPtrLo),Y ; CPU:$CD86 PRG:0D86 71 08
STA $00 ; CPU:$CD88 PRG:0D88 85 00
CLC ; CPU:$CD8A PRG:0D8A 18
LDY #$03 ; CPU:$CD8B PRG:0D8B A0 03
LDA #$06 ; CPU:$CD8D PRG:0D8D A9 06
ADC (CurrentObjectPtrLo),Y ; CPU:$CD8F PRG:0D8F 71 08
STA $01 ; CPU:$CD91 PRG:0D91 85 01
JSR UpdateObjectBufferRoutine_E0DF ; CPU:$CD93 PRG:0D93 20 DF E0
LDA $0A ; CPU:$CD96 PRG:0D96 A5 0A
CLC ; CPU:$CD98 PRG:0D98 18
ADC #$04 ; CPU:$CD99 PRG:0D99 69 04
JSR ProcessObjectStateRoutine_E0B2 ; CPU:$CD9B PRG:0D9B 20 B2 E0
BCS ObjectPathContinue_CDCD ; CPU:$CD9E PRG:0D9E B0 2D
LDY #$00 ; CPU:$CDA0 PRG:0DA0 A0 00
LDX #$80 ; CPU:$CDA2 PRG:0DA2 A2 80
CMP #$FB ; CPU:$CDA4 PRG:0DA4 C9 FB
BEQ ObjectPathContinue_CDCE ; CPU:$CDA6 PRG:0DA6 F0 26
INY ; CPU:$CDA8 PRG:0DA8 C8
CMP #$FA ; CPU:$CDA9 PRG:0DA9 C9 FA
BEQ ObjectPathContinue_CDCE ; CPU:$CDAB PRG:0DAB F0 21
DEY ; CPU:$CDAD PRG:0DAD 88
LDX #$00 ; CPU:$CDAE PRG:0DAE A2 00
CMP #$D2 ; CPU:$CDB0 PRG:0DB0 C9 D2
BCS ObjectPathOnCarry_CDBE ; CPU:$CDB2 PRG:0DB2 B0 0A
CMP #$D0 ; CPU:$CDB4 PRG:0DB4 C9 D0
BCS ObjectPathContinue_CDCE ; CPU:$CDB6 PRG:0DB6 B0 16
INY ; CPU:$CDB8 PRG:0DB8 C8
CMP #$CE ; CPU:$CDB9 PRG:0DB9 C9 CE
BCS ObjectPathContinue_CDCE ; CPU:$CDBB PRG:0DBB B0 11
DEY ; CPU:$CDBD PRG:0DBD 88
ObjectPathOnCarry_CDBE:
LDX #$04 ; CPU:$CDBE PRG:0DBE A2 04
CMP #$F9 ; CPU:$CDC0 PRG:0DC0 C9 F9
BCS ObjectPathContinue_CDCD ; CPU:$CDC2 PRG:0DC2 B0 09
CMP #$F7 ; CPU:$CDC4 PRG:0DC4 C9 F7
BCS ObjectPathContinue_CDCE ; CPU:$CDC6 PRG:0DC6 B0 06
INY ; CPU:$CDC8 PRG:0DC8 C8
CMP #$F5 ; CPU:$CDC9 PRG:0DC9 C9 F5
BCS ObjectPathContinue_CDCE ; CPU:$CDCB PRG:0DCB B0 01
ObjectPathContinue_CDCD:
RTS ; CPU:$CDCD PRG:0DCD 60
ObjectPathContinue_CDCE:
STY $0D ; CPU:$CDCE PRG:0DCE 84 0D
STX $0E ; CPU:$CDD0 PRG:0DD0 86 0E
LDX $0A ; CPU:$CDD2 PRG:0DD2 A6 0A
LDA #$08 ; CPU:$CDD4 PRG:0DD4 A9 08
STA $5A,X ; CPU:$CDD6 PRG:0DD6 95 5A
LDX #$01 ; CPU:$CDD8 PRG:0DD8 A2 01
LDA $8F ; CPU:$CDDA PRG:0DDA A5 8F
BNE UpdateObjectBufferContinue_CDE4 ; CPU:$CDDC PRG:0DDC D0 06
LDA $0E ; CPU:$CDDE PRG:0DDE A5 0E
BPL UpdateObjectBufferContinue_CDE4 ; CPU:$CDE0 PRG:0DE0 10 02
LDX #$28 ; CPU:$CDE2 PRG:0DE2 A2 28
UpdateObjectBufferContinue_CDE4:
STX $07 ; CPU:$CDE4 PRG:0DE4 86 07
JSR ProcessObjectStateRoutine_CE50 ; CPU:$CDE6 PRG:0DE6 20 50 CE
BCS ObjectPathContinue_CE33 ; CPU:$CDE9 PRG:0DE9 B0 48
LDA WorkPtr1Lo ; CPU:$CDEB PRG:0DEB A5 02
STA $01 ; CPU:$CDED PRG:0DED 85 01
LDA $03 ; CPU:$CDEF PRG:0DEF A5 03
STA $00 ; CPU:$CDF1 PRG:0DF1 85 00
LDY $0D ; CPU:$CDF3 PRG:0DF3 A4 0D
LDA $CD77,Y ; CPU:$CDF5 PRG:0DF5 B9 77 CD
STA $02 ; CPU:$CDF8 PRG:0DF8 85 02
LDA $CD79,Y ; CPU:$CDFA PRG:0DFA B9 79 CD
STA $03 ; CPU:$CDFD PRG:0DFD 85 03
JSR UpdateCommandBufferRoutine_F3A1 ; CPU:$CDFF PRG:0DFF 20 A1 F3
LDA #$80 ; CPU:$CE02 PRG:0E02 A9 80
STA $FF ; CPU:$CE04 PRG:0E04 85 FF
LDX $0A ; CPU:$CE06 PRG:0E06 A6 0A
LDA #$01 ; CPU:$CE08 PRG:0E08 A9 01
STA $00 ; CPU:$CE0A PRG:0E0A 85 00
LDA $0E ; CPU:$CE0C PRG:0E0C A5 0E
CMP #$04 ; CPU:$CE0E PRG:0E0E C9 04
BEQ ObjectPathOnZero_CE34 ; CPU:$CE10 PRG:0E10 F0 22
INC $D4,X ; CPU:$CE12 PRG:0E12 F6 D4
LDA #$06 ; CPU:$CE14 PRG:0E14 A9 06
STA $01 ; CPU:$CE16 PRG:0E16 85 01
JSR ProcessResourceStateRoutine_F408 ; CPU:$CE18 PRG:0E18 20 08 F4
LDA $3F ; CPU:$CE1B PRG:0E1B A5 3F
BNE ProcessObjectStateDispatch_CE2A ; CPU:$CE1D PRG:0E1D D0 0B
LDA $8D ; CPU:$CE1F PRG:0E1F A5 8D
BEQ ObjectPathOnZero_CE26 ; CPU:$CE21 PRG:0E21 F0 03
JMP RunGameTaskRoutine_C3E4 ; CPU:$CE23 PRG:0E23 4C E4 C3
ObjectPathOnZero_CE26:
LDA #$23 ; CPU:$CE26 PRG:0E26 A9 23
STA $78 ; CPU:$CE28 PRG:0E28 85 78
ProcessObjectStateDispatch_CE2A:
LDA $8F ; CPU:$CE2A PRG:0E2A A5 8F
BNE ObjectPathContinue_CE33 ; CPU:$CE2C PRG:0E2C D0 05
LDA #$68 ; CPU:$CE2E PRG:0E2E A9 68
JSR ProcessResourceStateRoutine_F31A ; CPU:$CE30 PRG:0E30 20 1A F3
ObjectPathContinue_CE33:
RTS ; CPU:$CE33 PRG:0E33 60
ObjectPathOnZero_CE34:
LDA $8E ; CPU:$CE34 PRG:0E34 A5 8E
BEQ ObjectPathOnZero_CE41 ; CPU:$CE36 PRG:0E36 F0 09
DEC $D4,X ; CPU:$CE38 PRG:0E38 D6 D4
LDA #$06 ; CPU:$CE3A PRG:0E3A A9 06
STA $01 ; CPU:$CE3C PRG:0E3C 85 01
JSR ProcessResourceStateRoutine_F40C ; CPU:$CE3E PRG:0E3E 20 0C F4
ObjectPathOnZero_CE41:
JMP ProcessObjectStateDispatch_CE2A ; CPU:$CE41 PRG:0E41 4C 2A CE
.byte $21, $00, $00, $10, $08, $12, $00, $00, $08, $10, $40, $80 ; CPU:$CE44 PRG:0E44 0B
;------------------------------------------------------------
; ProcessObjectStateRoutine_CE50
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessObjectStateRoutine_CE50:
LDA #$00 ; CPU:$CE50 PRG:0E50 A9 00
STA $04 ; CPU:$CE52 PRG:0E52 85 04
STA $0B ; CPU:$CE54 PRG:0E54 85 0B
LDA #$05 ; CPU:$CE56 PRG:0E56 A9 05
STA $05 ; CPU:$CE58 PRG:0E58 85 05
STA $0C ; CPU:$CE5A PRG:0E5A 85 0C
LDA #$07 ; CPU:$CE5C PRG:0E5C A9 07
STA $0F ; CPU:$CE5E PRG:0E5E 85 0F
ObjectPathLoop_CE60:
LDY #$10 ; CPU:$CE60 PRG:0E60 A0 10
LDA ($04),Y ; CPU:$CE62 PRG:0E62 B1 04
BEQ ObjectPathOnZero_CE6F ; CPU:$CE64 PRG:0E64 F0 09
LDX #$04 ; CPU:$CE66 PRG:0E66 A2 04
JSR RunGameTaskRoutine_CBD3 ; CPU:$CE68 PRG:0E68 20 D3 CB
BPL ObjectPathLoop_CE60 ; CPU:$CE6B PRG:0E6B 10 F3
ObjectPathLoop_CE6D:
SEC ; CPU:$CE6D PRG:0E6D 38
RTS ; CPU:$CE6E PRG:0E6E 60
ObjectPathOnZero_CE6F:
LDA WorkPtr1Lo ; CPU:$CE6F PRG:0E6F A5 02
BEQ ObjectPathOnZero_CE9D ; CPU:$CE71 PRG:0E71 F0 2A
JSR UpdateObjectBufferRoutine_E0F9 ; CPU:$CE73 PRG:0E73 20 F9 E0
LDA #$07 ; CPU:$CE76 PRG:0E76 A9 07
STA $0F ; CPU:$CE78 PRG:0E78 85 0F
ObjectPathLoop_CE7A:
LDY #$10 ; CPU:$CE7A PRG:0E7A A0 10
LDA ($0B),Y ; CPU:$CE7C PRG:0E7C B1 0B
BEQ ObjectPathContinue_CE96 ; CPU:$CE7E PRG:0E7E F0 16
LDY #$12 ; CPU:$CE80 PRG:0E80 A0 12
LDA ($0B),Y ; CPU:$CE82 PRG:0E82 B1 0B
BEQ ObjectPathContinue_CE96 ; CPU:$CE84 PRG:0E84 F0 10
LDY #$01 ; CPU:$CE86 PRG:0E86 A0 01
LDA ($0B),Y ; CPU:$CE88 PRG:0E88 B1 0B
CMP $00 ; CPU:$CE8A PRG:0E8A C5 00
BNE ObjectPathContinue_CE96 ; CPU:$CE8C PRG:0E8C D0 08
LDY #$03 ; CPU:$CE8E PRG:0E8E A0 03
LDA ($0B),Y ; CPU:$CE90 PRG:0E90 B1 0B
CMP $01 ; CPU:$CE92 PRG:0E92 C5 01
BEQ ObjectPathLoop_CE6D ; CPU:$CE94 PRG:0E94 F0 D7
ObjectPathContinue_CE96:
LDX #$0B ; CPU:$CE96 PRG:0E96 A2 0B
JSR RunGameTaskRoutine_CBD3 ; CPU:$CE98 PRG:0E98 20 D3 CB
BPL ObjectPathLoop_CE7A ; CPU:$CE9B PRG:0E9B 10 DD
ObjectPathOnZero_CE9D:
LDY #$00 ; CPU:$CE9D PRG:0E9D A0 00
LDA #$00 ; CPU:$CE9F PRG:0E9F A9 00
STA ($04),Y ; CPU:$CEA1 PRG:0EA1 91 04
INY ; CPU:$CEA3 PRG:0EA3 C8
LDA WorkPtr0Lo ; CPU:$CEA4 PRG:0EA4 A5 00
STA ($04),Y ; CPU:$CEA6 PRG:0EA6 91 04
INY ; CPU:$CEA8 PRG:0EA8 C8
LDA #$00 ; CPU:$CEA9 PRG:0EA9 A9 00
STA ($04),Y ; CPU:$CEAB PRG:0EAB 91 04
INY ; CPU:$CEAD PRG:0EAD C8
LDA WorkPtr0Hi ; CPU:$CEAE PRG:0EAE A5 01
STA ($04),Y ; CPU:$CEB0 PRG:0EB0 91 04
INY ; CPU:$CEB2 PRG:0EB2 C8
LDA #$00 ; CPU:$CEB3 PRG:0EB3 A9 00
STA ($04),Y ; CPU:$CEB5 PRG:0EB5 91 04
LDY #$14 ; CPU:$CEB7 PRG:0EB7 A0 14
LDA $0E ; CPU:$CEB9 PRG:0EB9 A5 0E
STA ($04),Y ; CPU:$CEBB PRG:0EBB 91 04
AND #$0F ; CPU:$CEBD PRG:0EBD 29 0F
LDX #$00 ; CPU:$CEBF PRG:0EBF A2 00
LDY $0D ; CPU:$CEC1 PRG:0EC1 A4 0D
BEQ ObjectPathOnZero_CECA ; CPU:$CEC3 PRG:0EC3 F0 05
CLC ; CPU:$CEC5 PRG:0EC5 18
ADC #$0A ; CPU:$CEC6 PRG:0EC6 69 0A
LDX #$05 ; CPU:$CEC8 PRG:0EC8 A2 05
ObjectPathOnZero_CECA:
LDY #$05 ; CPU:$CECA PRG:0ECA A0 05
STA ($04),Y ; CPU:$CECC PRG:0ECC 91 04
LDY #$0A ; CPU:$CECE PRG:0ECE A0 0A
LDA $CE44,X ; CPU:$CED0 PRG:0ED0 BD 44 CE
STA ($04),Y ; CPU:$CED3 PRG:0ED3 91 04
LDY #$0C ; CPU:$CED5 PRG:0ED5 A0 0C
ObjectPathLoop_CED7:
INX ; CPU:$CED7 PRG:0ED7 E8
LDA $CE44,X ; CPU:$CED8 PRG:0ED8 BD 44 CE
STA ($04),Y ; CPU:$CEDB PRG:0EDB 91 04
INY ; CPU:$CEDD PRG:0EDD C8
CPY #$10 ; CPU:$CEDE PRG:0EDE C0 10
BNE ObjectPathLoop_CED7 ; CPU:$CEE0 PRG:0EE0 D0 F5
LDY #$10 ; CPU:$CEE2 PRG:0EE2 A0 10
LDA $08 ; CPU:$CEE4 PRG:0EE4 A5 08
STA $00 ; CPU:$CEE6 PRG:0EE6 85 00
LDA $09 ; CPU:$CEE8 PRG:0EE8 A5 09
STA $01 ; CPU:$CEEA PRG:0EEA 85 01
JSR ProcessObjectStateRoutine_D94D ; CPU:$CEEC PRG:0EEC 20 4D D9
ORA #$10 ; CPU:$CEEF PRG:0EEF 09 10
STA ($04),Y ; CPU:$CEF1 PRG:0EF1 91 04
AND #$01 ; CPU:$CEF3 PRG:0EF3 29 01
BEQ ObjectPathContinue_CF02 ; CPU:$CEF5 PRG:0EF5 F0 0B
LDA #$00 ; CPU:$CEF7 PRG:0EF7 A9 00
LDY $02 ; CPU:$CEF9 PRG:0EF9 A4 02
BNE ObjectPathContinue_CF02 ; CPU:$CEFB PRG:0EFB D0 05
LDY $0D ; CPU:$CEFD PRG:0EFD A4 0D
LDA $CE4E,Y ; CPU:$CEFF PRG:0EFF B9 4E CE
ObjectPathContinue_CF02:
LDY #$08 ; CPU:$CF02 PRG:0F02 A0 08
STA ($04),Y ; CPU:$CF04 PRG:0F04 91 04
LDY #$11 ; CPU:$CF06 PRG:0F06 A0 11
LDA $07 ; CPU:$CF08 PRG:0F08 A5 07
STA ($04),Y ; CPU:$CF0A PRG:0F0A 91 04
LDA WorkPtr1Lo ; CPU:$CF0C PRG:0F0C A5 02
BEQ ObjectPathContinue_CF1E ; CPU:$CF0E PRG:0F0E F0 0E
LDA #$0D ; CPU:$CF10 PRG:0F10 A9 0D
LDX $8E ; CPU:$CF12 PRG:0F12 A6 8E
BNE ObjectPathContinue_CF1E ; CPU:$CF14 PRG:0F14 D0 08
LDX $0E ; CPU:$CF16 PRG:0F16 A6 0E
CPX #$04 ; CPU:$CF18 PRG:0F18 E0 04
BNE ObjectPathContinue_CF1E ; CPU:$CF1A PRG:0F1A D0 02
LDA #$09 ; CPU:$CF1C PRG:0F1C A9 09
ObjectPathContinue_CF1E:
INY ; CPU:$CF1E PRG:0F1E C8
STA ($04),Y ; CPU:$CF1F PRG:0F1F 91 04
INY ; CPU:$CF21 PRG:0F21 C8
LDA #$02 ; CPU:$CF22 PRG:0F22 A9 02
STA ($04),Y ; CPU:$CF24 PRG:0F24 91 04
CLC ; CPU:$CF26 PRG:0F26 18
RTS ; CPU:$CF27 PRG:0F27 60
.byte $21, $D0, $D1, $12, $CE, $CF, $21, $F7, $F8, $12, $F5, $F6, $02, $FD, $02, $FD ; CPU:$CF28 PRG:0F28 0B
.byte $60, $A0, $60, $A0 ; CPU:$CF38 PRG:0F38 0B
ReadObjectRecordDispatch_CF3C:
LDY #$01 ; CPU:$CF3C PRG:0F3C A0 01
LDA (CurrentObjectPtrLo),Y ; CPU:$CF3E PRG:0F3E B1 08
STA WorkPtr0Lo ; CPU:$CF40 PRG:0F40 85 00
LDY #$03 ; CPU:$CF42 PRG:0F42 A0 03
LDA (CurrentObjectPtrLo),Y ; CPU:$CF44 PRG:0F44 B1 08
STA WorkPtr0Hi ; CPU:$CF46 PRG:0F46 85 01
JSR UpdateObjectBufferRoutine_E0DF ; CPU:$CF48 PRG:0F48 20 DF E0
LDY #$05 ; CPU:$CF4B PRG:0F4B A0 05
LDA (CurrentObjectPtrLo),Y ; CPU:$CF4D PRG:0F4D B1 08
LDX #$28 ; CPU:$CF4F PRG:0F4F A2 28
LDY #$CF ; CPU:$CF51 PRG:0F51 A0 CF
CMP #$00 ; CPU:$CF53 PRG:0F53 C9 00
BEQ UpdateObjectRecordOnZero_CF6B ; CPU:$CF55 PRG:0F55 F0 14
LDX #$2B ; CPU:$CF57 PRG:0F57 A2 2B
LDY #$CF ; CPU:$CF59 PRG:0F59 A0 CF
CMP #$0A ; CPU:$CF5B PRG:0F5B C9 0A
BEQ UpdateObjectRecordOnZero_CF6B ; CPU:$CF5D PRG:0F5D F0 0C
LDX #$2E ; CPU:$CF5F PRG:0F5F A2 2E
LDY #$CF ; CPU:$CF61 PRG:0F61 A0 CF
CMP #$04 ; CPU:$CF63 PRG:0F63 C9 04
BEQ UpdateObjectRecordOnZero_CF6B ; CPU:$CF65 PRG:0F65 F0 04
LDX #$31 ; CPU:$CF67 PRG:0F67 A2 31
LDY #$CF ; CPU:$CF69 PRG:0F69 A0 CF
UpdateObjectRecordOnZero_CF6B:
LDA WorkPtr1Lo ; CPU:$CF6B PRG:0F6B A5 02
STA WorkPtr0Hi ; CPU:$CF6D PRG:0F6D 85 01
LDA WorkPtr1Hi ; CPU:$CF6F PRG:0F6F A5 03
STA WorkPtr0Lo ; CPU:$CF71 PRG:0F71 85 00
STX WorkPtr1Lo ; CPU:$CF73 PRG:0F73 86 02
STY WorkPtr1Hi ; CPU:$CF75 PRG:0F75 84 03
JSR UpdateCommandBufferRoutine_F3A1 ; CPU:$CF77 PRG:0F77 20 A1 F3
LDY #$05 ; CPU:$CF7A PRG:0F7A A0 05
LDA (CurrentObjectPtrLo),Y ; CPU:$CF7C PRG:0F7C B1 08
CMP #$05 ; CPU:$CF7E PRG:0F7E C9 05
LDA #$14 ; CPU:$CF80 PRG:0F80 A9 14
STA (CurrentObjectPtrLo),Y ; CPU:$CF82 PRG:0F82 91 08
BCS UpdateObjectRecordOnCarry_CF96 ; CPU:$CF84 PRG:0F84 B0 10
LDY #$01 ; CPU:$CF86 PRG:0F86 A0 01
LDA (CurrentObjectPtrLo),Y ; CPU:$CF88 PRG:0F88 B1 08
ADC #$04 ; CPU:$CF8A PRG:0F8A 69 04
STA (CurrentObjectPtrLo),Y ; CPU:$CF8C PRG:0F8C 91 08
LDY #$03 ; CPU:$CF8E PRG:0F8E A0 03
LDA (CurrentObjectPtrLo),Y ; CPU:$CF90 PRG:0F90 B1 08
SBC #$03 ; CPU:$CF92 PRG:0F92 E9 03
STA (CurrentObjectPtrLo),Y ; CPU:$CF94 PRG:0F94 91 08
UpdateObjectRecordOnCarry_CF96:
LDY #$0A ; CPU:$CF96 PRG:0F96 A0 0A
LDA #$12 ; CPU:$CF98 PRG:0F98 A9 12
STA (CurrentObjectPtrLo),Y ; CPU:$CF9A PRG:0F9A 91 08
BNE UpdateObjectRecordLoop_CFAD ; CPU:$CF9C PRG:0F9C D0 0F
ObjectPathLoop_CF9E:
JMP ReadObjectRecordDispatch_CF3C ; CPU:$CF9E PRG:0F9E 4C 3C CF
;------------------------------------------------------------
; ObjectPath_CFA1
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ObjectPath_CFA1:
LDA #$00 ; CPU:$CFA1 PRG:0FA1 A9 00
STA CurrentObjectPtrLo ; CPU:$CFA3 PRG:0FA3 85 08
LDA #$05 ; CPU:$CFA5 PRG:0FA5 A9 05
STA CurrentObjectPtrHi ; CPU:$CFA7 PRG:0FA7 85 09
LDA #$07 ; CPU:$CFA9 PRG:0FA9 A9 07
STA LoopCounter ; CPU:$CFAB PRG:0FAB 85 0F
UpdateObjectRecordLoop_CFAD:
LDY #$10 ; CPU:$CFAD PRG:0FAD A0 10
LDA (CurrentObjectPtrLo),Y ; CPU:$CFAF PRG:0FAF B1 08
BEQ ProcessObjectStateDispatch_CFFA ; CPU:$CFB1 PRG:0FB1 F0 47
STA WorkPtr0Lo ; CPU:$CFB3 PRG:0FB3 85 00
LDY #$12 ; CPU:$CFB5 PRG:0FB5 A0 12
LDA (CurrentObjectPtrLo),Y ; CPU:$CFB7 PRG:0FB7 B1 08
BEQ UpdateObjectRecordOnZero_D004 ; CPU:$CFB9 PRG:0FB9 F0 49
INY ; CPU:$CFBB PRG:0FBB C8
LDA (CurrentObjectPtrLo),Y ; CPU:$CFBC PRG:0FBC B1 08
SEC ; CPU:$CFBE PRG:0FBE 38
SBC #$01 ; CPU:$CFBF PRG:0FBF E9 01
STA (CurrentObjectPtrLo),Y ; CPU:$CFC1 PRG:0FC1 91 08
BNE ProcessObjectStateDispatch_CFFA ; CPU:$CFC3 PRG:0FC3 D0 35
LDA #$03 ; CPU:$CFC5 PRG:0FC5 A9 03
STA (CurrentObjectPtrLo),Y ; CPU:$CFC7 PRG:0FC7 91 08
DEY ; CPU:$CFC9 PRG:0FC9 88
LDA (CurrentObjectPtrLo),Y ; CPU:$CFCA PRG:0FCA B1 08
SEC ; CPU:$CFCC PRG:0FCC 38
SBC #$01 ; CPU:$CFCD PRG:0FCD E9 01
STA (CurrentObjectPtrLo),Y ; CPU:$CFCF PRG:0FCF 91 08
BEQ ObjectPathLoop_CF9E ; CPU:$CFD1 PRG:0FD1 F0 CB
LDA WorkPtr0Lo ; CPU:$CFD3 PRG:0FD3 A5 00
AND #$01 ; CPU:$CFD5 PRG:0FD5 29 01
BNE ReadObjectRecordOnNonZero_CFDB ; CPU:$CFD7 PRG:0FD7 D0 02
LDA #$FF ; CPU:$CFD9 PRG:0FD9 A9 FF
ReadObjectRecordOnNonZero_CFDB:
LDX #$07 ; CPU:$CFDB PRG:0FDB A2 07
LDY #$05 ; CPU:$CFDD PRG:0FDD A0 05
CLC ; CPU:$CFDF PRG:0FDF 18
ADC (CurrentObjectPtrLo),Y ; CPU:$CFE0 PRG:0FE0 71 08
BMI UpdateObjectRecordContinue_CFF7 ; CPU:$CFE2 PRG:0FE2 30 13
LDX #$00 ; CPU:$CFE4 PRG:0FE4 A2 00
CMP #$08 ; CPU:$CFE6 PRG:0FE6 C9 08
BEQ UpdateObjectRecordContinue_CFF7 ; CPU:$CFE8 PRG:0FE8 F0 0D
LDX #$11 ; CPU:$CFEA PRG:0FEA A2 11
CMP #$09 ; CPU:$CFEC PRG:0FEC C9 09
BEQ UpdateObjectRecordContinue_CFF7 ; CPU:$CFEE PRG:0FEE F0 07
LDX #$0A ; CPU:$CFF0 PRG:0FF0 A2 0A
CMP #$12 ; CPU:$CFF2 PRG:0FF2 C9 12
BEQ UpdateObjectRecordContinue_CFF7 ; CPU:$CFF4 PRG:0FF4 F0 01
TAX ; CPU:$CFF6 PRG:0FF6 AA
UpdateObjectRecordContinue_CFF7:
TXA ; CPU:$CFF7 PRG:0FF7 8A
STA (CurrentObjectPtrLo),Y ; CPU:$CFF8 PRG:0FF8 91 08
ProcessObjectStateDispatch_CFFA:
LDX #$08 ; CPU:$CFFA PRG:0FFA A2 08
JSR RunGameTaskRoutine_CBD3 ; CPU:$CFFC PRG:0FFC 20 D3 CB
BPL UpdateObjectRecordLoop_CFAD ; CPU:$CFFF PRG:0FFF 10 AC
DEC $A5 ; CPU:$D001 PRG:1001 C6 A5
RTS ; CPU:$D003 PRG:1003 60
UpdateObjectRecordOnZero_D004:
DEY ; CPU:$D004 PRG:1004 88
LDA (CurrentObjectPtrLo),Y ; CPU:$D005 PRG:1005 B1 08
SEC ; CPU:$D007 PRG:1007 38
SBC #$01 ; CPU:$D008 PRG:1008 E9 01
STA (CurrentObjectPtrLo),Y ; CPU:$D00A PRG:100A 91 08
BEQ UpdateObjectRecordOnZero_D052 ; CPU:$D00C PRG:100C F0 44
CMP #$23 ; CPU:$D00E PRG:100E C9 23
BCS UpdateObjectRecordOnCarry_D01A ; CPU:$D010 PRG:1010 B0 08
LDY #$05 ; CPU:$D012 PRG:1012 A0 05
LDA (CurrentObjectPtrLo),Y ; CPU:$D014 PRG:1014 B1 08
CMP #$14 ; CPU:$D016 PRG:1016 C9 14
BCS ProcessObjectStateDispatch_D04F ; CPU:$D018 PRG:1018 B0 35
UpdateObjectRecordOnCarry_D01A:
LDA WorkPtr0Lo ; CPU:$D01A PRG:101A A5 00
AND #$03 ; CPU:$D01C PRG:101C 29 03
TAX ; CPU:$D01E PRG:101E AA
LDY $E17B,X ; CPU:$D01F PRG:101F BC 7B E1
INY ; CPU:$D022 PRG:1022 C8
CLC ; CPU:$D023 PRG:1023 18
LDA $CF38,X ; CPU:$D024 PRG:1024 BD 38 CF
ADC (CurrentObjectPtrLo),Y ; CPU:$D027 PRG:1027 71 08
STA (CurrentObjectPtrLo),Y ; CPU:$D029 PRG:1029 91 08
DEY ; CPU:$D02B PRG:102B 88
LDA $CF34,X ; CPU:$D02C PRG:102C BD 34 CF
ADC (CurrentObjectPtrLo),Y ; CPU:$D02F PRG:102F 71 08
STA (CurrentObjectPtrLo),Y ; CPU:$D031 PRG:1031 91 08
LDY #$05 ; CPU:$D033 PRG:1033 A0 05
LDA (CurrentObjectPtrLo),Y ; CPU:$D035 PRG:1035 B1 08
CMP #$14 ; CPU:$D037 PRG:1037 C9 14
BCS ProcessObjectStateDispatch_D04F ; CPU:$D039 PRG:1039 B0 14
LDX #$08 ; CPU:$D03B PRG:103B A2 08
LDA WorkPtr0Lo ; CPU:$D03D PRG:103D A5 00
AND #$02 ; CPU:$D03F PRG:103F 29 02
BNE ObjectPathOnNonZero_D045 ; CPU:$D041 PRG:1041 D0 02
LDX #$12 ; CPU:$D043 PRG:1043 A2 12
ObjectPathOnNonZero_D045:
LDA $A5 ; CPU:$D045 PRG:1045 A5 A5
AND #$01 ; CPU:$D047 PRG:1047 29 01
BEQ UpdateObjectRecordOnZero_D04C ; CPU:$D049 PRG:1049 F0 01
INX ; CPU:$D04B PRG:104B E8
UpdateObjectRecordOnZero_D04C:
TXA ; CPU:$D04C PRG:104C 8A
STA (CurrentObjectPtrLo),Y ; CPU:$D04D PRG:104D 91 08
ProcessObjectStateDispatch_D04F:
JMP ProcessObjectStateDispatch_CFFA ; CPU:$D04F PRG:104F 4C FA CF
UpdateObjectRecordOnZero_D052:
DEY ; CPU:$D052 PRG:1052 88
STA (CurrentObjectPtrLo),Y ; CPU:$D053 PRG:1053 91 08
LDY #$00 ; CPU:$D055 PRG:1055 A0 00
LDA #$01 ; CPU:$D057 PRG:1057 A9 01
STA (CurrentObjectPtrLo),Y ; CPU:$D059 PRG:1059 91 08
LDY #$05 ; CPU:$D05B PRG:105B A0 05
LDA (CurrentObjectPtrLo),Y ; CPU:$D05D PRG:105D B1 08
CMP #$14 ; CPU:$D05F PRG:105F C9 14
BCS ProcessObjectStateDispatch_D04F ; CPU:$D061 PRG:1061 B0 EC
LDY #$15 ; CPU:$D063 PRG:1063 A0 15
LDA (CurrentObjectPtrLo),Y ; CPU:$D065 PRG:1065 B1 08
TAX ; CPU:$D067 PRG:1067 AA
DEC $DA,X ; CPU:$D068 PRG:1068 D6 DA
JMP ProcessObjectStateDispatch_D04F ; CPU:$D06A PRG:106A 4C 4F D0
;------------------------------------------------------------
; ObjectPath_D06D
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ObjectPath_D06D:
LDA #$20 ; CPU:$D06D PRG:106D A9 20
STA $00 ; CPU:$D06F PRG:106F 85 00
LDA #$04 ; CPU:$D071 PRG:1071 A9 04
STA $01 ; CPU:$D073 PRG:1073 85 01
JSR ProcessResourceStateRoutine_F601 ; CPU:$D075 PRG:1075 20 01 F6
LDA #$30 ; CPU:$D078 PRG:1078 A9 30
STA $00 ; CPU:$D07A PRG:107A 85 00
LDA #$04 ; CPU:$D07C PRG:107C A9 04
STA $01 ; CPU:$D07E PRG:107E 85 01
JSR ProcessResourceStateRoutine_F601 ; CPU:$D080 PRG:1080 20 01 F6
;------------------------------------------------------------
; ProcessObjectStateRoutine_D083
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessObjectStateRoutine_D083:
LDA #$00 ; CPU:$D083 PRG:1083 A9 00
STA $00 ; CPU:$D085 PRG:1085 85 00
LDA #$04 ; CPU:$D087 PRG:1087 A9 04
STA $01 ; CPU:$D089 PRG:1089 85 01
JSR ProcessResourceStateRoutine_F601 ; CPU:$D08B PRG:108B 20 01 F6
RTS ; CPU:$D08E PRG:108E 60
;------------------------------------------------------------
; ObjectPath_D08F
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ObjectPath_D08F:
LDA #$60 ; CPU:$D08F PRG:108F A9 60
STA $00 ; CPU:$D091 PRG:1091 85 00
LDA #$04 ; CPU:$D093 PRG:1093 A9 04
STA $01 ; CPU:$D095 PRG:1095 85 01
JSR ProcessResourceStateRoutine_F601 ; CPU:$D097 PRG:1097 20 01 F6
LDA #$70 ; CPU:$D09A PRG:109A A9 70
STA $00 ; CPU:$D09C PRG:109C 85 00
LDA #$04 ; CPU:$D09E PRG:109E A9 04
STA $01 ; CPU:$D0A0 PRG:10A0 85 01
JSR ProcessResourceStateRoutine_F601 ; CPU:$D0A2 PRG:10A2 20 01 F6
;------------------------------------------------------------
; ProcessObjectStateRoutine_D0A5
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessObjectStateRoutine_D0A5:
LDA #$40 ; CPU:$D0A5 PRG:10A5 A9 40
STA $00 ; CPU:$D0A7 PRG:10A7 85 00
LDA #$04 ; CPU:$D0A9 PRG:10A9 A9 04
STA $01 ; CPU:$D0AB PRG:10AB 85 01
JSR ProcessResourceStateRoutine_F601 ; CPU:$D0AD PRG:10AD 20 01 F6
RTS ; CPU:$D0B0 PRG:10B0 60
;------------------------------------------------------------
; ObjectPath_D0B1
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ObjectPath_D0B1:
LDA #$00 ; CPU:$D0B1 PRG:10B1 A9 00
STA $00 ; CPU:$D0B3 PRG:10B3 85 00
LDA #$05 ; CPU:$D0B5 PRG:10B5 A9 05
STA $01 ; CPU:$D0B7 PRG:10B7 85 01
LDA #$07 ; CPU:$D0B9 PRG:10B9 A9 07
STA $0F ; CPU:$D0BB PRG:10BB 85 0F
ObjectPathLoop_D0BD:
JSR ProcessResourceStateRoutine_F601 ; CPU:$D0BD PRG:10BD 20 01 F6
LDX #$00 ; CPU:$D0C0 PRG:10C0 A2 00
JSR RunGameTaskRoutine_CBD3 ; CPU:$D0C2 PRG:10C2 20 D3 CB
BPL ObjectPathLoop_D0BD ; CPU:$D0C5 PRG:10C5 10 F6
RTS ; CPU:$D0C7 PRG:10C7 60
;------------------------------------------------------------
; UpdateObjectBuffer_D0C8
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
UpdateObjectBuffer_D0C8:
LDA #$80 ; CPU:$D0C8 PRG:10C8 A9 80
STA $00 ; CPU:$D0CA PRG:10CA 85 00
LDA #$04 ; CPU:$D0CC PRG:10CC A9 04
STA $01 ; CPU:$D0CE PRG:10CE 85 01
LDA #$03 ; CPU:$D0D0 PRG:10D0 A9 03
STA $0F ; CPU:$D0D2 PRG:10D2 85 0F
ObjectPathLoop_D0D4:
JSR ProcessResourceStateRoutine_F601 ; CPU:$D0D4 PRG:10D4 20 01 F6
LDX #$00 ; CPU:$D0D7 PRG:10D7 A2 00
JSR RunGameTaskRoutine_CBD3 ; CPU:$D0D9 PRG:10D9 20 D3 CB
BPL ObjectPathLoop_D0D4 ; CPU:$D0DC PRG:10DC 10 F6
RTS ; CPU:$D0DE PRG:10DE 60
;------------------------------------------------------------
; ObjectPath_D0DF
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ObjectPath_D0DF:
LDA #$00 ; CPU:$D0DF PRG:10DF A9 00
STA $00 ; CPU:$D0E1 PRG:10E1 85 00
LDA #$06 ; CPU:$D0E3 PRG:10E3 A9 06
STA $01 ; CPU:$D0E5 PRG:10E5 85 01
LDA #$07 ; CPU:$D0E7 PRG:10E7 A9 07
STA $0F ; CPU:$D0E9 PRG:10E9 85 0F
ObjectPathLoop_D0EB:
JSR ProcessResourceStateRoutine_F601 ; CPU:$D0EB PRG:10EB 20 01 F6
LDX #$00 ; CPU:$D0EE PRG:10EE A2 00
JSR RunGameTaskRoutine_CBD3 ; CPU:$D0F0 PRG:10F0 20 D3 CB
BPL ObjectPathLoop_D0EB ; CPU:$D0F3 PRG:10F3 10 F6
RTS ; CPU:$D0F5 PRG:10F5 60
;------------------------------------------------------------
; UpdateObjectBuffer_D0F6
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
UpdateObjectBuffer_D0F6:
LDA #$C0 ; CPU:$D0F6 PRG:10F6 A9 C0
STA $00 ; CPU:$D0F8 PRG:10F8 85 00
LDA #$03 ; CPU:$D0FA PRG:10FA A9 03
STA $01 ; CPU:$D0FC PRG:10FC 85 01
LDA #$02 ; CPU:$D0FE PRG:10FE A9 02
STA $0F ; CPU:$D100 PRG:1100 85 0F
ObjectPathLoop_D102:
JSR ProcessResourceStateRoutine_F601 ; CPU:$D102 PRG:1102 20 01 F6
JSR ProcessObjectStateRoutine_DDB2 ; CPU:$D105 PRG:1105 20 B2 DD
DEC $0F ; CPU:$D108 PRG:1108 C6 0F
BPL ObjectPathLoop_D102 ; CPU:$D10A PRG:110A 10 F6
RTS ; CPU:$D10C PRG:110C 60
.byte $02, $03, $07, $0E, $0F, $11, $0A, $0B, $0B, $0C, $11, $0D, $0E, $0F, $0F, $10 ; CPU:$D10D PRG:110D 0B
.byte $0D ; CPU:$D11D PRG:111D 0B
;------------------------------------------------------------
; ReadObjectRecord_D11E
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ReadObjectRecord_D11E:
LDY #$10 ; CPU:$D11E PRG:111E A0 10
LDA (CurrentObjectPtrLo),Y ; CPU:$D120 PRG:1120 B1 08
STA $06 ; CPU:$D122 PRG:1122 85 06
BMI ObjectPathContinue_D132 ; CPU:$D124 PRG:1124 30 0C
LDY #$1B ; CPU:$D126 PRG:1126 A0 1B
LDA (CurrentObjectPtrLo),Y ; CPU:$D128 PRG:1128 B1 08
CMP #$10 ; CPU:$D12A PRG:112A C9 10
BCC ObjectPathContinue_D132 ; CPU:$D12C PRG:112C 90 04
CMP #$40 ; CPU:$D12E PRG:112E C9 40
BCC ObjectPathOnNoCarry_D14F ; CPU:$D130 PRG:1130 90 1D
ObjectPathContinue_D132:
LDA $54 ; CPU:$D132 PRG:1132 A5 54
BNE UpdateObjectRecordOnNonZero_D13A ; CPU:$D134 PRG:1134 D0 04
LDA #$09 ; CPU:$D136 PRG:1136 A9 09
STA $54 ; CPU:$D138 PRG:1138 85 54
UpdateObjectRecordOnNonZero_D13A:
CMP #$05 ; CPU:$D13A PRG:113A C9 05
BCC ObjectPathOnNoCarry_D14E ; CPU:$D13C PRG:113C 90 10
LDY #$35 ; CPU:$D13E PRG:113E A0 35
LDA #$01 ; CPU:$D140 PRG:1140 A9 01
EOR (CurrentObjectPtrLo),Y ; CPU:$D142 PRG:1142 51 08
STA (CurrentObjectPtrLo),Y ; CPU:$D144 PRG:1144 91 08
LDY #$05 ; CPU:$D146 PRG:1146 A0 05
LDA #$01 ; CPU:$D148 PRG:1148 A9 01
EOR (CurrentObjectPtrLo),Y ; CPU:$D14A PRG:114A 51 08
STA (CurrentObjectPtrLo),Y ; CPU:$D14C PRG:114C 91 08
ObjectPathOnNoCarry_D14E:
RTS ; CPU:$D14E PRG:114E 60
ObjectPathOnNoCarry_D14F:
LDX #$00 ; CPU:$D14F PRG:114F A2 00
LDY $0A ; CPU:$D151 PRG:1151 A4 0A
LDA a:$0058,Y ; CPU:$D153 PRG:1153 B9 58 00
LDY #$04 ; CPU:$D156 PRG:1156 A0 04
ObjectPathLoop_D158:
CMP $D10D,Y ; CPU:$D158 PRG:1158 D9 0D D1
BCS ObjectPathOnCarry_D161 ; CPU:$D15B PRG:115B B0 04
INX ; CPU:$D15D PRG:115D E8
DEY ; CPU:$D15E PRG:115E 88
BPL ObjectPathLoop_D158 ; CPU:$D15F PRG:115F 10 F7
ObjectPathOnCarry_D161:
LDA $06 ; CPU:$D161 PRG:1161 A5 06
AND #$03 ; CPU:$D163 PRG:1163 29 03
CMP #$02 ; CPU:$D165 PRG:1165 C9 02
TXA ; CPU:$D167 PRG:1167 8A
BCC UpdateObjectRecordOnNoCarry_D16D ; CPU:$D168 PRG:1168 90 03
CLC ; CPU:$D16A PRG:116A 18
ADC #$06 ; CPU:$D16B PRG:116B 69 06
UpdateObjectRecordOnNoCarry_D16D:
TAX ; CPU:$D16D PRG:116D AA
CLC ; CPU:$D16E PRG:116E 18
ADC #$06 ; CPU:$D16F PRG:116F 69 06
LDY #$05 ; CPU:$D171 PRG:1171 A0 05
STA (CurrentObjectPtrLo),Y ; CPU:$D173 PRG:1173 91 08
LDA $D112,X ; CPU:$D175 PRG:1175 BD 12 D1
LDY #$25 ; CPU:$D178 PRG:1178 A0 25
STA (CurrentObjectPtrLo),Y ; CPU:$D17A PRG:117A 91 08
SEC ; CPU:$D17C PRG:117C 38
SBC #$04 ; CPU:$D17D PRG:117D E9 04
LDY #$35 ; CPU:$D17F PRG:117F A0 35
STA (CurrentObjectPtrLo),Y ; CPU:$D181 PRG:1181 91 08
RTS ; CPU:$D183 PRG:1183 60
.byte $27, $16, $27, $1A, $27, $26, $27, $2A, $27, $17, $17, $17, $25, $05, $05, $25 ; CPU:$D184 PRG:1184 0B
.byte $2A, $0A, $0A, $2A, $21, $01, $01, $21, $23, $03, $03, $23, $27, $07, $07, $27 ; CPU:$D194 PRG:1194 0B
.byte $25, $05, $05, $25, $21, $11, $11, $11, $21, $0F ; CPU:$D1A4 PRG:11A4 0B
;------------------------------------------------------------
; UpdateObjectBufferRoutine_D1AE
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
UpdateObjectBufferRoutine_D1AE:
STX $00 ; CPU:$D1AE PRG:11AE 86 00
LDX #$3F ; CPU:$D1B0 PRG:11B0 A2 3F
STX $01 ; CPU:$D1B2 PRG:11B2 86 01
TYA ; CPU:$D1B4 PRG:11B4 98
ASL A ; CPU:$D1B5 PRG:11B5 0A
TAY ; CPU:$D1B6 PRG:11B6 A8
LDA $D184,Y ; CPU:$D1B7 PRG:11B7 B9 84 D1
STA $EE ; CPU:$D1BA PRG:11BA 85 EE
INY ; CPU:$D1BC PRG:11BC C8
LDA $D184,Y ; CPU:$D1BD PRG:11BD B9 84 D1
STA $EF ; CPU:$D1C0 PRG:11C0 85 EF
LDA #$EB ; CPU:$D1C2 PRG:11C2 A9 EB
STA $02 ; CPU:$D1C4 PRG:11C4 85 02
LDA #$00 ; CPU:$D1C6 PRG:11C6 A9 00
STA $03 ; CPU:$D1C8 PRG:11C8 85 03
JSR UpdateCommandBufferRoutine_F3A1 ; CPU:$D1CA PRG:11CA 20 A1 F3
RTS ; CPU:$D1CD PRG:11CD 60
;------------------------------------------------------------
; ProcessObjectStateRoutine_D1CE
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessObjectStateRoutine_D1CE:
LDA $87 ; CPU:$D1CE PRG:11CE A5 87
ASL A ; CPU:$D1D0 PRG:11D0 0A
CLC ; CPU:$D1D1 PRG:11D1 18
ADC #$06 ; CPU:$D1D2 PRG:11D2 69 06
TAY ; CPU:$D1D4 PRG:11D4 A8
RTS ; CPU:$D1D5 PRG:11D5 60
;------------------------------------------------------------
; ObjectPath_D1D6
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ObjectPath_D1D6:
LDA $62 ; CPU:$D1D6 PRG:11D6 A5 62
BNE ObjectPathOnNonZero_D1F4 ; CPU:$D1D8 PRG:11D8 D0 1A
LDA #$06 ; CPU:$D1DA PRG:11DA A9 06
STA $62 ; CPU:$D1DC PRG:11DC 85 62
LDY #$04 ; CPU:$D1DE PRG:11DE A0 04
LDA $8F ; CPU:$D1E0 PRG:11E0 A5 8F
BEQ ObjectPathOnZero_D1E6 ; CPU:$D1E2 PRG:11E2 F0 02
LDY #$12 ; CPU:$D1E4 PRG:11E4 A0 12
ObjectPathOnZero_D1E6:
LDA #$01 ; CPU:$D1E6 PRG:11E6 A9 01
EOR $A2 ; CPU:$D1E8 PRG:11E8 45 A2
STA $A2 ; CPU:$D1EA PRG:11EA 85 A2
BEQ ObjectPathOnZero_D1EF ; CPU:$D1EC PRG:11EC F0 01
INY ; CPU:$D1EE PRG:11EE C8
ObjectPathOnZero_D1EF:
LDX #$04 ; CPU:$D1EF PRG:11EF A2 04
JSR UpdateObjectBufferRoutine_D1AE ; CPU:$D1F1 PRG:11F1 20 AE D1
ObjectPathOnNonZero_D1F4:
RTS ; CPU:$D1F4 PRG:11F4 60
.byte $22, $5C, $5D, $5E, $5F, $22, $58, $59, $5A, $5B, $22, $54, $55, $56, $57, $22 ; CPU:$D1F5 PRG:11F5 0B
.byte $50, $51, $52, $53 ; CPU:$D205 PRG:1205 0B
;------------------------------------------------------------
; ObjectPath_D209
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ObjectPath_D209:
LDA $57 ; CPU:$D209 PRG:1209 A5 57
BNE ObjectPathContinue_D254 ; CPU:$D20B PRG:120B D0 47
LDA #$02 ; CPU:$D20D PRG:120D A9 02
STA $57 ; CPU:$D20F PRG:120F 85 57
;------------------------------------------------------------
; ProcessObjectStateRoutine_D211
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessObjectStateRoutine_D211:
LDA $A3 ; CPU:$D211 PRG:1211 A5 A3
LDY $A4 ; CPU:$D213 PRG:1213 A4 A4
CPY #$FF ; CPU:$D215 PRG:1215 C0 FF
BNE UpdateObjectBufferOnNonZero_D222 ; CPU:$D217 PRG:1217 D0 09
SEC ; CPU:$D219 PRG:1219 38
SBC #$05 ; CPU:$D21A PRG:121A E9 05
BPL ObjectPathOnPositive_D220 ; CPU:$D21C PRG:121C 10 02
LDA #$0F ; CPU:$D21E PRG:121E A9 0F
ObjectPathOnPositive_D220:
STA $A3 ; CPU:$D220 PRG:1220 85 A3
UpdateObjectBufferOnNonZero_D222:
CLC ; CPU:$D222 PRG:1222 18
ADC #$F5 ; CPU:$D223 PRG:1223 69 F5
STA $02 ; CPU:$D225 PRG:1225 85 02
LDA #$00 ; CPU:$D227 PRG:1227 A9 00
ADC #$D1 ; CPU:$D229 PRG:1229 69 D1
STA $03 ; CPU:$D22B PRG:122B 85 03
JSR RunGameTaskRoutine_C8AA ; CPU:$D22D PRG:122D 20 AA C8
INC $A4 ; CPU:$D230 PRG:1230 E6 A4
INC $A4 ; CPU:$D232 PRG:1232 E6 A4
LDA $A4 ; CPU:$D234 PRG:1234 A5 A4
BMI ObjectPathOnNegative_D23A ; CPU:$D236 PRG:1236 30 02
LDA #$F9 ; CPU:$D238 PRG:1238 A9 F9
ObjectPathOnNegative_D23A:
STA $A4 ; CPU:$D23A PRG:123A 85 A4
LDY #$00 ; CPU:$D23C PRG:123C A0 00
CLC ; CPU:$D23E PRG:123E 18
ADC ($04),Y ; CPU:$D23F PRG:123F 71 04
TAY ; CPU:$D241 PRG:1241 A8
CMP #$01 ; CPU:$D242 PRG:1242 C9 01
BEQ ObjectPathContinue_D254 ; CPU:$D244 PRG:1244 F0 0E
BMI ObjectPathContinue_D254 ; CPU:$D246 PRG:1246 30 0C
LDA ($04),Y ; CPU:$D248 PRG:1248 B1 04
STA $00 ; CPU:$D24A PRG:124A 85 00
DEY ; CPU:$D24C PRG:124C 88
LDA ($04),Y ; CPU:$D24D PRG:124D B1 04
STA $01 ; CPU:$D24F PRG:124F 85 01
JSR UpdateCommandBufferRoutine_F3A1 ; CPU:$D251 PRG:1251 20 A1 F3
ObjectPathContinue_D254:
RTS ; CPU:$D254 PRG:1254 60
.byte $02, $03, $00, $00, $00, $00, $00, $01, $10, $14 ; CPU:$D255 PRG:1255 0B
ObjectPathLoop_D25F:
LDY $0A ; CPU:$D25F PRG:125F A4 0A
LDX $D25D,Y ; CPU:$D261 PRG:1261 BE 5D D2
LDA $63 ; CPU:$D264 PRG:1264 A5 63
BEQ ObjectPathOnZero_D277 ; CPU:$D266 PRG:1266 F0 0F
CMP #$08 ; CPU:$D268 PRG:1268 C9 08
BEQ ObjectPathOnZero_D272 ; CPU:$D26A PRG:126A F0 06
INY ; CPU:$D26C PRG:126C C8
INY ; CPU:$D26D PRG:126D C8
CMP #$01 ; CPU:$D26E PRG:126E C9 01
BNE ObjectPathLoop_D275 ; CPU:$D270 PRG:1270 D0 03
ObjectPathOnZero_D272:
JSR UpdateObjectBufferRoutine_D1AE ; CPU:$D272 PRG:1272 20 AE D1
ObjectPathLoop_D275:
SEC ; CPU:$D275 PRG:1275 38
RTS ; CPU:$D276 PRG:1276 60
ObjectPathOnZero_D277:
LDA #$10 ; CPU:$D277 PRG:1277 A9 10
STA $63 ; CPU:$D279 PRG:1279 85 63
BNE ObjectPathLoop_D275 ; CPU:$D27B PRG:127B D0 F8
;------------------------------------------------------------
; UpdateObjectRecord_D27D
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
UpdateObjectRecord_D27D:
LDA $78 ; CPU:$D27D PRG:127D A5 78
BNE ObjectPathLoop_D275 ; CPU:$D27F PRG:127F D0 F4
LDX $0A ; CPU:$D281 PRG:1281 A6 0A
LDA $D0,X ; CPU:$D283 PRG:1283 B5 D0
BEQ ObjectPathOnZero_D2CE ; CPU:$D285 PRG:1285 F0 47
CMP #$02 ; CPU:$D287 PRG:1287 C9 02
BEQ ObjectPathOnZero_D2D0 ; CPU:$D289 PRG:1289 F0 45
LDA $46,X ; CPU:$D28B PRG:128B B5 46
AND #$0F ; CPU:$D28D PRG:128D 29 0F
BEQ ObjectPathLoop_D25F ; CPU:$D28F PRG:128F F0 CE
DEC $D0,X ; CPU:$D291 PRG:1291 D6 D0
TAX ; CPU:$D293 PRG:1293 AA
LDA $D254,X ; CPU:$D294 PRG:1294 BD 54 D2
LDY #$10 ; CPU:$D297 PRG:1297 A0 10
STA (CurrentObjectPtrLo),Y ; CPU:$D299 PRG:1299 91 08
PHA ; CPU:$D29B PRG:129B 48
TAX ; CPU:$D29C PRG:129C AA
LDY $E16F,X ; CPU:$D29D PRG:129D BC 6F E1
LDX $82 ; CPU:$D2A0 PRG:12A0 A6 82
LDA $C0DD,X ; CPU:$D2A2 PRG:12A2 BD DD C0
STA (CurrentObjectPtrLo),Y ; CPU:$D2A5 PRG:12A5 91 08
DEY ; CPU:$D2A7 PRG:12A7 88
LDA $C0D5,X ; CPU:$D2A8 PRG:12A8 BD D5 C0
STA (CurrentObjectPtrLo),Y ; CPU:$D2AB PRG:12AB 91 08
PLA ; CPU:$D2AD PRG:12AD 68
AND #$01 ; CPU:$D2AE PRG:12AE 29 01
BEQ UpdateObjectRecordOnZero_D2B5 ; CPU:$D2B0 PRG:12B0 F0 03
JSR UpdateObjectRecordRoutine_E325 ; CPU:$D2B2 PRG:12B2 20 25 E3
UpdateObjectRecordOnZero_D2B5:
LDY #$30 ; CPU:$D2B5 PRG:12B5 A0 30
LDA #$00 ; CPU:$D2B7 PRG:12B7 A9 00
STA (CurrentObjectPtrLo),Y ; CPU:$D2B9 PRG:12B9 91 08
LDY $0A ; CPU:$D2BB PRG:12BB A4 0A
LDX $D25D,Y ; CPU:$D2BD PRG:12BD BE 5D D2
LDA a:$0075,Y ; CPU:$D2C0 PRG:12C0 B9 75 00
BEQ ObjectPathOnZero_D2C7 ; CPU:$D2C3 PRG:12C3 F0 02
INY ; CPU:$D2C5 PRG:12C5 C8
INY ; CPU:$D2C6 PRG:12C6 C8
ObjectPathOnZero_D2C7:
JSR UpdateObjectBufferRoutine_D1AE ; CPU:$D2C7 PRG:12C7 20 AE D1
LDA #$04 ; CPU:$D2CA PRG:12CA A9 04
STA $FF ; CPU:$D2CC PRG:12CC 85 FF
ObjectPathOnZero_D2CE:
CLC ; CPU:$D2CE PRG:12CE 18
RTS ; CPU:$D2CF PRG:12CF 60
ObjectPathOnZero_D2D0:
DEC $D0,X ; CPU:$D2D0 PRG:12D0 D6 D0
JSR RunGameTaskRoutine_C8AA ; CPU:$D2D2 PRG:12D2 20 AA C8
LDY #$00 ; CPU:$D2D5 PRG:12D5 A0 00
LDA ($04),Y ; CPU:$D2D7 PRG:12D7 B1 04
TAY ; CPU:$D2D9 PRG:12D9 A8
LDX $0A ; CPU:$D2DA PRG:12DA A6 0A
BEQ UpdateObjectRecordOnZero_D2E0 ; CPU:$D2DC PRG:12DC F0 02
INY ; CPU:$D2DE PRG:12DE C8
INY ; CPU:$D2DF PRG:12DF C8
UpdateObjectRecordOnZero_D2E0:
LDA ($04),Y ; CPU:$D2E0 PRG:12E0 B1 04
STA $00 ; CPU:$D2E2 PRG:12E2 85 00
INY ; CPU:$D2E4 PRG:12E4 C8
LDA ($04),Y ; CPU:$D2E5 PRG:12E5 B1 04
STA $01 ; CPU:$D2E7 PRG:12E7 85 01
LDY #$00 ; CPU:$D2E9 PRG:12E9 A0 00
LDA #$00 ; CPU:$D2EB PRG:12EB A9 00
STA (CurrentObjectPtrLo),Y ; CPU:$D2ED PRG:12ED 91 08
INY ; CPU:$D2EF PRG:12EF C8
LDA WorkPtr0Lo ; CPU:$D2F0 PRG:12F0 A5 00
STA (CurrentObjectPtrLo),Y ; CPU:$D2F2 PRG:12F2 91 08
INY ; CPU:$D2F4 PRG:12F4 C8
LDA #$00 ; CPU:$D2F5 PRG:12F5 A9 00
STA (CurrentObjectPtrLo),Y ; CPU:$D2F7 PRG:12F7 91 08
INY ; CPU:$D2F9 PRG:12F9 C8
LDA WorkPtr0Hi ; CPU:$D2FA PRG:12FA A5 01
STA (CurrentObjectPtrLo),Y ; CPU:$D2FC PRG:12FC 91 08
INY ; CPU:$D2FE PRG:12FE C8
LDA #$00 ; CPU:$D2FF PRG:12FF A9 00
STA (CurrentObjectPtrLo),Y ; CPU:$D301 PRG:1301 91 08
LDA #$16 ; CPU:$D303 PRG:1303 A9 16
CPX #$00 ; CPU:$D305 PRG:1305 E0 00
BEQ UpdateObjectRecordOnZero_D30B ; CPU:$D307 PRG:1307 F0 02
LDA #$17 ; CPU:$D309 PRG:1309 A9 17
UpdateObjectRecordOnZero_D30B:
INY ; CPU:$D30B PRG:130B C8
STA (CurrentObjectPtrLo),Y ; CPU:$D30C PRG:130C 91 08
LDY #$10 ; CPU:$D30E PRG:130E A0 10
LDA #$00 ; CPU:$D310 PRG:1310 A9 00
UpdateObjectRecordLoop_D312:
STA (CurrentObjectPtrLo),Y ; CPU:$D312 PRG:1312 91 08
INY ; CPU:$D314 PRG:1314 C8
CPY #$1E ; CPU:$D315 PRG:1315 C0 1E
BNE UpdateObjectRecordLoop_D312 ; CPU:$D317 PRG:1317 D0 F9
LDY #$08 ; CPU:$D319 PRG:1319 A0 08
STA (CurrentObjectPtrLo),Y ; CPU:$D31B PRG:131B 91 08
SEC ; CPU:$D31D PRG:131D 38
RTS ; CPU:$D31E PRG:131E 60
.byte $10, $D0, $12, $13, $14, $15, $17, $18, $19, $1A, $1B, $17 ; CPU:$D31F PRG:131F 0B
ObjectPathLoop_D32B:
LDA #$00 ; CPU:$D32B PRG:132B A9 00
STA $90,X ; CPU:$D32D PRG:132D 95 90
ObjectPathLoop_D32F:
CLC ; CPU:$D32F PRG:132F 18
RTS ; CPU:$D330 PRG:1330 60
ReadObjectRecordLoop_D331:
LDA $78 ; CPU:$D331 PRG:1331 A5 78
BNE ObjectPathLoop_D32B ; CPU:$D333 PRG:1333 D0 F6
LDY #$10 ; CPU:$D335 PRG:1335 A0 10
LDA (CurrentObjectPtrLo),Y ; CPU:$D337 PRG:1337 B1 08
BMI ObjectPathLoop_D32F ; CPU:$D339 PRG:1339 30 F4
AND #$0F ; CPU:$D33B PRG:133B 29 0F
TAX ; CPU:$D33D PRG:133D AA
JSR UpdateObjectRecordRoutine_E335 ; CPU:$D33E PRG:133E 20 35 E3
BCC ObjectPathLoop_D32F ; CPU:$D341 PRG:1341 90 EC
LDX $0A ; CPU:$D343 PRG:1343 A6 0A
DEC $90,X ; CPU:$D345 PRG:1345 D6 90
LDA #$00 ; CPU:$D347 PRG:1347 A9 00
BEQ UpdateObjectRecordOnZero_D36E ; CPU:$D349 PRG:1349 F0 23
ObjectPathLoop_D34B:
JMP UpdateObjectRecordDispatch_D401 ; CPU:$D34B PRG:134B 4C 01 D4
;------------------------------------------------------------
; ObjectPath_D34E
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ObjectPath_D34E:
LDX $0A ; CPU:$D34E PRG:134E A6 0A
LDA $90,X ; CPU:$D350 PRG:1350 B5 90
BEQ ObjectPathLoop_D32F ; CPU:$D352 PRG:1352 F0 DB
CMP #$01 ; CPU:$D354 PRG:1354 C9 01
BEQ ObjectPathOnZero_D382 ; CPU:$D356 PRG:1356 F0 2A
CMP #$10 ; CPU:$D358 PRG:1358 C9 10
BEQ UpdateObjectBufferOnZero_D384 ; CPU:$D35A PRG:135A F0 28
CMP #$11 ; CPU:$D35C PRG:135C C9 11
BEQ UpdateObjectBufferOnZero_D3AF ; CPU:$D35E PRG:135E F0 4F
CMP #$12 ; CPU:$D360 PRG:1360 C9 12
BEQ ObjectPathLoop_D34B ; CPU:$D362 PRG:1362 F0 E7
CMP #$13 ; CPU:$D364 PRG:1364 C9 13
BEQ ReadObjectRecordLoop_D331 ; CPU:$D366 PRG:1366 F0 C9
LDA #$12 ; CPU:$D368 PRG:1368 A9 12
STA $90,X ; CPU:$D36A PRG:136A 95 90
LDA #$05 ; CPU:$D36C PRG:136C A9 05
UpdateObjectRecordOnZero_D36E:
STA $D2,X ; CPU:$D36E PRG:136E 95 D2
LDA #$08 ; CPU:$D370 PRG:1370 A9 08
STA $5C,X ; CPU:$D372 PRG:1372 95 5C
LDY #$20 ; CPU:$D374 PRG:1374 A0 20
LDA #$01 ; CPU:$D376 PRG:1376 A9 01
STA (CurrentObjectPtrLo),Y ; CPU:$D378 PRG:1378 91 08
LDY #$30 ; CPU:$D37A PRG:137A A0 30
STA (CurrentObjectPtrLo),Y ; CPU:$D37C PRG:137C 91 08
LDA #$02 ; CPU:$D37E PRG:137E A9 02
STA $FF ; CPU:$D380 PRG:1380 85 FF
ObjectPathOnZero_D382:
SEC ; CPU:$D382 PRG:1382 38
RTS ; CPU:$D383 PRG:1383 60
UpdateObjectBufferOnZero_D384:
LDA $72,X ; CPU:$D384 PRG:1384 B5 72
BNE UpdateObjectBufferOnNonZero_D396 ; CPU:$D386 PRG:1386 D0 0E
STA $90,X ; CPU:$D388 PRG:1388 95 90
INC $90,X ; CPU:$D38A PRG:138A F6 90
LDA #$01 ; CPU:$D38C PRG:138C A9 01
STA $03F0 ; CPU:$D38E PRG:138E 8D F0 03
JSR RunGameTaskRoutine_C8D6 ; CPU:$D391 PRG:1391 20 D6 C8
SEC ; CPU:$D394 PRG:1394 38
RTS ; CPU:$D395 PRG:1395 60
UpdateObjectBufferOnNonZero_D396:
LDA $03F1 ; CPU:$D396 PRG:1396 AD F1 03
CMP #$1A ; CPU:$D399 PRG:1399 C9 1A
BCC UpdateObjectBufferOnNoCarry_D3A2 ; CPU:$D39B PRG:139B 90 05
SBC #$02 ; CPU:$D39D PRG:139D E9 02
STA $03F1 ; CPU:$D39F PRG:139F 8D F1 03
UpdateObjectBufferOnNoCarry_D3A2:
LDA #$F0 ; CPU:$D3A2 PRG:13A2 A9 F0
STA $00 ; CPU:$D3A4 PRG:13A4 85 00
LDA #$03 ; CPU:$D3A6 PRG:13A6 A9 03
STA $01 ; CPU:$D3A8 PRG:13A8 85 01
JSR ProcessResourceStateRoutine_F601 ; CPU:$D3AA PRG:13AA 20 01 F6
SEC ; CPU:$D3AD PRG:13AD 38
RTS ; CPU:$D3AE PRG:13AE 60
UpdateObjectBufferOnZero_D3AF:
LDA $5C,X ; CPU:$D3AF PRG:13AF B5 5C
BNE ObjectPathContinue_D3DA ; CPU:$D3B1 PRG:13B1 D0 27
DEC $80,X ; CPU:$D3B3 PRG:13B3 D6 80
BPL ObjectPathOnPositive_D3E0 ; CPU:$D3B5 PRG:13B5 10 29
STA $80,X ; CPU:$D3B7 PRG:13B7 95 80
LDA $03F0 ; CPU:$D3B9 PRG:13B9 AD F0 03
BEQ ObjectPathContinue_D3DA ; CPU:$D3BC PRG:13BC F0 1C
LDA $8D ; CPU:$D3BE PRG:13BE A5 8D
BNE ObjectPathOnNonZero_D3DC ; CPU:$D3C0 PRG:13C0 D0 1A
STA $03F0 ; CPU:$D3C2 PRG:13C2 8D F0 03
LDA #$EF ; CPU:$D3C5 PRG:13C5 A9 EF
STA $03F1 ; CPU:$D3C7 PRG:13C7 8D F1 03
LDA $D31F,X ; CPU:$D3CA PRG:13CA BD 1F D3
STA $03F3 ; CPU:$D3CD PRG:13CD 8D F3 03
LDA #$01 ; CPU:$D3D0 PRG:13D0 A9 01
STA $FF ; CPU:$D3D2 PRG:13D2 85 FF
LDA #$14 ; CPU:$D3D4 PRG:13D4 A9 14
STA $72,X ; CPU:$D3D6 PRG:13D6 95 72
DEC $90,X ; CPU:$D3D8 PRG:13D8 D6 90
ObjectPathContinue_D3DA:
SEC ; CPU:$D3DA PRG:13DA 38
RTS ; CPU:$D3DB PRG:13DB 60
ObjectPathOnNonZero_D3DC:
STA $90,X ; CPU:$D3DC PRG:13DC 95 90
SEC ; CPU:$D3DE PRG:13DE 38
RTS ; CPU:$D3DF PRG:13DF 60
ObjectPathOnPositive_D3E0:
STA $90,X ; CPU:$D3E0 PRG:13E0 95 90
LDA #$02 ; CPU:$D3E2 PRG:13E2 A9 02
STA $D0,X ; CPU:$D3E4 PRG:13E4 95 D0
JSR ProcessObjectStateRoutine_D42C ; CPU:$D3E6 PRG:13E6 20 2C D4
LDA $A0 ; CPU:$D3E9 PRG:13E9 A5 A0
BEQ ObjectPathOnZero_D3FF ; CPU:$D3EB PRG:13EB F0 12
LDA #$00 ; CPU:$D3ED PRG:13ED A9 00
STA $A0 ; CPU:$D3EF PRG:13EF 85 A0
STA $2F ; CPU:$D3F1 PRG:13F1 85 2F
LDA #$04 ; CPU:$D3F3 PRG:13F3 A9 04
STA $2E ; CPU:$D3F5 PRG:13F5 85 2E
LDA #$82 ; CPU:$D3F7 PRG:13F7 A9 82
JSR ProcessResourceStateRoutine_F31A ; CPU:$D3F9 PRG:13F9 20 1A F3
JSR UpdateGameStateRoutine_C402 ; CPU:$D3FC PRG:13FC 20 02 C4
ObjectPathOnZero_D3FF:
SEC ; CPU:$D3FF PRG:13FF 38
RTS ; CPU:$D400 PRG:1400 60
UpdateObjectRecordDispatch_D401:
LDA $5C,X ; CPU:$D401 PRG:1401 B5 5C
BNE ObjectPathOnNonZero_D418 ; CPU:$D403 PRG:1403 D0 13
LDY $D2,X ; CPU:$D405 PRG:1405 B4 D2
LDA $D321,Y ; CPU:$D407 PRG:1407 B9 21 D3
LDY #$05 ; CPU:$D40A PRG:140A A0 05
STA (CurrentObjectPtrLo),Y ; CPU:$D40C PRG:140C 91 08
CMP #$17 ; CPU:$D40E PRG:140E C9 17
BEQ UpdateObjectRecordOnZero_D41A ; CPU:$D410 PRG:1410 F0 08
INC $D2,X ; CPU:$D412 PRG:1412 F6 D2
LDA #$08 ; CPU:$D414 PRG:1414 A9 08
ObjectPathLoop_D416:
STA $5C,X ; CPU:$D416 PRG:1416 95 5C
ObjectPathOnNonZero_D418:
SEC ; CPU:$D418 PRG:1418 38
RTS ; CPU:$D419 PRG:1419 60
UpdateObjectRecordOnZero_D41A:
DEC $90,X ; CPU:$D41A PRG:141A D6 90
LDY #$00 ; CPU:$D41C PRG:141C A0 00
LDA #$01 ; CPU:$D41E PRG:141E A9 01
STA (CurrentObjectPtrLo),Y ; CPU:$D420 PRG:1420 91 08
LDA #$80 ; CPU:$D422 PRG:1422 A9 80
LDY $80,X ; CPU:$D424 PRG:1424 B4 80
BNE ObjectPathLoop_D416 ; CPU:$D426 PRG:1426 D0 EE
LDA #$10 ; CPU:$D428 PRG:1428 A9 10
BNE ObjectPathLoop_D416 ; CPU:$D42A PRG:142A D0 EA
;------------------------------------------------------------
; ProcessObjectStateRoutine_D42C
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessObjectStateRoutine_D42C:
LDY #$20 ; CPU:$D42C PRG:142C A0 20
LDA #$43 ; CPU:$D42E PRG:142E A9 43
CPX #$00 ; CPU:$D430 PRG:1430 E0 00
BEQ UpdateObjectBufferLoop_D436 ; CPU:$D432 PRG:1432 F0 02
LDA #$5A ; CPU:$D434 PRG:1434 A9 5A
UpdateObjectBufferLoop_D436:
STA $00 ; CPU:$D436 PRG:1436 85 00
STY $01 ; CPU:$D438 PRG:1438 84 01
LDA #$E7 ; CPU:$D43A PRG:143A A9 E7
STA $02 ; CPU:$D43C PRG:143C 85 02
LDA #$00 ; CPU:$D43E PRG:143E A9 00
STA $03 ; CPU:$D440 PRG:1440 85 03
LDA $80,X ; CPU:$D442 PRG:1442 B5 80
STA $E9 ; CPU:$D444 PRG:1444 85 E9
JSR UpdateCommandBufferRoutine_F3A1 ; CPU:$D446 PRG:1446 20 A1 F3
RTS ; CPU:$D449 PRG:1449 60
;------------------------------------------------------------
; ProcessObjectStateRoutine_D44A
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessObjectStateRoutine_D44A:
LDY #$28 ; CPU:$D44A PRG:144A A0 28
LDA #$E9 ; CPU:$D44C PRG:144C A9 E9
CPX #$00 ; CPU:$D44E PRG:144E E0 00
BEQ UpdateObjectBufferLoop_D436 ; CPU:$D450 PRG:1450 F0 E4
LDY #$2A ; CPU:$D452 PRG:1452 A0 2A
LDA #$A9 ; CPU:$D454 PRG:1454 A9 A9
BNE UpdateObjectBufferLoop_D436 ; CPU:$D456 PRG:1456 D0 DE
CLC ; CPU:$D458 PRG:1458 18
BMI ObjectPathOnNegative_D4A3 ; CPU:$D459 PRG:1459 30 48
RTS ; CPU:$D45B PRG:145B 60
.byte $78, $90, $A8, $C0, $D8, $20, $38, $50, $68, $80, $98, $B0, $C8, $C8, $0A, $18 ; CPU:$D45C PRG:145C 0B
.byte $08, $08, $10, $04, $01, $03, $19, $1A, $01, $03 ; CPU:$D46C PRG:146C 0B
ObjectPathLoop_D476:
SBC #$03 ; CPU:$D476 PRG:1476 E9 03
CMP #$F0 ; CPU:$D478 PRG:1478 C9 F0
BCC ObjectPathOnNoCarry_D47E ; CPU:$D47A PRG:147A 90 02
LDA #$F0 ; CPU:$D47C PRG:147C A9 F0
ObjectPathOnNoCarry_D47E:
JMP UpdateObjectRecordDispatch_D49E ; CPU:$D47E PRG:147E 4C 9E D4
ReadObjectRecordDispatch_D481:
CMP #$F0 ; CPU:$D481 PRG:1481 C9 F0
BCS ReadObjectRecordOnCarry_D4D5 ; CPU:$D483 PRG:1483 B0 50
CMP #$90 ; CPU:$D485 PRG:1485 C9 90
AND #$0F ; CPU:$D487 PRG:1487 29 0F
STA $06 ; CPU:$D489 PRG:1489 85 06
BCS UpdateObjectRecordOnCarry_D4DE ; CPU:$D48B PRG:148B B0 51
LSR A ; CPU:$D48D PRG:148D 4A
TAX ; CPU:$D48E PRG:148E AA
LDY $D474,X ; CPU:$D48F PRG:148F BC 74 D4
LDA (CurrentObjectPtrLo),Y ; CPU:$D492 PRG:1492 B1 08
BCS ObjectPathLoop_D476 ; CPU:$D494 PRG:1494 B0 E0
ADC #$03 ; CPU:$D496 PRG:1496 69 03
CMP #$F1 ; CPU:$D498 PRG:1498 C9 F1
BCC UpdateObjectRecordDispatch_D49E ; CPU:$D49A PRG:149A 90 02
LDA #$00 ; CPU:$D49C PRG:149C A9 00
UpdateObjectRecordDispatch_D49E:
STA (CurrentObjectPtrLo),Y ; CPU:$D49E PRG:149E 91 08
LDA $0F ; CPU:$D4A0 PRG:14A0 A5 0F
CLC ; CPU:$D4A2 PRG:14A2 18
ObjectPathOnNegative_D4A3:
ADC #$06 ; CPU:$D4A3 PRG:14A3 69 06
JSR ReadObjectRecordRoutine_E5AA ; CPU:$D4A5 PRG:14A5 20 AA E5
LDY #$10 ; CPU:$D4A8 PRG:14A8 A0 10
BCS UpdateObjectRecordContinue_D4CB ; CPU:$D4AA PRG:14AA B0 1F
CMP #$24 ; CPU:$D4AC PRG:14AC C9 24
BEQ UpdateObjectRecordContinue_D4CB ; CPU:$D4AE PRG:14AE F0 1B
CMP #$FF ; CPU:$D4B0 PRG:14B0 C9 FF
BEQ UpdateObjectRecordOnZero_D4B8 ; CPU:$D4B2 PRG:14B2 F0 04
CMP #$4A ; CPU:$D4B4 PRG:14B4 C9 4A
BCS UpdateObjectRecordContinue_D4CB ; CPU:$D4B6 PRG:14B6 B0 13
UpdateObjectRecordOnZero_D4B8:
LDA #$01 ; CPU:$D4B8 PRG:14B8 A9 01
STA $FC ; CPU:$D4BA PRG:14BA 85 FC
LDA #$94 ; CPU:$D4BC PRG:14BC A9 94
STA (CurrentObjectPtrLo),Y ; CPU:$D4BE PRG:14BE 91 08
LDY #$15 ; CPU:$D4C0 PRG:14C0 A0 15
LDA #$02 ; CPU:$D4C2 PRG:14C2 A9 02
STA (CurrentObjectPtrLo),Y ; CPU:$D4C4 PRG:14C4 91 08
ObjectPathLoop_D4C6:
LDA #$20 ; CPU:$D4C6 PRG:14C6 A9 20
JMP ProcessObjectStateDispatch_D783 ; CPU:$D4C8 PRG:14C8 4C 83 D7
UpdateObjectRecordContinue_D4CB:
LDA (CurrentObjectPtrLo),Y ; CPU:$D4CB PRG:14CB B1 08
AND #$03 ; CPU:$D4CD PRG:14CD 29 03
ORA #$40 ; CPU:$D4CF PRG:14CF 09 40
STA (CurrentObjectPtrLo),Y ; CPU:$D4D1 PRG:14D1 91 08
BNE ObjectPathLoop_D4C6 ; CPU:$D4D3 PRG:14D3 D0 F1
ReadObjectRecordOnCarry_D4D5:
LDY #$15 ; CPU:$D4D5 PRG:14D5 A0 15
LDA (CurrentObjectPtrLo),Y ; CPU:$D4D7 PRG:14D7 B1 08
BNE ObjectPathOnNonZero_D4F9 ; CPU:$D4D9 PRG:14D9 D0 1E
JMP UpdateObjectRecordDispatch_D57E ; CPU:$D4DB PRG:14DB 4C 7E D5
UpdateObjectRecordOnCarry_D4DE:
LDY #$15 ; CPU:$D4DE PRG:14DE A0 15
LDA (CurrentObjectPtrLo),Y ; CPU:$D4E0 PRG:14E0 B1 08
BNE ObjectPathOnNonZero_D4F9 ; CPU:$D4E2 PRG:14E2 D0 15
LDA #$01 ; CPU:$D4E4 PRG:14E4 A9 01
STA (CurrentObjectPtrLo),Y ; CPU:$D4E6 PRG:14E6 91 08
LDA $06 ; CPU:$D4E8 PRG:14E8 A5 06
CMP #$09 ; CPU:$D4EA PRG:14EA C9 09
BCS UpdateObjectRecordOnCarry_D4FC ; CPU:$D4EC PRG:14EC B0 0E
LDY #$05 ; CPU:$D4EE PRG:14EE A0 05
STA (CurrentObjectPtrLo),Y ; CPU:$D4F0 PRG:14F0 91 08
CLC ; CPU:$D4F2 PRG:14F2 18
ADC #$91 ; CPU:$D4F3 PRG:14F3 69 91
LDY #$10 ; CPU:$D4F5 PRG:14F5 A0 10
STA (CurrentObjectPtrLo),Y ; CPU:$D4F7 PRG:14F7 91 08
ObjectPathOnNonZero_D4F9:
JMP ProcessObjectStateDispatch_D67A ; CPU:$D4F9 PRG:14F9 4C 7A D6
UpdateObjectRecordOnCarry_D4FC:
LDX $82 ; CPU:$D4FC PRG:14FC A6 82
LDA $C0C9,X ; CPU:$D4FE PRG:14FE BD C9 C0
STA (CurrentObjectPtrLo),Y ; CPU:$D501 PRG:1501 91 08
LDY #$10 ; CPU:$D503 PRG:1503 A0 10
LDA #$01 ; CPU:$D505 PRG:1505 A9 01
STA (CurrentObjectPtrLo),Y ; CPU:$D507 PRG:1507 91 08
LDY #$00 ; CPU:$D509 PRG:1509 A0 00
STA (CurrentObjectPtrLo),Y ; CPU:$D50B PRG:150B 91 08
INY ; CPU:$D50D PRG:150D C8
LDA (CurrentObjectPtrLo),Y ; CPU:$D50E PRG:150E B1 08
STA $04 ; CPU:$D510 PRG:1510 85 04
LDY #$03 ; CPU:$D512 PRG:1512 A0 03
LDA (CurrentObjectPtrLo),Y ; CPU:$D514 PRG:1514 B1 08
STA $05 ; CPU:$D516 PRG:1516 85 05
LDX #$01 ; CPU:$D518 PRG:1518 A2 01
JSR UpdateObjectBufferRoutine_DD5B ; CPU:$D51A PRG:151A 20 5B DD
LDY #$1B ; CPU:$D51D PRG:151D A0 1B
LDA (CurrentObjectPtrLo),Y ; CPU:$D51F PRG:151F B1 08
TAX ; CPU:$D521 PRG:1521 AA
INC $D6,X ; CPU:$D522 PRG:1522 F6 D6
JMP ProcessObjectStateDispatch_D67A ; CPU:$D524 PRG:1524 4C 7A D6
UpdateObjectRecordDispatch_D527:
LDX $82 ; CPU:$D527 PRG:1527 A6 82
LDA $C0C1,X ; CPU:$D529 PRG:1529 BD C1 C0
SBC #$05 ; CPU:$D52C PRG:152C E9 05
LDY #$15 ; CPU:$D52E PRG:152E A0 15
CMP (CurrentObjectPtrLo),Y ; CPU:$D530 PRG:1530 D1 08
BCC ObjectPathOnNoCarry_D54C ; CPU:$D532 PRG:1532 90 18
LDA (CurrentObjectPtrLo),Y ; CPU:$D534 PRG:1534 B1 08
BNE ObjectPathOnNonZero_D546 ; CPU:$D536 PRG:1536 D0 0E
LDA #$10 ; CPU:$D538 PRG:1538 A9 10
STA (CurrentObjectPtrLo),Y ; CPU:$D53A PRG:153A 91 08
LDY #$10 ; CPU:$D53C PRG:153C A0 10
LDA (CurrentObjectPtrLo),Y ; CPU:$D53E PRG:153E B1 08
AND #$03 ; CPU:$D540 PRG:1540 29 03
ORA #$30 ; CPU:$D542 PRG:1542 09 30
STA (CurrentObjectPtrLo),Y ; CPU:$D544 PRG:1544 91 08
ObjectPathOnNonZero_D546:
LDA #$04 ; CPU:$D546 PRG:1546 A9 04
UpdateObjectRecordLoop_D548:
LDY #$05 ; CPU:$D548 PRG:1548 A0 05
STA (CurrentObjectPtrLo),Y ; CPU:$D54A PRG:154A 91 08
ObjectPathOnNoCarry_D54C:
LDA #$30 ; CPU:$D54C PRG:154C A9 30
JMP ProcessObjectStateDispatch_D783 ; CPU:$D54E PRG:154E 4C 83 D7
.byte $A9, $10, $91, $08 ; CPU:$D551 PRG:1551 0B
UpdateObjectRecordDispatch_D555:
AND #$03 ; CPU:$D555 PRG:1555 29 03
ORA #$50 ; CPU:$D557 PRG:1557 09 50
STA (CurrentObjectPtrLo),Y ; CPU:$D559 PRG:1559 91 08
LDY #$15 ; CPU:$D55B PRG:155B A0 15
LDX $82 ; CPU:$D55D PRG:155D A6 82
LDA $C0C1,X ; CPU:$D55F PRG:155F BD C1 C0
STA (CurrentObjectPtrLo),Y ; CPU:$D562 PRG:1562 91 08
INY ; CPU:$D564 PRG:1564 C8
LDA #$00 ; CPU:$D565 PRG:1565 A9 00
STA (CurrentObjectPtrLo),Y ; CPU:$D567 PRG:1567 91 08
LDY #$08 ; CPU:$D569 PRG:1569 A0 08
STA (CurrentObjectPtrLo),Y ; CPU:$D56B PRG:156B 91 08
LDA #$02 ; CPU:$D56D PRG:156D A9 02
STA $FC ; CPU:$D56F PRG:156F 85 FC
LDY #$09 ; CPU:$D571 PRG:1571 A0 09
LDA (CurrentObjectPtrLo),Y ; CPU:$D573 PRG:1573 B1 08
AND #$F0 ; CPU:$D575 PRG:1575 29 F0
ORA #$03 ; CPU:$D577 PRG:1577 09 03
STA (CurrentObjectPtrLo),Y ; CPU:$D579 PRG:1579 91 08
JMP ProcessObjectStateDispatch_D67A ; CPU:$D57B PRG:157B 4C 7A D6
UpdateObjectRecordDispatch_D57E:
LDY #$15 ; CPU:$D57E PRG:157E A0 15
LDA (CurrentObjectPtrLo),Y ; CPU:$D580 PRG:1580 B1 08
BNE UpdateObjectRecordOnNonZero_D595 ; CPU:$D582 PRG:1582 D0 11
LDA #$30 ; CPU:$D584 PRG:1584 A9 30
STA (CurrentObjectPtrLo),Y ; CPU:$D586 PRG:1586 91 08
LDY #$10 ; CPU:$D588 PRG:1588 A0 10
LDA (CurrentObjectPtrLo),Y ; CPU:$D58A PRG:158A B1 08
AND #$03 ; CPU:$D58C PRG:158C 29 03
ORA #$10 ; CPU:$D58E PRG:158E 09 10
STA (CurrentObjectPtrLo),Y ; CPU:$D590 PRG:1590 91 08
JMP ReadObjectRecordDispatch_D777 ; CPU:$D592 PRG:1592 4C 77 D7
UpdateObjectRecordOnNonZero_D595:
LDY #$09 ; CPU:$D595 PRG:1595 A0 09
LDA (CurrentObjectPtrLo),Y ; CPU:$D597 PRG:1597 B1 08
AND #$F0 ; CPU:$D599 PRG:1599 29 F0
ORA #$02 ; CPU:$D59B PRG:159B 09 02
STA (CurrentObjectPtrLo),Y ; CPU:$D59D PRG:159D 91 08
ProcessObjectStateDispatch_D59F:
LDA #$04 ; CPU:$D59F PRG:159F A9 04
BNE UpdateObjectRecordLoop_D548 ; CPU:$D5A1 PRG:15A1 D0 A5
UpdateObjectRecordDispatch_D5A3:
STA $06 ; CPU:$D5A3 PRG:15A3 85 06
LDY #$17 ; CPU:$D5A5 PRG:15A5 A0 17
LDA (CurrentObjectPtrLo),Y ; CPU:$D5A7 PRG:15A7 B1 08
BNE ObjectPathContinue_D5CC ; CPU:$D5A9 PRG:15A9 D0 21
LDY #$15 ; CPU:$D5AB PRG:15AB A0 15
LDA (CurrentObjectPtrLo),Y ; CPU:$D5AD PRG:15AD B1 08
BEQ ObjectPathContinue_D5CC ; CPU:$D5AF PRG:15AF F0 1B
INY ; CPU:$D5B1 PRG:15B1 C8
LDA (CurrentObjectPtrLo),Y ; CPU:$D5B2 PRG:15B2 B1 08
BNE ObjectPathOnNonZero_D5C9 ; CPU:$D5B4 PRG:15B4 D0 13
LDA #$04 ; CPU:$D5B6 PRG:15B6 A9 04
STA (CurrentObjectPtrLo),Y ; CPU:$D5B8 PRG:15B8 91 08
LDY #$10 ; CPU:$D5BA PRG:15BA A0 10
LDA (CurrentObjectPtrLo),Y ; CPU:$D5BC PRG:15BC B1 08
CLC ; CPU:$D5BE PRG:15BE 18
ADC #$01 ; CPU:$D5BF PRG:15BF 69 01
CMP #$24 ; CPU:$D5C1 PRG:15C1 C9 24
BNE UpdateObjectRecordOnNonZero_D5C7 ; CPU:$D5C3 PRG:15C3 D0 02
LDA #$20 ; CPU:$D5C5 PRG:15C5 A9 20
UpdateObjectRecordOnNonZero_D5C7:
STA (CurrentObjectPtrLo),Y ; CPU:$D5C7 PRG:15C7 91 08
ObjectPathOnNonZero_D5C9:
JMP ReadObjectRecordDispatch_D777 ; CPU:$D5C9 PRG:15C9 4C 77 D7
ObjectPathContinue_D5CC:
LDX #$00 ; CPU:$D5CC PRG:15CC A2 00
LDA $06 ; CPU:$D5CE PRG:15CE A5 06
AND #$02 ; CPU:$D5D0 PRG:15D0 29 02
BNE ReadObjectRecordOnNonZero_D5D5 ; CPU:$D5D2 PRG:15D2 D0 01
INX ; CPU:$D5D4 PRG:15D4 E8
ReadObjectRecordOnNonZero_D5D5:
EOR #$13 ; CPU:$D5D5 PRG:15D5 49 13
PHA ; CPU:$D5D7 PRG:15D7 48
LDY $D470,X ; CPU:$D5D8 PRG:15D8 BC 70 D4
LDA (CurrentObjectPtrLo),Y ; CPU:$D5DB PRG:15DB B1 08
LDY $D472,X ; CPU:$D5DD PRG:15DD BC 72 D4
LDX #$80 ; CPU:$D5E0 PRG:15E0 A2 80
SEC ; CPU:$D5E2 PRG:15E2 38
SBC (CurrentObjectPtrLo),Y ; CPU:$D5E3 PRG:15E3 F1 08
STA $00 ; CPU:$D5E5 PRG:15E5 85 00
BEQ ObjectPathOnZero_D5F8 ; CPU:$D5E7 PRG:15E7 F0 0F
BCS ObjectPathOnCarry_D5F6 ; CPU:$D5E9 PRG:15E9 B0 0B
PLA ; CPU:$D5EB PRG:15EB 68
AND #$12 ; CPU:$D5EC PRG:15EC 29 12
PHA ; CPU:$D5EE PRG:15EE 48
SEC ; CPU:$D5EF PRG:15EF 38
LDA #$00 ; CPU:$D5F0 PRG:15F0 A9 00
SBC $00 ; CPU:$D5F2 PRG:15F2 E5 00
STA $00 ; CPU:$D5F4 PRG:15F4 85 00
ObjectPathOnCarry_D5F6:
LDX #$20 ; CPU:$D5F6 PRG:15F6 A2 20
ObjectPathOnZero_D5F8:
PLA ; CPU:$D5F8 PRG:15F8 68
CPX $11 ; CPU:$D5F9 PRG:15F9 E4 11
BCC UpdateObjectRecordOnNoCarry_D5FF ; CPU:$D5FB PRG:15FB 90 02
EOR #$01 ; CPU:$D5FD PRG:15FD 49 01
UpdateObjectRecordOnNoCarry_D5FF:
LDY #$10 ; CPU:$D5FF PRG:15FF A0 10
STA (CurrentObjectPtrLo),Y ; CPU:$D601 PRG:1601 91 08
LDX #$01 ; CPU:$D603 PRG:1603 A2 01
LDA $82 ; CPU:$D605 PRG:1605 A5 82
CMP #$03 ; CPU:$D607 PRG:1607 C9 03
BCC UpdateObjectRecordOnNoCarry_D60C ; CPU:$D609 PRG:1609 90 01
INX ; CPU:$D60B PRG:160B E8
UpdateObjectRecordOnNoCarry_D60C:
TXA ; CPU:$D60C PRG:160C 8A
LDY #$18 ; CPU:$D60D PRG:160D A0 18
STA (CurrentObjectPtrLo),Y ; CPU:$D60F PRG:160F 91 08
LDY #$00 ; CPU:$D611 PRG:1611 A0 00
STY $01 ; CPU:$D613 PRG:1613 84 01
ObjectPathLoop_D615:
SEC ; CPU:$D615 PRG:1615 38
LDA WorkPtr0Hi ; CPU:$D616 PRG:1616 A5 01
SBC $C0BD,X ; CPU:$D618 PRG:1618 FD BD C0
STA $01 ; CPU:$D61B PRG:161B 85 01
LDA WorkPtr0Lo ; CPU:$D61D PRG:161D A5 00
SBC $C0B5,X ; CPU:$D61F PRG:161F FD B5 C0
STA $00 ; CPU:$D622 PRG:1622 85 00
INY ; CPU:$D624 PRG:1624 C8
BCS ObjectPathLoop_D615 ; CPU:$D625 PRG:1625 B0 EE
TYA ; CPU:$D627 PRG:1627 98
LDY #$00 ; CPU:$D628 PRG:1628 A0 00
UpdateObjectRecordLoop_D62A:
SEC ; CPU:$D62A PRG:162A 38
SBC #$06 ; CPU:$D62B PRG:162B E9 06
INY ; CPU:$D62D PRG:162D C8
BCS UpdateObjectRecordLoop_D62A ; CPU:$D62E PRG:162E B0 FA
TYA ; CPU:$D630 PRG:1630 98
LDY #$15 ; CPU:$D631 PRG:1631 A0 15
STA (CurrentObjectPtrLo),Y ; CPU:$D633 PRG:1633 91 08
INY ; CPU:$D635 PRG:1635 C8
LDA #$00 ; CPU:$D636 PRG:1636 A9 00
STA (CurrentObjectPtrLo),Y ; CPU:$D638 PRG:1638 91 08
INY ; CPU:$D63A PRG:163A C8
STA (CurrentObjectPtrLo),Y ; CPU:$D63B PRG:163B 91 08
JMP ReadObjectRecordDispatch_D777 ; CPU:$D63D PRG:163D 4C 77 D7
ObjectPathLoop_D640:
JMP UpdateObjectRecordDispatch_D5A3 ; CPU:$D640 PRG:1640 4C A3 D5
ObjectPathLoop_D643:
JMP ReadObjectRecordDispatch_D481 ; CPU:$D643 PRG:1643 4C 81 D4
ObjectPathLoop_D646:
JMP UpdateObjectRecordDispatch_D57E ; CPU:$D646 PRG:1646 4C 7E D5
ObjectPathLoop_D649:
JMP UpdateObjectBufferDispatch_D73B ; CPU:$D649 PRG:1649 4C 3B D7
ObjectPathLoop_D64C:
JMP UpdateObjectRecordDispatch_D555 ; CPU:$D64C PRG:164C 4C 55 D5
;------------------------------------------------------------
; UpdateObjectBuffer_D64F
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
UpdateObjectBuffer_D64F:
LDA #$03 ; CPU:$D64F PRG:164F A9 03
STA $0F ; CPU:$D651 PRG:1651 85 0F
LDA #$80 ; CPU:$D653 PRG:1653 A9 80
STA $08 ; CPU:$D655 PRG:1655 85 08
LDA #$04 ; CPU:$D657 PRG:1657 A9 04
STA $09 ; CPU:$D659 PRG:1659 85 09
ReadObjectRecordLoop_D65B:
LDY #$10 ; CPU:$D65B PRG:165B A0 10
LDA (CurrentObjectPtrLo),Y ; CPU:$D65D PRG:165D B1 08
BEQ ProcessObjectStateDispatch_D67A ; CPU:$D65F PRG:165F F0 19
BMI ObjectPathLoop_D643 ; CPU:$D661 PRG:1661 30 E0
CMP #$01 ; CPU:$D663 PRG:1663 C9 01
BEQ ReadObjectRecordOnZero_D6A9 ; CPU:$D665 PRG:1665 F0 42
CMP #$20 ; CPU:$D667 PRG:1667 C9 20
BCC ObjectPathLoop_D649 ; CPU:$D669 PRG:1669 90 DE
CMP #$30 ; CPU:$D66B PRG:166B C9 30
BCC ObjectPathLoop_D640 ; CPU:$D66D PRG:166D 90 D1
CMP #$40 ; CPU:$D66F PRG:166F C9 40
BCC ObjectPathLoop_D646 ; CPU:$D671 PRG:1671 90 D3
CMP #$50 ; CPU:$D673 PRG:1673 C9 50
BCC ObjectPathLoop_D64C ; CPU:$D675 PRG:1675 90 D5
JMP UpdateObjectRecordDispatch_D527 ; CPU:$D677 PRG:1677 4C 27 D5
ProcessObjectStateDispatch_D67A:
LDX $5E ; CPU:$D67A PRG:167A A6 5E
BNE UpdateObjectRecordContinue_D68E ; CPU:$D67C PRG:167C D0 10
LDY #$15 ; CPU:$D67E PRG:167E A0 15
UpdateObjectRecordLoop_D680:
LDA (CurrentObjectPtrLo),Y ; CPU:$D680 PRG:1680 B1 08
BEQ UpdateObjectRecordContinue_D68E ; CPU:$D682 PRG:1682 F0 0A
SEC ; CPU:$D684 PRG:1684 38
SBC #$01 ; CPU:$D685 PRG:1685 E9 01
STA (CurrentObjectPtrLo),Y ; CPU:$D687 PRG:1687 91 08
INY ; CPU:$D689 PRG:1689 C8
CPY #$17 ; CPU:$D68A PRG:168A C0 17
BCC UpdateObjectRecordLoop_D680 ; CPU:$D68C PRG:168C 90 F2
UpdateObjectRecordContinue_D68E:
LDY #$1C ; CPU:$D68E PRG:168E A0 1C
LDA (CurrentObjectPtrLo),Y ; CPU:$D690 PRG:1690 B1 08
BEQ ObjectPathOnZero_D699 ; CPU:$D692 PRG:1692 F0 05
SEC ; CPU:$D694 PRG:1694 38
SBC #$01 ; CPU:$D695 PRG:1695 E9 01
STA (CurrentObjectPtrLo),Y ; CPU:$D697 PRG:1697 91 08
ObjectPathOnZero_D699:
LDX #$08 ; CPU:$D699 PRG:1699 A2 08
JSR RunGameTaskRoutine_CBD3 ; CPU:$D69B PRG:169B 20 D3 CB
BPL ReadObjectRecordLoop_D65B ; CPU:$D69E PRG:169E 10 BB
LDX $5E ; CPU:$D6A0 PRG:16A0 A6 5E
BNE ObjectPathOnNonZero_D6A8 ; CPU:$D6A2 PRG:16A2 D0 04
LDX #$05 ; CPU:$D6A4 PRG:16A4 A2 05
STX $5E ; CPU:$D6A6 PRG:16A6 86 5E
ObjectPathOnNonZero_D6A8:
RTS ; CPU:$D6A8 PRG:16A8 60
ReadObjectRecordOnZero_D6A9:
LDY #$15 ; CPU:$D6A9 PRG:16A9 A0 15
LDA (CurrentObjectPtrLo),Y ; CPU:$D6AB PRG:16AB B1 08
BNE ProcessObjectStateDispatch_D67A ; CPU:$D6AD PRG:16AD D0 CB
JSR RunGameTaskRoutine_C8AA ; CPU:$D6AF PRG:16AF 20 AA C8
LDY #$00 ; CPU:$D6B2 PRG:16B2 A0 00
LDA ($04),Y ; CPU:$D6B4 PRG:16B4 B1 04
LSR A ; CPU:$D6B6 PRG:16B6 4A
TAX ; CPU:$D6B7 PRG:16B7 AA
DEX ; CPU:$D6B8 PRG:16B8 CA
BEQ ProcessObjectStateDispatch_D67A ; CPU:$D6B9 PRG:16B9 F0 BF
LDA $A6 ; CPU:$D6BB PRG:16BB A5 A6
BNE UpdateObjectBufferOnNonZero_D6C0 ; CPU:$D6BD PRG:16BD D0 01
TXA ; CPU:$D6BF PRG:16BF 8A
UpdateObjectBufferOnNonZero_D6C0:
STA $A6 ; CPU:$D6C0 PRG:16C0 85 A6
DEC $A6 ; CPU:$D6C2 PRG:16C2 C6 A6
ASL A ; CPU:$D6C4 PRG:16C4 0A
TAY ; CPU:$D6C5 PRG:16C5 A8
LDA ($04),Y ; CPU:$D6C6 PRG:16C6 B1 04
STA $02 ; CPU:$D6C8 PRG:16C8 85 02
INY ; CPU:$D6CA PRG:16CA C8
LDA ($04),Y ; CPU:$D6CB PRG:16CB B1 04
STA $03 ; CPU:$D6CD PRG:16CD 85 03
JSR UpdateObjectBufferRoutine_E0F9 ; CPU:$D6CF PRG:16CF 20 F9 E0
LDY #$05 ; CPU:$D6D2 PRG:16D2 A0 05
LDA #$00 ; CPU:$D6D4 PRG:16D4 A9 00
UpdateObjectRecordLoop_D6D6:
STA (CurrentObjectPtrLo),Y ; CPU:$D6D6 PRG:16D6 91 08
DEY ; CPU:$D6D8 PRG:16D8 88
BPL UpdateObjectRecordLoop_D6D6 ; CPU:$D6D9 PRG:16D9 10 FB
LDY #$09 ; CPU:$D6DB PRG:16DB A0 09
LDA #$02 ; CPU:$D6DD PRG:16DD A9 02
STA (CurrentObjectPtrLo),Y ; CPU:$D6DF PRG:16DF 91 08
LDY #$01 ; CPU:$D6E1 PRG:16E1 A0 01
LDA WorkPtr0Lo ; CPU:$D6E3 PRG:16E3 A5 00
STA (CurrentObjectPtrLo),Y ; CPU:$D6E5 PRG:16E5 91 08
LDY #$03 ; CPU:$D6E7 PRG:16E7 A0 03
LDA WorkPtr0Hi ; CPU:$D6E9 PRG:16E9 A5 01
STA (CurrentObjectPtrLo),Y ; CPU:$D6EB PRG:16EB 91 08
LDY #$10 ; CPU:$D6ED PRG:16ED A0 10
LDA $15 ; CPU:$D6EF PRG:16EF A5 15
AND #$03 ; CPU:$D6F1 PRG:16F1 29 03
ORA #$30 ; CPU:$D6F3 PRG:16F3 09 30
STA (CurrentObjectPtrLo),Y ; CPU:$D6F5 PRG:16F5 91 08
LDY #$15 ; CPU:$D6F7 PRG:16F7 A0 15
LDA #$0C ; CPU:$D6F9 PRG:16F9 A9 0C
STA (CurrentObjectPtrLo),Y ; CPU:$D6FB PRG:16FB 91 08
INY ; CPU:$D6FD PRG:16FD C8
LDA #$00 ; CPU:$D6FE PRG:16FE A9 00
STA (CurrentObjectPtrLo),Y ; CPU:$D700 PRG:1700 91 08
INY ; CPU:$D702 PRG:1702 C8
STA (CurrentObjectPtrLo),Y ; CPU:$D703 PRG:1703 91 08
INY ; CPU:$D705 PRG:1705 C8
LDA #$01 ; CPU:$D706 PRG:1706 A9 01
STA (CurrentObjectPtrLo),Y ; CPU:$D708 PRG:1708 91 08
LDA #$03 ; CPU:$D70A PRG:170A A9 03
STA $02 ; CPU:$D70C PRG:170C 85 02
LDA #$80 ; CPU:$D70E PRG:170E A9 80
STA $00 ; CPU:$D710 PRG:1710 85 00
LDA #$04 ; CPU:$D712 PRG:1712 A9 04
STA $01 ; CPU:$D714 PRG:1714 85 01
ObjectPathLoop_D716:
LDY #$10 ; CPU:$D716 PRG:1716 A0 10
LDA ($00),Y ; CPU:$D718 PRG:1718 B1 00
CMP #$01 ; CPU:$D71A PRG:171A C9 01
BNE ObjectPathContinue_D72A ; CPU:$D71C PRG:171C D0 0C
LDY #$15 ; CPU:$D71E PRG:171E A0 15
LDA ($00),Y ; CPU:$D720 PRG:1720 B1 00
CMP #$20 ; CPU:$D722 PRG:1722 C9 20
BCS ObjectPathContinue_D72A ; CPU:$D724 PRG:1724 B0 04
LDA #$20 ; CPU:$D726 PRG:1726 A9 20
STA ($00),Y ; CPU:$D728 PRG:1728 91 00
ObjectPathContinue_D72A:
LDX #$00 ; CPU:$D72A PRG:172A A2 00
JSR RunGameTaskRoutine_CBD3 ; CPU:$D72C PRG:172C 20 D3 CB
DEC $02 ; CPU:$D72F PRG:172F C6 02
BPL ObjectPathLoop_D716 ; CPU:$D731 PRG:1731 10 E3
JMP ProcessObjectStateDispatch_D59F ; CPU:$D733 PRG:1733 4C 9F D5
ObjectPathLoop_D736:
INY ; CPU:$D736 PRG:1736 C8
LDA #$01 ; CPU:$D737 PRG:1737 A9 01
BNE UpdateObjectRecordOnNonZero_D775 ; CPU:$D739 PRG:1739 D0 3A
UpdateObjectBufferDispatch_D73B:
AND #$03 ; CPU:$D73B PRG:173B 29 03
STA $06 ; CPU:$D73D PRG:173D 85 06
LDA $0F ; CPU:$D73F PRG:173F A5 0F
CLC ; CPU:$D741 PRG:1741 18
ADC #$06 ; CPU:$D742 PRG:1742 69 06
JSR ReadObjectRecordRoutine_E5AA ; CPU:$D744 PRG:1744 20 AA E5
BCS ReadObjectRecordContinue_D7A4 ; CPU:$D747 PRG:1747 B0 5B
CMP #$24 ; CPU:$D749 PRG:1749 C9 24
BEQ ReadObjectRecordContinue_D7A4 ; CPU:$D74B PRG:174B F0 57
CMP #$4E ; CPU:$D74D PRG:174D C9 4E
BCS ObjectPathOnCarry_D755 ; CPU:$D74F PRG:174F B0 04
CMP #$4A ; CPU:$D751 PRG:1751 C9 4A
BCS ReadObjectRecordContinue_D7A4 ; CPU:$D753 PRG:1753 B0 4F
ObjectPathOnCarry_D755:
CMP #$60 ; CPU:$D755 PRG:1755 C9 60
BCS ObjectPathOnCarry_D75D ; CPU:$D757 PRG:1757 B0 04
CMP #$50 ; CPU:$D759 PRG:1759 C9 50
BCS ReadObjectRecordContinue_D7A4 ; CPU:$D75B PRG:175B B0 47
ObjectPathOnCarry_D75D:
CMP #$FD ; CPU:$D75D PRG:175D C9 FD
BCS UpdateObjectRecordOnCarry_D765 ; CPU:$D75F PRG:175F B0 04
CMP #$F9 ; CPU:$D761 PRG:1761 C9 F9
BCS ReadObjectRecordContinue_D7A4 ; CPU:$D763 PRG:1763 B0 3F
UpdateObjectRecordOnCarry_D765:
LDA #$11 ; CPU:$D765 PRG:1765 A9 11
EOR $06 ; CPU:$D767 PRG:1767 45 06
LDY #$10 ; CPU:$D769 PRG:1769 A0 10
STA (CurrentObjectPtrLo),Y ; CPU:$D76B PRG:176B 91 08
LDY #$16 ; CPU:$D76D PRG:176D A0 16
LDA (CurrentObjectPtrLo),Y ; CPU:$D76F PRG:176F B1 08
BNE ObjectPathLoop_D736 ; CPU:$D771 PRG:1771 D0 C3
LDA #$18 ; CPU:$D773 PRG:1773 A9 18
UpdateObjectRecordOnNonZero_D775:
STA (CurrentObjectPtrLo),Y ; CPU:$D775 PRG:1775 91 08
ReadObjectRecordDispatch_D777:
LDY #$10 ; CPU:$D777 PRG:1777 A0 10
LDA (CurrentObjectPtrLo),Y ; CPU:$D779 PRG:1779 B1 08
PHA ; CPU:$D77B PRG:177B 48
AND #$03 ; CPU:$D77C PRG:177C 29 03
TAX ; CPU:$D77E PRG:177E AA
JSR UpdateObjectRecordRoutine_CD45 ; CPU:$D77F PRG:177F 20 45 CD
PLA ; CPU:$D782 PRG:1782 68
ProcessObjectStateDispatch_D783:
AND #$F0 ; CPU:$D783 PRG:1783 29 F0
LSR A ; CPU:$D785 PRG:1785 4A
LSR A ; CPU:$D786 PRG:1786 4A
LSR A ; CPU:$D787 PRG:1787 4A
LSR A ; CPU:$D788 PRG:1788 4A
TAX ; CPU:$D789 PRG:1789 AA
DEX ; CPU:$D78A PRG:178A CA
LDA $5F,X ; CPU:$D78B PRG:178B B5 5F
BNE UpdateObjectRecordOnNonZero_D794 ; CPU:$D78D PRG:178D D0 05
LDA $D46A,X ; CPU:$D78F PRG:178F BD 6A D4
STA $5F,X ; CPU:$D792 PRG:1792 95 5F
UpdateObjectRecordOnNonZero_D794:
CMP $D46D,X ; CPU:$D794 PRG:1794 DD 6D D4
BCC ObjectPathOnNoCarry_D7A1 ; CPU:$D797 PRG:1797 90 08
LDY #$05 ; CPU:$D799 PRG:1799 A0 05
LDA #$01 ; CPU:$D79B PRG:179B A9 01
EOR (CurrentObjectPtrLo),Y ; CPU:$D79D PRG:179D 51 08
STA (CurrentObjectPtrLo),Y ; CPU:$D79F PRG:179F 91 08
ObjectPathOnNoCarry_D7A1:
JMP ProcessObjectStateDispatch_D67A ; CPU:$D7A1 PRG:17A1 4C 7A D6
ReadObjectRecordContinue_D7A4:
LDY #$15 ; CPU:$D7A4 PRG:17A4 A0 15
LDA (CurrentObjectPtrLo),Y ; CPU:$D7A6 PRG:17A6 B1 08
BEQ UpdateObjectRecordContinue_D814 ; CPU:$D7A8 PRG:17A8 F0 6A
LDY #$17 ; CPU:$D7AA PRG:17AA A0 17
LDA (CurrentObjectPtrLo),Y ; CPU:$D7AC PRG:17AC B1 08
BNE UpdateObjectRecordContinue_D814 ; CPU:$D7AE PRG:17AE D0 64
LDA $06 ; CPU:$D7B0 PRG:17B0 A5 06
LDX #$01 ; CPU:$D7B2 PRG:17B2 A2 01
CMP #$02 ; CPU:$D7B4 PRG:17B4 C9 02
BCC TestObjectFieldOnNoCarry_D7B9 ; CPU:$D7B6 PRG:17B6 90 01
DEX ; CPU:$D7B8 PRG:17B8 CA
TestObjectFieldOnNoCarry_D7B9:
LDY $D470,X ; CPU:$D7B9 PRG:17B9 BC 70 D4
LDA (CurrentObjectPtrLo),Y ; CPU:$D7BC PRG:17BC B1 08
LDY $D472,X ; CPU:$D7BE PRG:17BE BC 72 D4
CMP (CurrentObjectPtrLo),Y ; CPU:$D7C1 PRG:17C1 D1 08
BNE ReadObjectRecordLoop_D80D ; CPU:$D7C3 PRG:17C3 D0 48
TXA ; CPU:$D7C5 PRG:17C5 8A
EOR #$01 ; CPU:$D7C6 PRG:17C6 49 01
TAX ; CPU:$D7C8 PRG:17C8 AA
LDY $D470,X ; CPU:$D7C9 PRG:17C9 BC 70 D4
LDA (CurrentObjectPtrLo),Y ; CPU:$D7CC PRG:17CC B1 08
LDY $D472,X ; CPU:$D7CE PRG:17CE BC 72 D4
CMP (CurrentObjectPtrLo),Y ; CPU:$D7D1 PRG:17D1 D1 08
LDA $06 ; CPU:$D7D3 PRG:17D3 A5 06
AND #$01 ; CPU:$D7D5 PRG:17D5 29 01
BCS ObjectPathOnCarry_D807 ; CPU:$D7D7 PRG:17D7 B0 2E
BEQ ObjectPathOnZero_D809 ; CPU:$D7D9 PRG:17D9 F0 2E
ObjectPathLoop_D7DB:
LDA #$00 ; CPU:$D7DB PRG:17DB A9 00
ProcessObjectStateDispatch_D7DD:
TAX ; CPU:$D7DD PRG:17DD AA
LDA $06 ; CPU:$D7DE PRG:17DE A5 06
LDY #$02 ; CPU:$D7E0 PRG:17E0 A0 02
CMP #$02 ; CPU:$D7E2 PRG:17E2 C9 02
BCC ObjectPathOnNoCarry_D7E8 ; CPU:$D7E4 PRG:17E4 90 02
LDY #$04 ; CPU:$D7E6 PRG:17E6 A0 04
ObjectPathOnNoCarry_D7E8:
AND #$01 ; CPU:$D7E8 PRG:17E8 29 01
BNE UpdateObjectRecordOnNonZero_D7F0 ; CPU:$D7EA PRG:17EA D0 04
INX ; CPU:$D7EC PRG:17EC E8
INX ; CPU:$D7ED PRG:17ED E8
INX ; CPU:$D7EE PRG:17EE E8
INX ; CPU:$D7EF PRG:17EF E8
UpdateObjectRecordOnNonZero_D7F0:
LDA $77 ; CPU:$D7F0 PRG:17F0 A5 77
BNE ObjectPathOnNonZero_D804 ; CPU:$D7F2 PRG:17F2 D0 10
CLC ; CPU:$D7F4 PRG:17F4 18
LDA $C0B9,X ; CPU:$D7F5 PRG:17F5 BD B9 C0
ADC (CurrentObjectPtrLo),Y ; CPU:$D7F8 PRG:17F8 71 08
STA (CurrentObjectPtrLo),Y ; CPU:$D7FA PRG:17FA 91 08
DEY ; CPU:$D7FC PRG:17FC 88
LDA $C0B1,X ; CPU:$D7FD PRG:17FD BD B1 C0
ADC (CurrentObjectPtrLo),Y ; CPU:$D800 PRG:1800 71 08
STA (CurrentObjectPtrLo),Y ; CPU:$D802 PRG:1802 91 08
ObjectPathOnNonZero_D804:
JMP ReadObjectRecordDispatch_D777 ; CPU:$D804 PRG:1804 4C 77 D7
ObjectPathOnCarry_D807:
BEQ ObjectPathLoop_D7DB ; CPU:$D807 PRG:1807 F0 D2
ObjectPathOnZero_D809:
LDA #$03 ; CPU:$D809 PRG:1809 A9 03
BNE ProcessObjectStateDispatch_D7DD ; CPU:$D80B PRG:180B D0 D0
ReadObjectRecordLoop_D80D:
LDY #$18 ; CPU:$D80D PRG:180D A0 18
LDA (CurrentObjectPtrLo),Y ; CPU:$D80F PRG:180F B1 08
JMP ProcessObjectStateDispatch_D7DD ; CPU:$D811 PRG:1811 4C DD D7
UpdateObjectRecordContinue_D814:
LDY #$18 ; CPU:$D814 PRG:1814 A0 18
LDA #$00 ; CPU:$D816 PRG:1816 A9 00
STA (CurrentObjectPtrLo),Y ; CPU:$D818 PRG:1818 91 08
LDY #$03 ; CPU:$D81A PRG:181A A0 03
LDX #$08 ; CPU:$D81C PRG:181C A2 08
LDA $06 ; CPU:$D81E PRG:181E A5 06
CMP #$02 ; CPU:$D820 PRG:1820 C9 02
BCS ReadObjectRecordOnCarry_D828 ; CPU:$D822 PRG:1822 B0 04
LDY #$01 ; CPU:$D824 PRG:1824 A0 01
LDX #$11 ; CPU:$D826 PRG:1826 A2 11
ReadObjectRecordOnCarry_D828:
LDA (CurrentObjectPtrLo),Y ; CPU:$D828 PRG:1828 B1 08
INY ; CPU:$D82A PRG:182A C8
STY $00 ; CPU:$D82B PRG:182B 84 00
LDY #$09 ; CPU:$D82D PRG:182D A0 09
ObjectPathLoop_D82F:
CMP $D458,X ; CPU:$D82F PRG:182F DD 58 D4
BEQ ObjectPathOnZero_D83A ; CPU:$D832 PRG:1832 F0 06
DEX ; CPU:$D834 PRG:1834 CA
DEY ; CPU:$D835 PRG:1835 88
BNE ObjectPathLoop_D82F ; CPU:$D836 PRG:1836 D0 F7
BEQ ReadObjectRecordLoop_D80D ; CPU:$D838 PRG:1838 F0 D3
ObjectPathOnZero_D83A:
LDA $15 ; CPU:$D83A PRG:183A A5 15
CMP #$20 ; CPU:$D83C PRG:183C C9 20
BCC UpdateObjectRecordOnNoCarry_D842 ; CPU:$D83E PRG:183E 90 02
LDA #$00 ; CPU:$D840 PRG:1840 A9 00
UpdateObjectRecordOnNoCarry_D842:
LDY #$15 ; CPU:$D842 PRG:1842 A0 15
STA (CurrentObjectPtrLo),Y ; CPU:$D844 PRG:1844 91 08
INY ; CPU:$D846 PRG:1846 C8
LDA #$04 ; CPU:$D847 PRG:1847 A9 04
STA (CurrentObjectPtrLo),Y ; CPU:$D849 PRG:1849 91 08
LDY #$10 ; CPU:$D84B PRG:184B A0 10
LDA $06 ; CPU:$D84D PRG:184D A5 06
ORA #$20 ; CPU:$D84F PRG:184F 09 20
STA (CurrentObjectPtrLo),Y ; CPU:$D851 PRG:1851 91 08
JMP ReadObjectRecordDispatch_D777 ; CPU:$D853 PRG:1853 4C 77 D7
;------------------------------------------------------------
; ObjectPath_D856
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ObjectPath_D856:
LDA #$07 ; CPU:$D856 PRG:1856 A9 07
STA $0E ; CPU:$D858 PRG:1858 85 0E
LDA #$00 ; CPU:$D85A PRG:185A A9 00
STA $00 ; CPU:$D85C PRG:185C 85 00
LDA #$05 ; CPU:$D85E PRG:185E A9 05
STA $01 ; CPU:$D860 PRG:1860 85 01
UpdateObjectBufferLoop_D862:
LDA #$03 ; CPU:$D862 PRG:1862 A9 03
STA $0F ; CPU:$D864 PRG:1864 85 0F
LDA #$80 ; CPU:$D866 PRG:1866 A9 80
STA $02 ; CPU:$D868 PRG:1868 85 02
LDA #$04 ; CPU:$D86A PRG:186A A9 04
STA $03 ; CPU:$D86C PRG:186C 85 03
ObjectPathLoop_D86E:
LDY #$10 ; CPU:$D86E PRG:186E A0 10
LDA ($00),Y ; CPU:$D870 PRG:1870 B1 00
BEQ ObjectPathContinue_D8A5 ; CPU:$D872 PRG:1872 F0 31
LDY #$05 ; CPU:$D874 PRG:1874 A0 05
LDA ($00),Y ; CPU:$D876 PRG:1876 B1 00
CMP #$08 ; CPU:$D878 PRG:1878 C9 08
BEQ ObjectPathOnZero_D888 ; CPU:$D87A PRG:187A F0 0C
CMP #$09 ; CPU:$D87C PRG:187C C9 09
BEQ ObjectPathOnZero_D888 ; CPU:$D87E PRG:187E F0 08
CMP #$12 ; CPU:$D880 PRG:1880 C9 12
BEQ ObjectPathOnZero_D888 ; CPU:$D882 PRG:1882 F0 04
CMP #$13 ; CPU:$D884 PRG:1884 C9 13
BNE ObjectPathContinue_D8A5 ; CPU:$D886 PRG:1886 D0 1D
ObjectPathOnZero_D888:
LDY #$10 ; CPU:$D888 PRG:1888 A0 10
LDA ($02),Y ; CPU:$D88A PRG:188A B1 02
CMP #$02 ; CPU:$D88C PRG:188C C9 02
BCC ObjectPathContinue_D8A5 ; CPU:$D88E PRG:188E 90 15
BPL UpdateObjectBufferOnPositive_D896 ; CPU:$D890 PRG:1890 10 04
CMP #$F0 ; CPU:$D892 PRG:1892 C9 F0
BCC ObjectPathContinue_D8A5 ; CPU:$D894 PRG:1894 90 0F
UpdateObjectBufferOnPositive_D896:
JSR ProcessResourceStateRoutine_F71C ; CPU:$D896 PRG:1896 20 1C F7
BCC ObjectPathContinue_D8A5 ; CPU:$D899 PRG:1899 90 0A
LDY #$10 ; CPU:$D89B PRG:189B A0 10
LDA ($02),Y ; CPU:$D89D PRG:189D B1 02
AND #$03 ; CPU:$D89F PRG:189F 29 03
ORA #$40 ; CPU:$D8A1 PRG:18A1 09 40
STA ($02),Y ; CPU:$D8A3 PRG:18A3 91 02
ObjectPathContinue_D8A5:
LDX #$02 ; CPU:$D8A5 PRG:18A5 A2 02
JSR RunGameTaskRoutine_CBD3 ; CPU:$D8A7 PRG:18A7 20 D3 CB
BPL ObjectPathLoop_D86E ; CPU:$D8AA PRG:18AA 10 C2
LDX #$00 ; CPU:$D8AC PRG:18AC A2 00
JSR RunGameTaskRoutine_CBD3 ; CPU:$D8AE PRG:18AE 20 D3 CB
DEC $0E ; CPU:$D8B1 PRG:18B1 C6 0E
BPL UpdateObjectBufferLoop_D862 ; CPU:$D8B3 PRG:18B3 10 AD
RTS ; CPU:$D8B5 PRG:18B5 60
.byte $00, $02, $01, $03 ; CPU:$D8B6 PRG:18B6 0B
;------------------------------------------------------------
; ObjectPath_D8BA
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ObjectPath_D8BA:
LDA #$01 ; CPU:$D8BA PRG:18BA A9 01
STA $0E ; CPU:$D8BC PRG:18BC 85 0E
LDA #$40 ; CPU:$D8BE PRG:18BE A9 40
STA $00 ; CPU:$D8C0 PRG:18C0 85 00
LDA #$04 ; CPU:$D8C2 PRG:18C2 A9 04
STA $01 ; CPU:$D8C4 PRG:18C4 85 01
UpdateObjectBufferLoop_D8C6:
LDA #$03 ; CPU:$D8C6 PRG:18C6 A9 03
STA $0F ; CPU:$D8C8 PRG:18C8 85 0F
LDA #$80 ; CPU:$D8CA PRG:18CA A9 80
STA $02 ; CPU:$D8CC PRG:18CC 85 02
LDA #$04 ; CPU:$D8CE PRG:18CE A9 04
STA $03 ; CPU:$D8D0 PRG:18D0 85 03
ObjectPathLoop_D8D2:
JSR ProcessObjectStateRoutine_D970 ; CPU:$D8D2 PRG:18D2 20 70 D9
BNE ProcessObjectStateDispatch_D904 ; CPU:$D8D5 PRG:18D5 D0 2D
LDY #$10 ; CPU:$D8D7 PRG:18D7 A0 10
LDA ($02),Y ; CPU:$D8D9 PRG:18D9 B1 02
BPL ObjectPathOnPositive_D8E1 ; CPU:$D8DB PRG:18DB 10 04
CMP #$F0 ; CPU:$D8DD PRG:18DD C9 F0
BCC ProcessObjectStateDispatch_D904 ; CPU:$D8DF PRG:18DF 90 23
ObjectPathOnPositive_D8E1:
CMP #$02 ; CPU:$D8E1 PRG:18E1 C9 02
BCC ProcessObjectStateDispatch_D904 ; CPU:$D8E3 PRG:18E3 90 1F
JSR ProcessResourceStateRoutine_F71C ; CPU:$D8E5 PRG:18E5 20 1C F7
BCC ProcessObjectStateDispatch_D904 ; CPU:$D8E8 PRG:18E8 90 1A
LDY #$10 ; CPU:$D8EA PRG:18EA A0 10
LDA ($02),Y ; CPU:$D8EC PRG:18EC B1 02
CMP #$30 ; CPU:$D8EE PRG:18EE C9 30
BCS ObjectPathOnCarry_D928 ; CPU:$D8F0 PRG:18F0 B0 36
UpdateObjectBufferLoop_D8F2:
LDA #$23 ; CPU:$D8F2 PRG:18F2 A9 23
STA $90,X ; CPU:$D8F4 PRG:18F4 95 90
LDA ($02),Y ; CPU:$D8F6 PRG:18F6 B1 02
AND #$03 ; CPU:$D8F8 PRG:18F8 29 03
ORA #$F0 ; CPU:$D8FA PRG:18FA 09 F0
STA ($02),Y ; CPU:$D8FC PRG:18FC 91 02
LDY #$15 ; CPU:$D8FE PRG:18FE A0 15
LDA #$08 ; CPU:$D900 PRG:1900 A9 08
STA ($02),Y ; CPU:$D902 PRG:1902 91 02
ProcessObjectStateDispatch_D904:
LDX #$02 ; CPU:$D904 PRG:1904 A2 02
JSR RunGameTaskRoutine_CBD3 ; CPU:$D906 PRG:1906 20 D3 CB
BPL ObjectPathLoop_D8D2 ; CPU:$D909 PRG:1909 10 C7
LDA #$00 ; CPU:$D90B PRG:190B A9 00
STA $00 ; CPU:$D90D PRG:190D 85 00
LDA #$04 ; CPU:$D90F PRG:190F A9 04
STA $01 ; CPU:$D911 PRG:1911 85 01
DEC $0E ; CPU:$D913 PRG:1913 C6 0E
BPL UpdateObjectBufferLoop_D8C6 ; CPU:$D915 PRG:1915 10 AF
RTS ; CPU:$D917 PRG:1917 60
UpdateObjectBufferLoop_D918:
LDA ($02),Y ; CPU:$D918 PRG:1918 B1 02
AND #$03 ; CPU:$D91A PRG:191A 29 03
ORA #$30 ; CPU:$D91C PRG:191C 09 30
STA ($02),Y ; CPU:$D91E PRG:191E 91 02
LDY #$15 ; CPU:$D920 PRG:1920 A0 15
LDA #$14 ; CPU:$D922 PRG:1922 A9 14
STA ($02),Y ; CPU:$D924 PRG:1924 91 02
BNE ProcessObjectStateDispatch_D904 ; CPU:$D926 PRG:1926 D0 DC
ObjectPathOnCarry_D928:
CMP #$40 ; CPU:$D928 PRG:1928 C9 40
BCC UpdateObjectBufferLoop_D918 ; CPU:$D92A PRG:192A 90 EC
CMP #$F0 ; CPU:$D92C PRG:192C C9 F0
BCS UpdateObjectBufferLoop_D8F2 ; CPU:$D92E PRG:192E B0 C2
JSR ProcessObjectStateRoutine_D94D ; CPU:$D930 PRG:1930 20 4D D9
TAX ; CPU:$D933 PRG:1933 AA
EOR ($02),Y ; CPU:$D934 PRG:1934 51 02
AND #$02 ; CPU:$D936 PRG:1936 29 02
BEQ UpdateObjectBufferOnZero_D93D ; CPU:$D938 PRG:1938 F0 03
LDA ($02),Y ; CPU:$D93A PRG:193A B1 02
TAX ; CPU:$D93C PRG:193C AA
UpdateObjectBufferOnZero_D93D:
TXA ; CPU:$D93D PRG:193D 8A
AND #$03 ; CPU:$D93E PRG:193E 29 03
ORA #$80 ; CPU:$D940 PRG:1940 09 80
STA ($02),Y ; CPU:$D942 PRG:1942 91 02
LDY #$1B ; CPU:$D944 PRG:1944 A0 1B
LDA $0E ; CPU:$D946 PRG:1946 A5 0E
STA ($02),Y ; CPU:$D948 PRG:1948 91 02
JMP ProcessObjectStateDispatch_D904 ; CPU:$D94A PRG:194A 4C 04 D9
;------------------------------------------------------------
; ProcessObjectStateRoutine_D94D
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessObjectStateRoutine_D94D:
LDA ($00),Y ; CPU:$D94D PRG:194D B1 00
BPL ObjectPathContinue_D96D ; CPU:$D94F PRG:194F 10 1C
CMP #$81 ; CPU:$D951 PRG:1951 C9 81
PHP ; CPU:$D953 PRG:1953 08
LDA #$08 ; CPU:$D954 PRG:1954 A9 08
BCC ObjectPathOnNoCarry_D95A ; CPU:$D956 PRG:1956 90 02
LDA #$38 ; CPU:$D958 PRG:1958 A9 38
ObjectPathOnNoCarry_D95A:
LDY #$1B ; CPU:$D95A PRG:195A A0 1B
CLC ; CPU:$D95C PRG:195C 18
ADC ($00),Y ; CPU:$D95D PRG:195D 71 00
ROL A ; CPU:$D95F PRG:195F 2A
ROL A ; CPU:$D960 PRG:1960 2A
ROL A ; CPU:$D961 PRG:1961 2A
AND #$03 ; CPU:$D962 PRG:1962 29 03
TAX ; CPU:$D964 PRG:1964 AA
LDA $D8B6,X ; CPU:$D965 PRG:1965 BD B6 D8
PLP ; CPU:$D968 PRG:1968 28
BCC ObjectPathContinue_D96D ; CPU:$D969 PRG:1969 90 02
EOR #$01 ; CPU:$D96B PRG:196B 49 01
ObjectPathContinue_D96D:
LDY #$10 ; CPU:$D96D PRG:196D A0 10
RTS ; CPU:$D96F PRG:196F 60
;------------------------------------------------------------
; ProcessObjectStateRoutine_D970
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessObjectStateRoutine_D970:
LDX $0E ; CPU:$D970 PRG:1970 A6 0E
LDA $90,X ; CPU:$D972 PRG:1972 B5 90
BNE ObjectPathOnNonZero_D978 ; CPU:$D974 PRG:1974 D0 02
LDA $D0,X ; CPU:$D976 PRG:1976 B5 D0
ObjectPathOnNonZero_D978:
RTS ; CPU:$D978 PRG:1978 60
.byte $03, $FD ; CPU:$D979 PRG:1979 0B
;------------------------------------------------------------
; ObjectPath_D97B
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ObjectPath_D97B:
LDA #$02 ; CPU:$D97B PRG:197B A9 02
STA $0E ; CPU:$D97D PRG:197D 85 0E
LDA #$80 ; CPU:$D97F PRG:197F A9 80
STA $00 ; CPU:$D981 PRG:1981 85 00
LDA #$04 ; CPU:$D983 PRG:1983 A9 04
STA $01 ; CPU:$D985 PRG:1985 85 01
UpdateObjectBufferLoop_D987:
LDA $0E ; CPU:$D987 PRG:1987 A5 0E
STA $0F ; CPU:$D989 PRG:1989 85 0F
CLC ; CPU:$D98B PRG:198B 18
LDA #$20 ; CPU:$D98C PRG:198C A9 20
ADC $00 ; CPU:$D98E PRG:198E 65 00
STA $02 ; CPU:$D990 PRG:1990 85 02
LDA #$00 ; CPU:$D992 PRG:1992 A9 00
ADC $01 ; CPU:$D994 PRG:1994 65 01
STA $03 ; CPU:$D996 PRG:1996 85 03
ObjectPathLoop_D998:
JSR ProcessResourceStateRoutine_F71C ; CPU:$D998 PRG:1998 20 1C F7
BCC ObjectPathOnNoCarry_D9A0 ; CPU:$D99B PRG:199B 90 03
JSR ProcessObjectStateRoutine_D9B1 ; CPU:$D99D PRG:199D 20 B1 D9
ObjectPathOnNoCarry_D9A0:
LDX #$02 ; CPU:$D9A0 PRG:19A0 A2 02
JSR RunGameTaskRoutine_CBD3 ; CPU:$D9A2 PRG:19A2 20 D3 CB
BPL ObjectPathLoop_D998 ; CPU:$D9A5 PRG:19A5 10 F1
LDX #$00 ; CPU:$D9A7 PRG:19A7 A2 00
JSR RunGameTaskRoutine_CBD3 ; CPU:$D9A9 PRG:19A9 20 D3 CB
DEC $0E ; CPU:$D9AC PRG:19AC C6 0E
BPL UpdateObjectBufferLoop_D987 ; CPU:$D9AE PRG:19AE 10 D7
RTS ; CPU:$D9B0 PRG:19B0 60
;------------------------------------------------------------
; ProcessObjectStateRoutine_D9B1
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessObjectStateRoutine_D9B1:
LDY #$10 ; CPU:$D9B1 PRG:19B1 A0 10
LDA ($00),Y ; CPU:$D9B3 PRG:19B3 B1 00
CMP #$20 ; CPU:$D9B5 PRG:19B5 C9 20
BCS ObjectPathContinue_D9DE ; CPU:$D9B7 PRG:19B7 B0 25
LDA ($02),Y ; CPU:$D9B9 PRG:19B9 B1 02
CMP #$20 ; CPU:$D9BB PRG:19BB C9 20
BCS ObjectPathOnCarry_D9CB ; CPU:$D9BD PRG:19BD B0 0C
EOR ($00),Y ; CPU:$D9BF PRG:19BF 51 00
AND #$02 ; CPU:$D9C1 PRG:19C1 29 02
BNE ObjectPathOnNonZero_D9CF ; CPU:$D9C3 PRG:19C3 D0 0A
LDY #$1C ; CPU:$D9C5 PRG:19C5 A0 1C
LDA ($00),Y ; CPU:$D9C7 PRG:19C7 B1 00
BNE ObjectPathContinue_D9DE ; CPU:$D9C9 PRG:19C9 D0 13
ObjectPathOnCarry_D9CB:
JSR UpdateObjectBufferRoutine_D9E2 ; CPU:$D9CB PRG:19CB 20 E2 D9
RTS ; CPU:$D9CE PRG:19CE 60
ObjectPathOnNonZero_D9CF:
JSR UpdateObjectBufferRoutine_D9E2 ; CPU:$D9CF PRG:19CF 20 E2 D9
JSR ProcessResourceStateRoutine_F71C ; CPU:$D9D2 PRG:19D2 20 1C F7
BCC ObjectPathOnNoCarry_D9E1 ; CPU:$D9D5 PRG:19D5 90 0A
JSR UpdateObjectBufferRoutine_D9E2 ; CPU:$D9D7 PRG:19D7 20 E2 D9
LDA #$00 ; CPU:$D9DA PRG:19DA A9 00
STA ($00),Y ; CPU:$D9DC PRG:19DC 91 00
ObjectPathContinue_D9DE:
JSR UpdateObjectBufferRoutine_DA04 ; CPU:$D9DE PRG:19DE 20 04 DA
ObjectPathOnNoCarry_D9E1:
RTS ; CPU:$D9E1 PRG:19E1 60
;------------------------------------------------------------
; UpdateObjectBufferRoutine_D9E2
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
UpdateObjectBufferRoutine_D9E2:
LDY #$10 ; CPU:$D9E2 PRG:19E2 A0 10
LDA ($00),Y ; CPU:$D9E4 PRG:19E4 B1 00
EOR #$01 ; CPU:$D9E6 PRG:19E6 49 01
STA ($00),Y ; CPU:$D9E8 PRG:19E8 91 00
LDY #$01 ; CPU:$D9EA PRG:19EA A0 01
CMP #$12 ; CPU:$D9EC PRG:19EC C9 12
BCC ObjectPathOnNoCarry_D9F2 ; CPU:$D9EE PRG:19EE 90 02
LDY #$03 ; CPU:$D9F0 PRG:19F0 A0 03
ObjectPathOnNoCarry_D9F2:
AND #$01 ; CPU:$D9F2 PRG:19F2 29 01
TAX ; CPU:$D9F4 PRG:19F4 AA
LDA $D979,X ; CPU:$D9F5 PRG:19F5 BD 79 D9
CLC ; CPU:$D9F8 PRG:19F8 18
ADC ($00),Y ; CPU:$D9F9 PRG:19F9 71 00
STA ($00),Y ; CPU:$D9FB PRG:19FB 91 00
LDY #$1C ; CPU:$D9FD PRG:19FD A0 1C
LDA #$05 ; CPU:$D9FF PRG:19FF A9 05
STA ($00),Y ; CPU:$DA01 PRG:1A01 91 00
RTS ; CPU:$DA03 PRG:1A03 60
;------------------------------------------------------------
; UpdateObjectBufferRoutine_DA04
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
UpdateObjectBufferRoutine_DA04:
LDY #$10 ; CPU:$DA04 PRG:1A04 A0 10
LDA ($02),Y ; CPU:$DA06 PRG:1A06 B1 02
EOR #$01 ; CPU:$DA08 PRG:1A08 49 01
STA ($02),Y ; CPU:$DA0A PRG:1A0A 91 02
LDY #$01 ; CPU:$DA0C PRG:1A0C A0 01
CMP #$12 ; CPU:$DA0E PRG:1A0E C9 12
BCC ObjectPathOnNoCarry_DA14 ; CPU:$DA10 PRG:1A10 90 02
LDY #$03 ; CPU:$DA12 PRG:1A12 A0 03
ObjectPathOnNoCarry_DA14:
AND #$01 ; CPU:$DA14 PRG:1A14 29 01
TAX ; CPU:$DA16 PRG:1A16 AA
LDA $D979,X ; CPU:$DA17 PRG:1A17 BD 79 D9
CLC ; CPU:$DA1A PRG:1A1A 18
ADC ($02),Y ; CPU:$DA1B PRG:1A1B 71 02
STA ($02),Y ; CPU:$DA1D PRG:1A1D 91 02
LDY #$1C ; CPU:$DA1F PRG:1A1F A0 1C
LDA #$05 ; CPU:$DA21 PRG:1A21 A9 05
STA ($02),Y ; CPU:$DA23 PRG:1A23 91 02
RTS ; CPU:$DA25 PRG:1A25 60
;------------------------------------------------------------
; ProcessObjectStateRoutine_DA26
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessObjectStateRoutine_DA26:
LDA $77 ; CPU:$DA26 PRG:1A26 A5 77
BNE ObjectPathContinue_DA8A ; CPU:$DA28 PRG:1A28 D0 60
LDA $64 ; CPU:$DA2A PRG:1A2A A5 64
BNE ObjectPathContinue_DA8A ; CPU:$DA2C PRG:1A2C D0 5C
LDA $2E ; CPU:$DA2E PRG:1A2E A5 2E
BNE ObjectPathOnNonZero_DA36 ; CPU:$DA30 PRG:1A30 D0 04
LDA $2F ; CPU:$DA32 PRG:1A32 A5 2F
BEQ ObjectPathContinue_DA8A ; CPU:$DA34 PRG:1A34 F0 54
ObjectPathOnNonZero_DA36:
LDX #$07 ; CPU:$DA36 PRG:1A36 A2 07
LDA $4C ; CPU:$DA38 PRG:1A38 A5 4C
BEQ ObjectPathOnZero_DA3E ; CPU:$DA3A PRG:1A3A F0 02
LDX #$06 ; CPU:$DA3C PRG:1A3C A2 06
ObjectPathOnZero_DA3E:
STX $64 ; CPU:$DA3E PRG:1A3E 86 64
LDA #$01 ; CPU:$DA40 PRG:1A40 A9 01
STA $00 ; CPU:$DA42 PRG:1A42 85 00
LDA #$02 ; CPU:$DA44 PRG:1A44 A9 02
STA $01 ; CPU:$DA46 PRG:1A46 85 01
JSR ProcessResourceStateRoutine_F408 ; CPU:$DA48 PRG:1A48 20 08 F4
LDA $2F ; CPU:$DA4B PRG:1A4B A5 2F
BNE ObjectPathLoop_DA85 ; CPU:$DA4D PRG:1A4D D0 36
LDA $2E ; CPU:$DA4F PRG:1A4F A5 2E
BEQ ObjectPathOnZero_DA65 ; CPU:$DA51 PRG:1A51 F0 12
CMP #$02 ; CPU:$DA53 PRG:1A53 C9 02
BNE ObjectPathLoop_DA85 ; CPU:$DA55 PRG:1A55 D0 2E
LDA #$01 ; CPU:$DA57 PRG:1A57 A9 01
STA $64 ; CPU:$DA59 PRG:1A59 85 64
LDA $8F ; CPU:$DA5B PRG:1A5B A5 8F
BNE ObjectPathLoop_DA85 ; CPU:$DA5D PRG:1A5D D0 26
LDA #$08 ; CPU:$DA5F PRG:1A5F A9 08
STA $FB ; CPU:$DA61 PRG:1A61 85 FB
BNE ObjectPathLoop_DA85 ; CPU:$DA63 PRG:1A63 D0 20
ObjectPathOnZero_DA65:
LDA $8F ; CPU:$DA65 PRG:1A65 A5 8F
BNE ObjectPathOnNonZero_DA8B ; CPU:$DA67 PRG:1A67 D0 22
LDA #$01 ; CPU:$DA69 PRG:1A69 A9 01
STA $A1 ; CPU:$DA6B PRG:1A6B 85 A1
STA $A0 ; CPU:$DA6D PRG:1A6D 85 A0
LDA #$23 ; CPU:$DA6F PRG:1A6F A9 23
LDX $90 ; CPU:$DA71 PRG:1A71 A6 90
CPX #$01 ; CPU:$DA73 PRG:1A73 E0 01
BCS ObjectPathOnCarry_DA79 ; CPU:$DA75 PRG:1A75 B0 02
STA $90 ; CPU:$DA77 PRG:1A77 85 90
ObjectPathOnCarry_DA79:
LDX $91 ; CPU:$DA79 PRG:1A79 A6 91
CPX #$01 ; CPU:$DA7B PRG:1A7B E0 01
BCS ObjectPathOnCarry_DA81 ; CPU:$DA7D PRG:1A7D B0 02
STA $91 ; CPU:$DA7F PRG:1A7F 85 91
ObjectPathOnCarry_DA81:
LDA #$80 ; CPU:$DA81 PRG:1A81 A9 80
STA $FB ; CPU:$DA83 PRG:1A83 85 FB
ObjectPathLoop_DA85:
LDA #$82 ; CPU:$DA85 PRG:1A85 A9 82
JSR ProcessResourceStateRoutine_F31A ; CPU:$DA87 PRG:1A87 20 1A F3
ObjectPathContinue_DA8A:
RTS ; CPU:$DA8A PRG:1A8A 60
ObjectPathOnNonZero_DA8B:
LDA #$23 ; CPU:$DA8B PRG:1A8B A9 23
STA $78 ; CPU:$DA8D PRG:1A8D 85 78
BNE ObjectPathLoop_DA85 ; CPU:$DA8F PRG:1A8F D0 F4
;------------------------------------------------------------
; ObjectPath_DA91
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ObjectPath_DA91:
LDA $0401 ; CPU:$DA91 PRG:1A91 AD 01 04
LDY $0403 ; CPU:$DA94 PRG:1A94 AC 03 04
LDX $D0 ; CPU:$DA97 PRG:1A97 A6 D0
BEQ ObjectPathOnZero_DA9F ; CPU:$DA99 PRG:1A99 F0 04
LDA $11 ; CPU:$DA9B PRG:1A9B A5 11
LDY $12 ; CPU:$DA9D PRG:1A9D A4 12
ObjectPathOnZero_DA9F:
STA $0499 ; CPU:$DA9F PRG:1A9F 8D 99 04
STY $049A ; CPU:$DAA2 PRG:1AA2 8C 9A 04
STA $04D9 ; CPU:$DAA5 PRG:1AA5 8D D9 04
STY $04DA ; CPU:$DAA8 PRG:1AA8 8C DA 04
LDX $4C ; CPU:$DAAB PRG:1AAB A6 4C
BEQ ObjectPathOnZero_DAB5 ; CPU:$DAAD PRG:1AAD F0 06
LDA $0441 ; CPU:$DAAF PRG:1AAF AD 41 04
LDY $0443 ; CPU:$DAB2 PRG:1AB2 AC 43 04
ObjectPathOnZero_DAB5:
LDX $D1 ; CPU:$DAB5 PRG:1AB5 A6 D1
BEQ ObjectPathOnZero_DABD ; CPU:$DAB7 PRG:1AB7 F0 04
LDA $13 ; CPU:$DAB9 PRG:1AB9 A5 13
LDY $14 ; CPU:$DABB PRG:1ABB A4 14
ObjectPathOnZero_DABD:
STA $04B9 ; CPU:$DABD PRG:1ABD 8D B9 04
STY $04BA ; CPU:$DAC0 PRG:1AC0 8C BA 04
STA $04F9 ; CPU:$DAC3 PRG:1AC3 8D F9 04
STY $04FA ; CPU:$DAC6 PRG:1AC6 8C FA 04
RTS ; CPU:$DAC9 PRG:1AC9 60
.byte $0C, $FC, $00, $00, $00, $00, $0C, $FC, $00, $F0, $00, $08, $08, $00, $F0, $00 ; CPU:$DACA PRG:1ACA 0B
;------------------------------------------------------------
; ReadObjectRecord_DADA
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ReadObjectRecord_DADA:
LDX $0A ; CPU:$DADA PRG:1ADA A6 0A
LDA $46,X ; CPU:$DADC PRG:1ADC B5 46
AND #$C0 ; CPU:$DADE PRG:1ADE 29 C0
BEQ ObjectPathContinue_DB27 ; CPU:$DAE0 PRG:1AE0 F0 45
LDA $DA,X ; CPU:$DAE2 PRG:1AE2 B5 DA
CMP #$02 ; CPU:$DAE4 PRG:1AE4 C9 02
BEQ ObjectPathContinue_DB27 ; CPU:$DAE6 PRG:1AE6 F0 3F
LDA #$20 ; CPU:$DAE8 PRG:1AE8 A9 20
STA $07 ; CPU:$DAEA PRG:1AEA 85 07
LSR A ; CPU:$DAEC PRG:1AEC 4A
STA $6C,X ; CPU:$DAED PRG:1AED 95 6C
LDA $06 ; CPU:$DAEF PRG:1AEF A5 06
BMI ObjectPathOnNegative_DB28 ; CPU:$DAF1 PRG:1AF1 30 35
AND #$03 ; CPU:$DAF3 PRG:1AF3 29 03
TAX ; CPU:$DAF5 PRG:1AF5 AA
LSR A ; CPU:$DAF6 PRG:1AF6 4A
EOR #$01 ; CPU:$DAF7 PRG:1AF7 49 01
STA $0D ; CPU:$DAF9 PRG:1AF9 85 0D
LDY #$01 ; CPU:$DAFB PRG:1AFB A0 01
LDA $DACA,X ; CPU:$DAFD PRG:1AFD BD CA DA
CLC ; CPU:$DB00 PRG:1B00 18
ADC (CurrentObjectPtrLo),Y ; CPU:$DB01 PRG:1B01 71 08
STA $00 ; CPU:$DB03 PRG:1B03 85 00
LDY #$03 ; CPU:$DB05 PRG:1B05 A0 03
LDA $DACE,X ; CPU:$DB07 PRG:1B07 BD CE DA
ReadObjectRecordLoop_DB0A:
CLC ; CPU:$DB0A PRG:1B0A 18
ADC (CurrentObjectPtrLo),Y ; CPU:$DB0B PRG:1B0B 71 08
STA $01 ; CPU:$DB0D PRG:1B0D 85 01
LDA #$00 ; CPU:$DB0F PRG:1B0F A9 00
STA $02 ; CPU:$DB11 PRG:1B11 85 02
STA $0E ; CPU:$DB13 PRG:1B13 85 0E
JSR ProcessObjectStateRoutine_CE50 ; CPU:$DB15 PRG:1B15 20 50 CE
BCS ObjectPathContinue_DB27 ; CPU:$DB18 PRG:1B18 B0 0D
LDX $0A ; CPU:$DB1A PRG:1B1A A6 0A
INC $DA,X ; CPU:$DB1C PRG:1B1C F6 DA
LDY #$15 ; CPU:$DB1E PRG:1B1E A0 15
TXA ; CPU:$DB20 PRG:1B20 8A
STA ($04),Y ; CPU:$DB21 PRG:1B21 91 04
LDA #$40 ; CPU:$DB23 PRG:1B23 A9 40
STA $FF ; CPU:$DB25 PRG:1B25 85 FF
ObjectPathContinue_DB27:
RTS ; CPU:$DB27 PRG:1B27 60
ObjectPathOnNegative_DB28:
CMP #$81 ; CPU:$DB28 PRG:1B28 C9 81
LDA #$08 ; CPU:$DB2A PRG:1B2A A9 08
BCC ReadObjectRecordOnNoCarry_DB30 ; CPU:$DB2C PRG:1B2C 90 02
LDA #$38 ; CPU:$DB2E PRG:1B2E A9 38
ReadObjectRecordOnNoCarry_DB30:
LDY #$1B ; CPU:$DB30 PRG:1B30 A0 1B
CLC ; CPU:$DB32 PRG:1B32 18
ADC (CurrentObjectPtrLo),Y ; CPU:$DB33 PRG:1B33 71 08
ROL A ; CPU:$DB35 PRG:1B35 2A
ROL A ; CPU:$DB36 PRG:1B36 2A
ROL A ; CPU:$DB37 PRG:1B37 2A
AND #$03 ; CPU:$DB38 PRG:1B38 29 03
TAX ; CPU:$DB3A PRG:1B3A AA
AND #$01 ; CPU:$DB3B PRG:1B3B 29 01
EOR #$01 ; CPU:$DB3D PRG:1B3D 49 01
STA $0D ; CPU:$DB3F PRG:1B3F 85 0D
LDY #$21 ; CPU:$DB41 PRG:1B41 A0 21
CLC ; CPU:$DB43 PRG:1B43 18
LDA $DAD2,X ; CPU:$DB44 PRG:1B44 BD D2 DA
ADC (CurrentObjectPtrLo),Y ; CPU:$DB47 PRG:1B47 71 08
STA $00 ; CPU:$DB49 PRG:1B49 85 00
LDA $DAD6,X ; CPU:$DB4B PRG:1B4B BD D6 DA
LDY #$23 ; CPU:$DB4E PRG:1B4E A0 23
BNE ReadObjectRecordLoop_DB0A ; CPU:$DB50 PRG:1B50 D0 B8
;------------------------------------------------------------
; UpdateObjectBuffer_DB52
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
UpdateObjectBuffer_DB52:
LDA $67 ; CPU:$DB52 PRG:1B52 A5 67
BNE ObjectPathContinue_DBC3 ; CPU:$DB54 PRG:1B54 D0 6D
LDA $90 ; CPU:$DB56 PRG:1B56 A5 90
BNE ObjectPathContinue_DBC3 ; CPU:$DB58 PRG:1B58 D0 69
LDA $91 ; CPU:$DB5A PRG:1B5A A5 91
BNE ObjectPathContinue_DBC3 ; CPU:$DB5C PRG:1B5C D0 65
LDA $D0 ; CPU:$DB5E PRG:1B5E A5 D0
BNE ObjectPathContinue_DBC3 ; CPU:$DB60 PRG:1B60 D0 61
LDA $D1 ; CPU:$DB62 PRG:1B62 A5 D1
BNE ObjectPathContinue_DBC3 ; CPU:$DB64 PRG:1B64 D0 5D
LDA #$00 ; CPU:$DB66 PRG:1B66 A9 00
STA $00 ; CPU:$DB68 PRG:1B68 85 00
LDA #$04 ; CPU:$DB6A PRG:1B6A A9 04
STA $01 ; CPU:$DB6C PRG:1B6C 85 01
LDA #$40 ; CPU:$DB6E PRG:1B6E A9 40
STA $02 ; CPU:$DB70 PRG:1B70 85 02
LDA #$04 ; CPU:$DB72 PRG:1B72 A9 04
STA $03 ; CPU:$DB74 PRG:1B74 85 03
JSR ProcessResourceStateRoutine_F71C ; CPU:$DB76 PRG:1B76 20 1C F7
BCC ObjectPathContinue_DBC3 ; CPU:$DB79 PRG:1B79 90 48
JSR ProcessObjectStateRoutine_DB8A ; CPU:$DB7B PRG:1B7B 20 8A DB
LDA #$40 ; CPU:$DB7E PRG:1B7E A9 40
STA $00 ; CPU:$DB80 PRG:1B80 85 00
LDA #$04 ; CPU:$DB82 PRG:1B82 A9 04
STA $01 ; CPU:$DB84 PRG:1B84 85 01
LDA #$08 ; CPU:$DB86 PRG:1B86 A9 08
STA $FF ; CPU:$DB88 PRG:1B88 85 FF
;------------------------------------------------------------
; ProcessObjectStateRoutine_DB8A
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessObjectStateRoutine_DB8A:
LDY #$10 ; CPU:$DB8A PRG:1B8A A0 10
LDA ($00),Y ; CPU:$DB8C PRG:1B8C B1 00
BMI UpdateObjectBufferOnNegative_DBA7 ; CPU:$DB8E PRG:1B8E 30 17
CMP #$04 ; CPU:$DB90 PRG:1B90 C9 04
BCS ObjectPathContinue_DBC3 ; CPU:$DB92 PRG:1B92 B0 2F
TAX ; CPU:$DB94 PRG:1B94 AA
LDY $E16F,X ; CPU:$DB95 PRG:1B95 BC 6F E1
SEC ; CPU:$DB98 PRG:1B98 38
LDA #$00 ; CPU:$DB99 PRG:1B99 A9 00
SBC ($00),Y ; CPU:$DB9B PRG:1B9B F1 00
STA ($00),Y ; CPU:$DB9D PRG:1B9D 91 00
DEY ; CPU:$DB9F PRG:1B9F 88
LDA #$00 ; CPU:$DBA0 PRG:1BA0 A9 00
SBC ($00),Y ; CPU:$DBA2 PRG:1BA2 F1 00
STA ($00),Y ; CPU:$DBA4 PRG:1BA4 91 00
TXA ; CPU:$DBA6 PRG:1BA6 8A
UpdateObjectBufferOnNegative_DBA7:
LDY #$18 ; CPU:$DBA7 PRG:1BA7 A0 18
STY $67 ; CPU:$DBA9 PRG:1BA9 84 67
EOR #$01 ; CPU:$DBAB PRG:1BAB 49 01
LDY #$10 ; CPU:$DBAD PRG:1BAD A0 10
STA ($00),Y ; CPU:$DBAF PRG:1BAF 91 00
LDA #$0A ; CPU:$DBB1 PRG:1BB1 A9 0A
STA $56 ; CPU:$DBB3 PRG:1BB3 85 56
LDY #$02 ; CPU:$DBB5 PRG:1BB5 A0 02
LDX #$10 ; CPU:$DBB7 PRG:1BB7 A2 10
JSR UpdateObjectBufferRoutine_D1AE ; CPU:$DBB9 PRG:1BB9 20 AE D1
LDY #$03 ; CPU:$DBBC PRG:1BBC A0 03
LDX #$14 ; CPU:$DBBE PRG:1BBE A2 14
JSR UpdateObjectBufferRoutine_D1AE ; CPU:$DBC0 PRG:1BC0 20 AE D1
ObjectPathContinue_DBC3:
RTS ; CPU:$DBC3 PRG:1BC3 60
.byte $A8, $B0, $B8 ; CPU:$DBC4 PRG:1BC4 0B
;------------------------------------------------------------
; UpdateObjectBuffer_DBC7
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
UpdateObjectBuffer_DBC7:
LDA #$07 ; CPU:$DBC7 PRG:1BC7 A9 07
STA $0F ; CPU:$DBC9 PRG:1BC9 85 0F
LDA #$00 ; CPU:$DBCB PRG:1BCB A9 00
STA $02 ; CPU:$DBCD PRG:1BCD 85 02
LDA #$06 ; CPU:$DBCF PRG:1BCF A9 06
STA $03 ; CPU:$DBD1 PRG:1BD1 85 03
ObjectPathLoop_DBD3:
LDY #$10 ; CPU:$DBD3 PRG:1BD3 A0 10
LDA ($02),Y ; CPU:$DBD5 PRG:1BD5 B1 02
TAX ; CPU:$DBD7 PRG:1BD7 AA
BEQ ObjectPathLoop_DC36 ; CPU:$DBD8 PRG:1BD8 F0 5C
DEX ; CPU:$DBDA PRG:1BDA CA
TXA ; CPU:$DBDB PRG:1BDB 8A
STA ($02),Y ; CPU:$DBDC PRG:1BDC 91 02
LDY #$00 ; CPU:$DBDE PRG:1BDE A0 00
LDA ($02),Y ; CPU:$DBE0 PRG:1BE0 B1 02
BMI ObjectPathOnNegative_DC3E ; CPU:$DBE2 PRG:1BE2 30 5A
LDY #$05 ; CPU:$DBE4 PRG:1BE4 A0 05
LDA #$08 ; CPU:$DBE6 PRG:1BE6 A9 08
CPX #$1C ; CPU:$DBE8 PRG:1BE8 E0 1C
BEQ ObjectPathOnZero_DC34 ; CPU:$DBEA PRG:1BEA F0 48
LDA #$09 ; CPU:$DBEC PRG:1BEC A9 09
CPX #$14 ; CPU:$DBEE PRG:1BEE E0 14
BEQ ObjectPathOnZero_DC34 ; CPU:$DBF0 PRG:1BF0 F0 42
LDA #$01 ; CPU:$DBF2 PRG:1BF2 A9 01
CPX #$01 ; CPU:$DBF4 PRG:1BF4 E0 01
BEQ ObjectPathLoop_DC2E ; CPU:$DBF6 PRG:1BF6 F0 36
CPX #$00 ; CPU:$DBF8 PRG:1BF8 E0 00
BNE ObjectPathLoop_DC36 ; CPU:$DBFA PRG:1BFA D0 3A
LDY #$01 ; CPU:$DBFC PRG:1BFC A0 01
LDA ($02),Y ; CPU:$DBFE PRG:1BFE B1 02
SEC ; CPU:$DC00 PRG:1C00 38
SBC #$04 ; CPU:$DC01 PRG:1C01 E9 04
STA $04 ; CPU:$DC03 PRG:1C03 85 04
LDY #$03 ; CPU:$DC05 PRG:1C05 A0 03
LDA ($02),Y ; CPU:$DC07 PRG:1C07 B1 02
SEC ; CPU:$DC09 PRG:1C09 38
SBC #$04 ; CPU:$DC0A PRG:1C0A E9 04
STA $05 ; CPU:$DC0C PRG:1C0C 85 05
LDY #$11 ; CPU:$DC0E PRG:1C0E A0 11
LDA ($02),Y ; CPU:$DC10 PRG:1C10 B1 02
TAX ; CPU:$DC12 PRG:1C12 AA
BEQ ObjectPathOnZero_DC18 ; CPU:$DC13 PRG:1C13 F0 03
JSR UpdateObjectBufferRoutine_DD5B ; CPU:$DC15 PRG:1C15 20 5B DD
ObjectPathOnZero_DC18:
LDY #$0B ; CPU:$DC18 PRG:1C18 A0 0B
LDA ($02),Y ; CPU:$DC1A PRG:1C1A B1 02
LDX #$03 ; CPU:$DC1C PRG:1C1C A2 03
ObjectPathLoop_DC1E:
DEX ; CPU:$DC1E PRG:1C1E CA
CMP $DBC4,X ; CPU:$DC1F PRG:1C1F DD C4 DB
BNE ObjectPathLoop_DC1E ; CPU:$DC22 PRG:1C22 D0 FA
LDA #$00 ; CPU:$DC24 PRG:1C24 A9 00
STA $A9,X ; CPU:$DC26 PRG:1C26 95 A9
LDY #$01 ; CPU:$DC28 PRG:1C28 A0 01
STA ($02),Y ; CPU:$DC2A PRG:1C2A 91 02
LDA #$80 ; CPU:$DC2C PRG:1C2C A9 80
ObjectPathLoop_DC2E:
LDX #$10 ; CPU:$DC2E PRG:1C2E A2 10
STX $FF ; CPU:$DC30 PRG:1C30 86 FF
LDY #$00 ; CPU:$DC32 PRG:1C32 A0 00
ObjectPathOnZero_DC34:
STA ($02),Y ; CPU:$DC34 PRG:1C34 91 02
ObjectPathLoop_DC36:
LDX #$02 ; CPU:$DC36 PRG:1C36 A2 02
JSR RunGameTaskRoutine_CBD3 ; CPU:$DC38 PRG:1C38 20 D3 CB
BPL ObjectPathLoop_DBD3 ; CPU:$DC3B PRG:1C3B 10 96
RTS ; CPU:$DC3D PRG:1C3D 60
ObjectPathOnNegative_DC3E:
CPX #$00 ; CPU:$DC3E PRG:1C3E E0 00
BNE ObjectPathLoop_DC36 ; CPU:$DC40 PRG:1C40 D0 F4
LDX #$03 ; CPU:$DC42 PRG:1C42 A2 03
ObjectPathLoop_DC44:
DEX ; CPU:$DC44 PRG:1C44 CA
BMI ObjectPathLoop_DC36 ; CPU:$DC45 PRG:1C45 30 EF
LDA $A9,X ; CPU:$DC47 PRG:1C47 B5 A9
BNE ObjectPathLoop_DC44 ; CPU:$DC49 PRG:1C49 D0 F9
LDY #$0B ; CPU:$DC4B PRG:1C4B A0 0B
LDA $DBC4,X ; CPU:$DC4D PRG:1C4D BD C4 DB
STA ($02),Y ; CPU:$DC50 PRG:1C50 91 02
LDA #$01 ; CPU:$DC52 PRG:1C52 A9 01
STA $A9,X ; CPU:$DC54 PRG:1C54 95 A9
LDA #$00 ; CPU:$DC56 PRG:1C56 A9 00
BEQ ObjectPathLoop_DC2E ; CPU:$DC58 PRG:1C58 F0 D4
;------------------------------------------------------------
; ObjectPath_DC5A
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ObjectPath_DC5A:
LDA #$01 ; CPU:$DC5A PRG:1C5A A9 01
STA $0E ; CPU:$DC5C PRG:1C5C 85 0E
LDA #$40 ; CPU:$DC5E PRG:1C5E A9 40
STA $00 ; CPU:$DC60 PRG:1C60 85 00
LDA #$04 ; CPU:$DC62 PRG:1C62 A9 04
STA $01 ; CPU:$DC64 PRG:1C64 85 01
UpdateObjectBufferLoop_DC66:
LDA #$07 ; CPU:$DC66 PRG:1C66 A9 07
STA $0F ; CPU:$DC68 PRG:1C68 85 0F
LDA #$00 ; CPU:$DC6A PRG:1C6A A9 00
STA $02 ; CPU:$DC6C PRG:1C6C 85 02
LDA #$06 ; CPU:$DC6E PRG:1C6E A9 06
STA $03 ; CPU:$DC70 PRG:1C70 85 03
ObjectPathLoop_DC72:
JSR ProcessObjectStateRoutine_D970 ; CPU:$DC72 PRG:1C72 20 70 D9
BNE ObjectPathLoop_DC8A ; CPU:$DC75 PRG:1C75 D0 13
LDY #$00 ; CPU:$DC77 PRG:1C77 A0 00
LDA ($02),Y ; CPU:$DC79 PRG:1C79 B1 02
BMI ObjectPathOnNegative_DC9E ; CPU:$DC7B PRG:1C7B 30 21
BNE ObjectPathLoop_DC8A ; CPU:$DC7D PRG:1C7D D0 0B
JSR ProcessResourceStateRoutine_F71C ; CPU:$DC7F PRG:1C7F 20 1C F7
BCC ObjectPathLoop_DC8A ; CPU:$DC82 PRG:1C82 90 06
LDY #$10 ; CPU:$DC84 PRG:1C84 A0 10
LDA ($02),Y ; CPU:$DC86 PRG:1C86 B1 02
BEQ UpdateObjectBufferOnZero_DCBB ; CPU:$DC88 PRG:1C88 F0 31
ObjectPathLoop_DC8A:
LDX #$02 ; CPU:$DC8A PRG:1C8A A2 02
JSR RunGameTaskRoutine_CBD3 ; CPU:$DC8C PRG:1C8C 20 D3 CB
BPL ObjectPathLoop_DC72 ; CPU:$DC8F PRG:1C8F 10 E1
LDA #$00 ; CPU:$DC91 PRG:1C91 A9 00
STA $00 ; CPU:$DC93 PRG:1C93 85 00
LDA #$04 ; CPU:$DC95 PRG:1C95 A9 04
STA $01 ; CPU:$DC97 PRG:1C97 85 01
DEC $0E ; CPU:$DC99 PRG:1C99 C6 0E
BPL UpdateObjectBufferLoop_DC66 ; CPU:$DC9B PRG:1C9B 10 C9
RTS ; CPU:$DC9D PRG:1C9D 60
ObjectPathOnNegative_DC9E:
INY ; CPU:$DC9E PRG:1C9E C8
LDA ($02),Y ; CPU:$DC9F PRG:1C9F B1 02
BEQ ObjectPathLoop_DC8A ; CPU:$DCA1 PRG:1CA1 F0 E7
DEY ; CPU:$DCA3 PRG:1CA3 88
LDA #$00 ; CPU:$DCA4 PRG:1CA4 A9 00
STA ($02),Y ; CPU:$DCA6 PRG:1CA6 91 02
JSR ProcessResourceStateRoutine_F71C ; CPU:$DCA8 PRG:1CA8 20 1C F7
LDY #$00 ; CPU:$DCAB PRG:1CAB A0 00
LDA #$80 ; CPU:$DCAD PRG:1CAD A9 80
STA ($02),Y ; CPU:$DCAF PRG:1CAF 91 02
BCC ObjectPathLoop_DC8A ; CPU:$DCB1 PRG:1CB1 90 D7
LDA #$04 ; CPU:$DCB3 PRG:1CB3 A9 04
LDY #$10 ; CPU:$DCB5 PRG:1CB5 A0 10
STA ($02),Y ; CPU:$DCB7 PRG:1CB7 91 02
BNE ObjectPathLoop_DC8A ; CPU:$DCB9 PRG:1CB9 D0 CF
UpdateObjectBufferOnZero_DCBB:
LDY #$10 ; CPU:$DCBB PRG:1CBB A0 10
LDA #$28 ; CPU:$DCBD PRG:1CBD A9 28
STA ($02),Y ; CPU:$DCBF PRG:1CBF 91 02
LDY #$05 ; CPU:$DCC1 PRG:1CC1 A0 05
LDA ($02),Y ; CPU:$DCC3 PRG:1CC3 B1 02
TAX ; CPU:$DCC5 PRG:1CC5 AA
BEQ ObjectPathOnZero_DCEA ; CPU:$DCC6 PRG:1CC6 F0 22
DEX ; CPU:$DCC8 PRG:1CC8 CA
BEQ ObjectPathOnZero_DD08 ; CPU:$DCC9 PRG:1CC9 F0 3D
LDA #$03 ; CPU:$DCCB PRG:1CCB A9 03
LDY #$15 ; CPU:$DCCD PRG:1CCD A0 15
DEX ; CPU:$DCCF PRG:1CCF CA
BEQ ObjectPathOnZero_DCD6 ; CPU:$DCD0 PRG:1CD0 F0 04
LDA #$02 ; CPU:$DCD2 PRG:1CD2 A9 02
LDY #$08 ; CPU:$DCD4 PRG:1CD4 A0 08
ObjectPathOnZero_DCD6:
STY $00 ; CPU:$DCD6 PRG:1CD6 84 00
LDY #$11 ; CPU:$DCD8 PRG:1CD8 A0 11
STA ($02),Y ; CPU:$DCDA PRG:1CDA 91 02
LDA $8D ; CPU:$DCDC PRG:1CDC A5 8D
BNE ObjectPathOnNonZero_DCE9 ; CPU:$DCDE PRG:1CDE D0 09
LDA $0E ; CPU:$DCE0 PRG:1CE0 A5 0E
ORA #$08 ; CPU:$DCE2 PRG:1CE2 09 08
STA $01 ; CPU:$DCE4 PRG:1CE4 85 01
JSR ProcessResourceStateRoutine_F40C ; CPU:$DCE6 PRG:1CE6 20 0C F4
ObjectPathOnNonZero_DCE9:
RTS ; CPU:$DCE9 PRG:1CE9 60
ObjectPathOnZero_DCEA:
JSR ProcessObjectStateRoutine_D1CE ; CPU:$DCEA PRG:1CEA 20 CE D1
INY ; CPU:$DCED PRG:1CED C8
LDX #$08 ; CPU:$DCEE PRG:1CEE A2 08
JSR UpdateObjectBufferRoutine_D1AE ; CPU:$DCF0 PRG:1CF0 20 AE D1
LDA $0E ; CPU:$DCF3 PRG:1CF3 A5 0E
EOR #$01 ; CPU:$DCF5 PRG:1CF5 49 01
TAY ; CPU:$DCF7 PRG:1CF7 A8
LDA #$30 ; CPU:$DCF8 PRG:1CF8 A9 30
STA a:$0075,Y ; CPU:$DCFA PRG:1CFA 99 75 00
STA $77 ; CPU:$DCFD PRG:1CFD 85 77
LDX $D25D,Y ; CPU:$DCFF PRG:1CFF BE 5D D2
INY ; CPU:$DD02 PRG:1D02 C8
INY ; CPU:$DD03 PRG:1D03 C8
JSR UpdateObjectBufferRoutine_D1AE ; CPU:$DD04 PRG:1D04 20 AE D1
RTS ; CPU:$DD07 PRG:1D07 60
ObjectPathOnZero_DD08:
LDX $0E ; CPU:$DD08 PRG:1D08 A6 0E
INC $80,X ; CPU:$DD0A PRG:1D0A F6 80
JSR ProcessObjectStateRoutine_D42C ; CPU:$DD0C PRG:1D0C 20 2C D4
RTS ; CPU:$DD0F PRG:1D0F 60
;------------------------------------------------------------
; ObjectPath_DD10
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ObjectPath_DD10:
LDA $77 ; CPU:$DD10 PRG:1D10 A5 77
CMP #$01 ; CPU:$DD12 PRG:1D12 C9 01
BNE ObjectPathOnNonZero_DD20 ; CPU:$DD14 PRG:1D14 D0 0A
DEC $77 ; CPU:$DD16 PRG:1D16 C6 77
JSR ProcessObjectStateRoutine_D1CE ; CPU:$DD18 PRG:1D18 20 CE D1
LDX #$08 ; CPU:$DD1B PRG:1D1B A2 08
JSR UpdateObjectBufferRoutine_D1AE ; CPU:$DD1D PRG:1D1D 20 AE D1
ObjectPathOnNonZero_DD20:
LDA $75 ; CPU:$DD20 PRG:1D20 A5 75
CMP #$01 ; CPU:$DD22 PRG:1D22 C9 01
BNE ObjectPathOnNonZero_DD2F ; CPU:$DD24 PRG:1D24 D0 09
DEC $75 ; CPU:$DD26 PRG:1D26 C6 75
LDY #$00 ; CPU:$DD28 PRG:1D28 A0 00
LDX #$10 ; CPU:$DD2A PRG:1D2A A2 10
JSR UpdateObjectBufferRoutine_D1AE ; CPU:$DD2C PRG:1D2C 20 AE D1
ObjectPathOnNonZero_DD2F:
LDA $76 ; CPU:$DD2F PRG:1D2F A5 76
CMP #$01 ; CPU:$DD31 PRG:1D31 C9 01
BNE ObjectPathOnNonZero_DD3E ; CPU:$DD33 PRG:1D33 D0 09
DEC $76 ; CPU:$DD35 PRG:1D35 C6 76
LDY #$01 ; CPU:$DD37 PRG:1D37 A0 01
LDX #$14 ; CPU:$DD39 PRG:1D39 A2 14
JSR UpdateObjectBufferRoutine_D1AE ; CPU:$DD3B PRG:1D3B 20 AE D1
ObjectPathOnNonZero_DD3E:
LDA $56 ; CPU:$DD3E PRG:1D3E A5 56
CMP #$01 ; CPU:$DD40 PRG:1D40 C9 01
BNE ObjectPathOnNonZero_DD5A ; CPU:$DD42 PRG:1D42 D0 16
LDA $75 ; CPU:$DD44 PRG:1D44 A5 75
BNE ObjectPathOnNonZero_DD4F ; CPU:$DD46 PRG:1D46 D0 07
;------------------------------------------------------------
; ProcessObjectStateDispatch_DD48
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessObjectStateDispatch_DD48:
LDY #$00 ; CPU:$DD48 PRG:1D48 A0 00
LDX #$10 ; CPU:$DD4A PRG:1D4A A2 10
JSR UpdateObjectBufferRoutine_D1AE ; CPU:$DD4C PRG:1D4C 20 AE D1
ObjectPathOnNonZero_DD4F:
LDA $76 ; CPU:$DD4F PRG:1D4F A5 76
BNE ObjectPathOnNonZero_DD5A ; CPU:$DD51 PRG:1D51 D0 07
LDY #$01 ; CPU:$DD53 PRG:1D53 A0 01
LDX #$14 ; CPU:$DD55 PRG:1D55 A2 14
JSR UpdateObjectBufferRoutine_D1AE ; CPU:$DD57 PRG:1D57 20 AE D1
ObjectPathOnNonZero_DD5A:
RTS ; CPU:$DD5A PRG:1D5A 60
;------------------------------------------------------------
; UpdateObjectBufferRoutine_DD5B
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
UpdateObjectBufferRoutine_DD5B:
STX $06 ; CPU:$DD5B PRG:1D5B 86 06
LDA #$B0 ; CPU:$DD5D PRG:1D5D A9 B0
STA $00 ; CPU:$DD5F PRG:1D5F 85 00
LDA #$03 ; CPU:$DD61 PRG:1D61 A9 03
STA $01 ; CPU:$DD63 PRG:1D63 85 01
LDX #$03 ; CPU:$DD65 PRG:1D65 A2 03
UpdateObjectBufferLoop_DD67:
JSR ProcessObjectStateRoutine_DDB2 ; CPU:$DD67 PRG:1D67 20 B2 DD
BMI ObjectPathOnNegative_DD8E ; CPU:$DD6A PRG:1D6A 30 22
LDY #$00 ; CPU:$DD6C PRG:1D6C A0 00
LDA ($00),Y ; CPU:$DD6E PRG:1D6E B1 00
BEQ UpdateObjectBufferLoop_DD67 ; CPU:$DD70 PRG:1D70 F0 F5
LDA #$00 ; CPU:$DD72 PRG:1D72 A9 00
STA ($00),Y ; CPU:$DD74 PRG:1D74 91 00
LDA $04 ; CPU:$DD76 PRG:1D76 A5 04
LDY #$01 ; CPU:$DD78 PRG:1D78 A0 01
STA ($00),Y ; CPU:$DD7A PRG:1D7A 91 00
LDA $05 ; CPU:$DD7C PRG:1D7C A5 05
LDY #$03 ; CPU:$DD7E PRG:1D7E A0 03
STA ($00),Y ; CPU:$DD80 PRG:1D80 91 00
LDA $06 ; CPU:$DD82 PRG:1D82 A5 06
LDY #$05 ; CPU:$DD84 PRG:1D84 A0 05
STA ($00),Y ; CPU:$DD86 PRG:1D86 91 00
LDA #$20 ; CPU:$DD88 PRG:1D88 A9 20
LDY #$0C ; CPU:$DD8A PRG:1D8A A0 0C
STA ($00),Y ; CPU:$DD8C PRG:1D8C 91 00
ObjectPathOnNegative_DD8E:
RTS ; CPU:$DD8E PRG:1D8E 60
;------------------------------------------------------------
; UpdateObjectBuffer_DD8F
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
UpdateObjectBuffer_DD8F:
LDA #$C0 ; CPU:$DD8F PRG:1D8F A9 C0
STA $00 ; CPU:$DD91 PRG:1D91 85 00
LDA #$03 ; CPU:$DD93 PRG:1D93 A9 03
STA $01 ; CPU:$DD95 PRG:1D95 85 01
LDX #$02 ; CPU:$DD97 PRG:1D97 A2 02
ObjectPathLoop_DD99:
LDY #$0C ; CPU:$DD99 PRG:1D99 A0 0C
LDA ($00),Y ; CPU:$DD9B PRG:1D9B B1 00
BEQ ObjectPathContinue_DDAC ; CPU:$DD9D PRG:1D9D F0 0D
SEC ; CPU:$DD9F PRG:1D9F 38
SBC #$01 ; CPU:$DDA0 PRG:1DA0 E9 01
STA ($00),Y ; CPU:$DDA2 PRG:1DA2 91 00
BNE ObjectPathContinue_DDAC ; CPU:$DDA4 PRG:1DA4 D0 06
LDY #$00 ; CPU:$DDA6 PRG:1DA6 A0 00
LDA #$01 ; CPU:$DDA8 PRG:1DA8 A9 01
STA ($00),Y ; CPU:$DDAA PRG:1DAA 91 00
ObjectPathContinue_DDAC:
JSR ProcessObjectStateRoutine_DDB2 ; CPU:$DDAC PRG:1DAC 20 B2 DD
BPL ObjectPathLoop_DD99 ; CPU:$DDAF PRG:1DAF 10 E8
RTS ; CPU:$DDB1 PRG:1DB1 60
;------------------------------------------------------------
; ProcessObjectStateRoutine_DDB2
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessObjectStateRoutine_DDB2:
CLC ; CPU:$DDB2 PRG:1DB2 18
LDA #$10 ; CPU:$DDB3 PRG:1DB3 A9 10
ADC $00 ; CPU:$DDB5 PRG:1DB5 65 00
STA $00 ; CPU:$DDB7 PRG:1DB7 85 00
LDA #$00 ; CPU:$DDB9 PRG:1DB9 A9 00
ADC $01 ; CPU:$DDBB PRG:1DBB 65 01
STA $01 ; CPU:$DDBD PRG:1DBD 85 01
DEX ; CPU:$DDBF PRG:1DBF CA
RTS ; CPU:$DDC0 PRG:1DC0 60
;------------------------------------------------------------
; ObjectPath_DDC1
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ObjectPath_DDC1:
LDA $8D ; CPU:$DDC1 PRG:1DC1 A5 8D
BEQ ObjectPathOnZero_DDF8 ; CPU:$DDC3 PRG:1DC3 F0 33
LDX #$01 ; CPU:$DDC5 PRG:1DC5 A2 01
ObjectPathLoop_DDC7:
LDA $70,X ; CPU:$DDC7 PRG:1DC7 B5 70
BNE ObjectPathOnNonZero_DDE3 ; CPU:$DDC9 PRG:1DC9 D0 18
LDA $10,X ; CPU:$DDCB PRG:1DCB B5 10
AND #$07 ; CPU:$DDCD PRG:1DCD 29 07
ORA #$02 ; CPU:$DDCF PRG:1DCF 09 02
STA $70,X ; CPU:$DDD1 PRG:1DD1 95 70
LDA $12,X ; CPU:$DDD3 PRG:1DD3 B5 12
AND #$0F ; CPU:$DDD5 PRG:1DD5 29 0F
TAY ; CPU:$DDD7 PRG:1DD7 A8
LDA #$00 ; CPU:$DDD8 PRG:1DD8 A9 00
SEC ; CPU:$DDDA PRG:1DDA 38
ObjectPathLoop_DDDB:
ROL A ; CPU:$DDDB PRG:1DDB 2A
DEY ; CPU:$DDDC PRG:1DDC 88
BNE ObjectPathLoop_DDDB ; CPU:$DDDD PRG:1DDD D0 FC
AND #$0F ; CPU:$DDDF PRG:1DDF 29 0F
STA $D8,X ; CPU:$DDE1 PRG:1DE1 95 D8
ObjectPathOnNonZero_DDE3:
LDA $44,X ; CPU:$DDE3 PRG:1DE3 B5 44
AND #$30 ; CPU:$DDE5 PRG:1DE5 29 30
ORA $D8,X ; CPU:$DDE7 PRG:1DE7 15 D8
STA $44,X ; CPU:$DDE9 PRG:1DE9 95 44
LDY $14,X ; CPU:$DDEB PRG:1DEB B4 14
CPY #$08 ; CPU:$DDED PRG:1DED C0 08
BCS ObjectPathOnCarry_DDF3 ; CPU:$DDEF PRG:1DEF B0 02
ORA #$80 ; CPU:$DDF1 PRG:1DF1 09 80
ObjectPathOnCarry_DDF3:
STA $46,X ; CPU:$DDF3 PRG:1DF3 95 46
DEX ; CPU:$DDF5 PRG:1DF5 CA
BPL ObjectPathLoop_DDC7 ; CPU:$DDF6 PRG:1DF6 10 CF
ObjectPathOnZero_DDF8:
RTS ; CPU:$DDF8 PRG:1DF8 60
.byte $28, $28, $20, $23, $00, $1F, $00, $A0, $00, $FF, $00, $FF, $01, $FF, $20, $E0 ; CPU:$DDF9 PRG:1DF9 0B
.byte $20, $20, $01, $01, $1E, $1E, $20, $20, $20, $20, $1E, $1E ; CPU:$DE09 PRG:1E09 0B
;------------------------------------------------------------
; ObjectPath_DE15
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ObjectPath_DE15:
LDX #$03 ; CPU:$DE15 PRG:1E15 A2 03
ObjectPathLoop_DE17:
LDA $DE0D,X ; CPU:$DE17 PRG:1E17 BD 0D DE
STA $04 ; CPU:$DE1A PRG:1E1A 85 04
LDA $DDFD,X ; CPU:$DE1C PRG:1E1C BD FD DD
STA $00 ; CPU:$DE1F PRG:1E1F 85 00
LDA $DDF9,X ; CPU:$DE21 PRG:1E21 BD F9 DD
STA $01 ; CPU:$DE24 PRG:1E24 85 01
UpdateObjectBufferLoop_DE26:
LDY $DE11,X ; CPU:$DE26 PRG:1E26 BC 11 DE
LDA WorkPtr0Lo ; CPU:$DE29 PRG:1E29 A5 00
STA $02 ; CPU:$DE2B PRG:1E2B 85 02
LDA WorkPtr0Hi ; CPU:$DE2D PRG:1E2D A5 01
STA $03 ; CPU:$DE2F PRG:1E2F 85 03
ObjectPathLoop_DE31:
JSR UpdateObjectBufferRoutine_DE81 ; CPU:$DE31 PRG:1E31 20 81 DE
CMP #$4E ; CPU:$DE34 PRG:1E34 C9 4E
BEQ UpdateObjectBufferOnZero_DE3C ; CPU:$DE36 PRG:1E36 F0 04
CMP #$24 ; CPU:$DE38 PRG:1E38 C9 24
BNE ObjectPathOnNonZero_DE4D ; CPU:$DE3A PRG:1E3A D0 11
UpdateObjectBufferOnZero_DE3C:
PHA ; CPU:$DE3C PRG:1E3C 48
LDA $03 ; CPU:$DE3D PRG:1E3D A5 03
STA PPUADDR ; CPU:$DE3F PRG:1E3F 8D 06 20
LDA WorkPtr1Lo ; CPU:$DE42 PRG:1E42 A5 02
STA PPUADDR ; CPU:$DE44 PRG:1E44 8D 06 20
LDA #$FF ; CPU:$DE47 PRG:1E47 A9 FF
STA PPUDATA ; CPU:$DE49 PRG:1E49 8D 07 20
PLA ; CPU:$DE4C PRG:1E4C 68
ObjectPathOnNonZero_DE4D:
CMP #$4E ; CPU:$DE4D PRG:1E4D C9 4E
BCS UpdateObjectBufferOnCarry_DE55 ; CPU:$DE4F PRG:1E4F B0 04
CMP #$30 ; CPU:$DE51 PRG:1E51 C9 30
BCS ObjectPathOnCarry_DE6B ; CPU:$DE53 PRG:1E53 B0 16
UpdateObjectBufferOnCarry_DE55:
CMP #$B9 ; CPU:$DE55 PRG:1E55 C9 B9
BCS ObjectPathOnCarry_DE6B ; CPU:$DE57 PRG:1E57 B0 12
CLC ; CPU:$DE59 PRG:1E59 18
LDA $DE05,X ; CPU:$DE5A PRG:1E5A BD 05 DE
ADC $02 ; CPU:$DE5D PRG:1E5D 65 02
STA $02 ; CPU:$DE5F PRG:1E5F 85 02
LDA $DE01,X ; CPU:$DE61 PRG:1E61 BD 01 DE
ADC $03 ; CPU:$DE64 PRG:1E64 65 03
STA $03 ; CPU:$DE66 PRG:1E66 85 03
DEY ; CPU:$DE68 PRG:1E68 88
BNE ObjectPathLoop_DE31 ; CPU:$DE69 PRG:1E69 D0 C6
ObjectPathOnCarry_DE6B:
CLC ; CPU:$DE6B PRG:1E6B 18
LDA $DE09,X ; CPU:$DE6C PRG:1E6C BD 09 DE
ADC $00 ; CPU:$DE6F PRG:1E6F 65 00
STA $00 ; CPU:$DE71 PRG:1E71 85 00
LDA #$00 ; CPU:$DE73 PRG:1E73 A9 00
ADC $01 ; CPU:$DE75 PRG:1E75 65 01
STA $01 ; CPU:$DE77 PRG:1E77 85 01
DEC $04 ; CPU:$DE79 PRG:1E79 C6 04
BNE UpdateObjectBufferLoop_DE26 ; CPU:$DE7B PRG:1E7B D0 A9
DEX ; CPU:$DE7D PRG:1E7D CA
BPL ObjectPathLoop_DE17 ; CPU:$DE7E PRG:1E7E 10 97
RTS ; CPU:$DE80 PRG:1E80 60
;------------------------------------------------------------
; UpdateObjectBufferRoutine_DE81
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
UpdateObjectBufferRoutine_DE81:
LDA PPUSTATUS ; CPU:$DE81 PRG:1E81 AD 02 20
LDA $03 ; CPU:$DE84 PRG:1E84 A5 03
STA PPUADDR ; CPU:$DE86 PRG:1E86 8D 06 20
LDA WorkPtr1Lo ; CPU:$DE89 PRG:1E89 A5 02
;------------------------------------------------------------
; ProcessObjectStateRoutine_DE8B
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessObjectStateRoutine_DE8B:
STA PPUADDR ; CPU:$DE8B PRG:1E8B 8D 06 20
LDA PPUDATA ; CPU:$DE8E PRG:1E8E AD 07 20
LDA PPUDATA ; CPU:$DE91 PRG:1E91 AD 07 20
RTS ; CPU:$DE94 PRG:1E94 60
.byte $30, $35, $31, $4A, $3A, $3E, $4C, $3F, $33, $4B, $34, $38, $4D, $40, $3D, $41 ; CPU:$DE95 PRG:1E95 0B
.byte $37, $35, $3B, $3C, $3A, $49, $48, $36, $45, $47, $46, $38, $42, $43, $3D, $44 ; CPU:$DEA5 PRG:1EA5 0B
.byte $4E, $FA, $FA, $4E, $6E, $86, $86, $6F, $FC, $FC, $FC, $FC, $4F, $F9, $F9, $4F ; CPU:$DEB5 PRG:1EB5 0B
.byte $4E, $FB, $FB, $4E, $60, $7C, $7C, $61, $FC, $FC, $FC, $FC, $4F, $F9, $F9, $4F ; CPU:$DEC5 PRG:1EC5 0B
ObjectPathLoop_DED5:
AND #$F0 ; CPU:$DED5 PRG:1ED5 29 F0
PHA ; CPU:$DED7 PRG:1ED7 48
CMP #$C0 ; CPU:$DED8 PRG:1ED8 C9 C0
LDA $40 ; CPU:$DEDA PRG:1EDA A5 40
AND #$FB ; CPU:$DEDC PRG:1EDC 29 FB
BCC UpdateObjectBufferOnNoCarry_DEE2 ; CPU:$DEDE PRG:1EDE 90 02
ORA #$04 ; CPU:$DEE0 PRG:1EE0 09 04
UpdateObjectBufferOnNoCarry_DEE2:
STA $2000 ; CPU:$DEE2 PRG:1EE2 8D 00 20
STA $40 ; CPU:$DEE5 PRG:1EE5 85 40
LDA ($00),Y ; CPU:$DEE7 PRG:1EE7 B1 00
AND #$0F ; CPU:$DEE9 PRG:1EE9 29 0F
ORA #$20 ; CPU:$DEEB PRG:1EEB 09 20
STA PPUADDR ; CPU:$DEED PRG:1EED 8D 06 20
STA $03 ; CPU:$DEF0 PRG:1EF0 85 03
INY ; CPU:$DEF2 PRG:1EF2 C8
LDA ($00),Y ; CPU:$DEF3 PRG:1EF3 B1 00
STA PPUADDR ; CPU:$DEF5 PRG:1EF5 8D 06 20
STA $02 ; CPU:$DEF8 PRG:1EF8 85 02
PLA ; CPU:$DEFA PRG:1EFA 68
LSR A ; CPU:$DEFB PRG:1EFB 4A
LSR A ; CPU:$DEFC PRG:1EFC 4A
TAY ; CPU:$DEFD PRG:1EFD A8
LDA $DE95,Y ; CPU:$DEFE PRG:1EFE B9 95 DE
STA PPUDATA ; CPU:$DF01 PRG:1F01 8D 07 20
INY ; CPU:$DF04 PRG:1F04 C8
LDA $DE95,Y ; CPU:$DF05 PRG:1F05 B9 95 DE
STA PPUDATA ; CPU:$DF08 PRG:1F08 8D 07 20
CPY #$20 ; CPU:$DF0B PRG:1F0B C0 20
BCS ObjectPathOnCarry_DF1F ; CPU:$DF0D PRG:1F0D B0 10
CLC ; CPU:$DF0F PRG:1F0F 18
LDA #$20 ; CPU:$DF10 PRG:1F10 A9 20
ADC $02 ; CPU:$DF12 PRG:1F12 65 02
TAX ; CPU:$DF14 PRG:1F14 AA
LDA #$00 ; CPU:$DF15 PRG:1F15 A9 00
ADC $03 ; CPU:$DF17 PRG:1F17 65 03
STA PPUADDR ; CPU:$DF19 PRG:1F19 8D 06 20
STX PPUADDR ; CPU:$DF1C PRG:1F1C 8E 06 20
ObjectPathOnCarry_DF1F:
INY ; CPU:$DF1F PRG:1F1F C8
LDA $DE95,Y ; CPU:$DF20 PRG:1F20 B9 95 DE
STA PPUDATA ; CPU:$DF23 PRG:1F23 8D 07 20
INY ; CPU:$DF26 PRG:1F26 C8
LDA $DE95,Y ; CPU:$DF27 PRG:1F27 B9 95 DE
STA PPUDATA ; CPU:$DF2A PRG:1F2A 8D 07 20
LDY #$02 ; CPU:$DF2D PRG:1F2D A0 02
;------------------------------------------------------------
; ObjectPath_DF2F
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ObjectPath_DF2F:
LDX PPUSTATUS ; CPU:$DF2F PRG:1F2F AE 02 20
TYA ; CPU:$DF32 PRG:1F32 98
CLC ; CPU:$DF33 PRG:1F33 18
ADC $00 ; CPU:$DF34 PRG:1F34 65 00
STA $00 ; CPU:$DF36 PRG:1F36 85 00
LDA #$00 ; CPU:$DF38 PRG:1F38 A9 00
ADC $01 ; CPU:$DF3A PRG:1F3A 65 01
STA $01 ; CPU:$DF3C PRG:1F3C 85 01
LDY #$00 ; CPU:$DF3E PRG:1F3E A0 00
LDA ($00),Y ; CPU:$DF40 PRG:1F40 B1 00
CMP #$FF ; CPU:$DF42 PRG:1F42 C9 FF
BNE ObjectPathLoop_DED5 ; CPU:$DF44 PRG:1F44 D0 8F
RTS ; CPU:$DF46 PRG:1F46 60
.byte $00, $02, $40, $42, $FC, $F3, $CF, $3F, $01, $04, $10, $40 ; CPU:$DF47 PRG:1F47 0B
ObjectPathLoop_DF53:
LDA $42 ; CPU:$DF53 PRG:1F53 A5 42
STA PPUSCROLL ; CPU:$DF55 PRG:1F55 8D 05 20
LDA $43 ; CPU:$DF58 PRG:1F58 A5 43
STA PPUSCROLL ; CPU:$DF5A PRG:1F5A 8D 05 20
RTS ; CPU:$DF5D PRG:1F5D 60
;------------------------------------------------------------
; UpdateObjectBuffer_DF5E
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
UpdateObjectBuffer_DF5E:
LDA #$1F ; CPU:$DF5E PRG:1F5E A9 1F
STA $03 ; CPU:$DF60 PRG:1F60 85 03
LDA #$FF ; CPU:$DF62 PRG:1F62 A9 FF
STA $02 ; CPU:$DF64 PRG:1F64 85 02
UpdateObjectBufferDispatch_DF66:
CLC ; CPU:$DF66 PRG:1F66 18
LDA #$01 ; CPU:$DF67 PRG:1F67 A9 01
ADC $02 ; CPU:$DF69 PRG:1F69 65 02
STA $02 ; CPU:$DF6B PRG:1F6B 85 02
LDA #$00 ; CPU:$DF6D PRG:1F6D A9 00
ADC $03 ; CPU:$DF6F PRG:1F6F 65 03
STA $03 ; CPU:$DF71 PRG:1F71 85 03
CMP #$23 ; CPU:$DF73 PRG:1F73 C9 23
BNE ObjectPathOnNonZero_DF7D ; CPU:$DF75 PRG:1F75 D0 06
LDA WorkPtr1Lo ; CPU:$DF77 PRG:1F77 A5 02
CMP #$C0 ; CPU:$DF79 PRG:1F79 C9 C0
BEQ ObjectPathLoop_DF53 ; CPU:$DF7B PRG:1F7B F0 D6
ObjectPathOnNonZero_DF7D:
JSR UpdateObjectBufferRoutine_DE81 ; CPU:$DF7D PRG:1F7D 20 81 DE
LDY #$00 ; CPU:$DF80 PRG:1F80 A0 00
CMP #$4E ; CPU:$DF82 PRG:1F82 C9 4E
BEQ UpdateObjectBufferContinue_DFAC ; CPU:$DF84 PRG:1F84 F0 26
CMP #$FA ; CPU:$DF86 PRG:1F86 C9 FA
BEQ UpdateObjectBufferContinue_DFAC ; CPU:$DF88 PRG:1F88 F0 22
CMP #$FB ; CPU:$DF8A PRG:1F8A C9 FB
BEQ UpdateObjectBufferContinue_DFAC ; CPU:$DF8C PRG:1F8C F0 1E
INY ; CPU:$DF8E PRG:1F8E C8
CMP #$24 ; CPU:$DF8F PRG:1F8F C9 24
BEQ UpdateObjectBufferDispatch_DF66 ; CPU:$DF91 PRG:1F91 F0 D3
CMP #$4E ; CPU:$DF93 PRG:1F93 C9 4E
BCC UpdateObjectBufferContinue_DFAC ; CPU:$DF95 PRG:1F95 90 15
CMP #$FF ; CPU:$DF97 PRG:1F97 C9 FF
BEQ UpdateObjectBufferContinue_DFAC ; CPU:$DF99 PRG:1F99 F0 11
CMP #$CC ; CPU:$DF9B PRG:1F9B C9 CC
BCS ObjectPathOnCarry_DFA3 ; CPU:$DF9D PRG:1F9D B0 04
CMP #$AB ; CPU:$DF9F PRG:1F9F C9 AB
BCS UpdateObjectBufferContinue_DFAC ; CPU:$DFA1 PRG:1FA1 B0 09
ObjectPathOnCarry_DFA3:
INY ; CPU:$DFA3 PRG:1FA3 C8
CMP #$60 ; CPU:$DFA4 PRG:1FA4 C9 60
BCS UpdateObjectBufferDispatch_DF66 ; CPU:$DFA6 PRG:1FA6 B0 BE
CMP #$50 ; CPU:$DFA8 PRG:1FA8 C9 50
BCC UpdateObjectBufferDispatch_DF66 ; CPU:$DFAA PRG:1FAA 90 BA
UpdateObjectBufferContinue_DFAC:
LDA WorkPtr1Lo ; CPU:$DFAC PRG:1FAC A5 02
AND #$1C ; CPU:$DFAE PRG:1FAE 29 1C
LSR A ; CPU:$DFB0 PRG:1FB0 4A
LSR A ; CPU:$DFB1 PRG:1FB1 4A
STA $00 ; CPU:$DFB2 PRG:1FB2 85 00
LDA WorkPtr1Lo ; CPU:$DFB4 PRG:1FB4 A5 02
ASL A ; CPU:$DFB6 PRG:1FB6 0A
LDA $03 ; CPU:$DFB7 PRG:1FB7 A5 03
AND #$03 ; CPU:$DFB9 PRG:1FB9 29 03
ROL A ; CPU:$DFBB PRG:1FBB 2A
ASL A ; CPU:$DFBC PRG:1FBC 0A
ASL A ; CPU:$DFBD PRG:1FBD 0A
ASL A ; CPU:$DFBE PRG:1FBE 0A
CLC ; CPU:$DFBF PRG:1FBF 18
ADC $00 ; CPU:$DFC0 PRG:1FC0 65 00
CLC ; CPU:$DFC2 PRG:1FC2 18
ADC #$C0 ; CPU:$DFC3 PRG:1FC3 69 C0
STA $00 ; CPU:$DFC5 PRG:1FC5 85 00
LDA #$23 ; CPU:$DFC7 PRG:1FC7 A9 23
STA $01 ; CPU:$DFC9 PRG:1FC9 85 01
LDA WorkPtr1Lo ; CPU:$DFCB PRG:1FCB A5 02
AND #$42 ; CPU:$DFCD PRG:1FCD 29 42
LDX #$FF ; CPU:$DFCF PRG:1FCF A2 FF
ObjectPathLoop_DFD1:
INX ; CPU:$DFD1 PRG:1FD1 E8
CMP $DF47,X ; CPU:$DFD2 PRG:1FD2 DD 47 DF
BNE ObjectPathLoop_DFD1 ; CPU:$DFD5 PRG:1FD5 D0 FA
LDA $DF4F,X ; CPU:$DFD7 PRG:1FD7 BD 4F DF
CPY #$00 ; CPU:$DFDA PRG:1FDA C0 00
BEQ ObjectPathOnZero_DFE6 ; CPU:$DFDC PRG:1FDC F0 08
ASL A ; CPU:$DFDE PRG:1FDE 0A
CPY #$01 ; CPU:$DFDF PRG:1FDF C0 01
BEQ ObjectPathOnZero_DFE6 ; CPU:$DFE1 PRG:1FE1 F0 03
ORA $DF4F,X ; CPU:$DFE3 PRG:1FE3 1D 4F DF
ObjectPathOnZero_DFE6:
STA $04 ; CPU:$DFE6 PRG:1FE6 85 04
LDY $01 ; CPU:$DFE8 PRG:1FE8 A4 01
STY PPUADDR ; CPU:$DFEA PRG:1FEA 8C 06 20
LDA WorkPtr0Lo ; CPU:$DFED PRG:1FED A5 00
JSR ProcessObjectStateRoutine_DE8B ; CPU:$DFEF PRG:1FEF 20 8B DE
AND $DF4B,X ; CPU:$DFF2 PRG:1FF2 3D 4B DF
ORA $04 ; CPU:$DFF5 PRG:1FF5 05 04
STY PPUADDR ; CPU:$DFF7 PRG:1FF7 8C 06 20
LDY $00 ; CPU:$DFFA PRG:1FFA A4 00
STY PPUADDR ; CPU:$DFFC PRG:1FFC 8C 06 20
STA PPUDATA ; CPU:$DFFF PRG:1FFF 8D 07 20
JMP UpdateObjectBufferDispatch_DF66 ; CPU:$E002 PRG:2002 4C 66 DF
.byte $00, $00, $01, $01, $01, $01, $02, $02, $02, $03, $03, $03, $03, $04, $04, $04 ; CPU:$E005 PRG:2005 0B
.byte $05, $05, $05, $05, $06, $06, $06, $06, $07, $07, $07, $07, $08, $08, $08, $08 ; CPU:$E015 PRG:2015 0B
.byte $08, $09, $09, $09, $09, $09, $0A, $0A, $0A, $0A, $0A, $0A, $0B, $0B, $0B, $0B ; CPU:$E025 PRG:2025 0B
.byte $0B, $0B, $0B, $0B, $0B, $0C, $0C, $0C, $0C, $0C, $0C, $0C, $0C, $0C, $0C, $0C ; CPU:$E035 PRG:2035 0B
;------------------------------------------------------------
; ProcessObjectStateRoutine_E045
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessObjectStateRoutine_E045:
LDX #$00 ; CPU:$E045 PRG:2045 A2 00
CMP #$80 ; CPU:$E047 PRG:2047 C9 80
BCC ObjectPathOnNoCarry_E04F ; CPU:$E049 PRG:2049 90 04
SBC #$80 ; CPU:$E04B PRG:204B E9 80
LDX #$01 ; CPU:$E04D PRG:204D A2 01
ObjectPathOnNoCarry_E04F:
CMP #$40 ; CPU:$E04F PRG:204F C9 40
BCC ObjectPathOnNoCarry_E059 ; CPU:$E051 PRG:2051 90 06
STA $00 ; CPU:$E053 PRG:2053 85 00
LDA #$7F ; CPU:$E055 PRG:2055 A9 7F
SBC $00 ; CPU:$E057 PRG:2057 E5 00
ObjectPathOnNoCarry_E059:
TAY ; CPU:$E059 PRG:2059 A8
LDA $E005,Y ; CPU:$E05A PRG:205A B9 05 E0
STA $00 ; CPU:$E05D PRG:205D 85 00
DEX ; CPU:$E05F PRG:205F CA
BNE ObjectPathOnNonZero_E069 ; CPU:$E060 PRG:2060 D0 07
SEC ; CPU:$E062 PRG:2062 38
LDA #$00 ; CPU:$E063 PRG:2063 A9 00
SBC $00 ; CPU:$E065 PRG:2065 E5 00
STA $00 ; CPU:$E067 PRG:2067 85 00
ObjectPathOnNonZero_E069:
RTS ; CPU:$E069 PRG:2069 60
;------------------------------------------------------------
; ReadObjectRecordRoutine_E06A
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ReadObjectRecordRoutine_E06A:
LDA $56 ; CPU:$E06A PRG:206A A5 56
BNE ObjectPathContinue_E09B ; CPU:$E06C PRG:206C D0 2D
LDX $0A ; CPU:$E06E PRG:206E A6 0A
LDA $75,X ; CPU:$E070 PRG:2070 B5 75
BNE ObjectPathContinue_E09B ; CPU:$E072 PRG:2072 D0 27
LDY #$1B ; CPU:$E074 PRG:2074 A0 1B
LDA (CurrentObjectPtrLo),Y ; CPU:$E076 PRG:2076 B1 08
CMP #$30 ; CPU:$E078 PRG:2078 C9 30
BCC UpdateObjectRecordOnNoCarry_E080 ; CPU:$E07A PRG:207A 90 04
CMP #$40 ; CPU:$E07C PRG:207C C9 40
BCC ObjectPathContinue_E09B ; CPU:$E07E PRG:207E 90 1B
UpdateObjectRecordOnNoCarry_E080:
LDA $06 ; CPU:$E080 PRG:2080 A5 06
AND #$02 ; CPU:$E082 PRG:2082 29 02
BEQ UpdateObjectRecordOnZero_E09C ; CPU:$E084 PRG:2084 F0 16
CLC ; CPU:$E086 PRG:2086 18
LDY #$14 ; CPU:$E087 PRG:2087 A0 14
LDA (CurrentObjectPtrLo),Y ; CPU:$E089 PRG:2089 B1 08
LDY #$04 ; CPU:$E08B PRG:208B A0 04
ADC (CurrentObjectPtrLo),Y ; CPU:$E08D PRG:208D 71 08
STA (CurrentObjectPtrLo),Y ; CPU:$E08F PRG:208F 91 08
LDY #$13 ; CPU:$E091 PRG:2091 A0 13
LDA (CurrentObjectPtrLo),Y ; CPU:$E093 PRG:2093 B1 08
LDY #$03 ; CPU:$E095 PRG:2095 A0 03
ADC (CurrentObjectPtrLo),Y ; CPU:$E097 PRG:2097 71 08
STA (CurrentObjectPtrLo),Y ; CPU:$E099 PRG:2099 91 08
ObjectPathContinue_E09B:
RTS ; CPU:$E09B PRG:209B 60
UpdateObjectRecordOnZero_E09C:
CLC ; CPU:$E09C PRG:209C 18
LDY #$12 ; CPU:$E09D PRG:209D A0 12
LDA (CurrentObjectPtrLo),Y ; CPU:$E09F PRG:209F B1 08
LDY #$02 ; CPU:$E0A1 PRG:20A1 A0 02
ADC (CurrentObjectPtrLo),Y ; CPU:$E0A3 PRG:20A3 71 08
STA (CurrentObjectPtrLo),Y ; CPU:$E0A5 PRG:20A5 91 08
LDY #$11 ; CPU:$E0A7 PRG:20A7 A0 11
LDA (CurrentObjectPtrLo),Y ; CPU:$E0A9 PRG:20A9 B1 08
LDY #$01 ; CPU:$E0AB PRG:20AB A0 01
ADC (CurrentObjectPtrLo),Y ; CPU:$E0AD PRG:20AD 71 08
STA (CurrentObjectPtrLo),Y ; CPU:$E0AF PRG:20AF 91 08
RTS ; CPU:$E0B1 PRG:20B1 60
;------------------------------------------------------------
; ProcessObjectStateRoutine_E0B2
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessObjectStateRoutine_E0B2:
TAX ; CPU:$E0B2 PRG:20B2 AA
LDA #$FD ; CPU:$E0B3 PRG:20B3 A9 FD
ObjectPathLoop_E0B5:
CLC ; CPU:$E0B5 PRG:20B5 18
ADC #$03 ; CPU:$E0B6 PRG:20B6 69 03
DEX ; CPU:$E0B8 PRG:20B8 CA
BPL ObjectPathLoop_E0B5 ; CPU:$E0B9 PRG:20B9 10 FA
TAX ; CPU:$E0BB PRG:20BB AA
TAY ; CPU:$E0BC PRG:20BC A8
LDA a:$00B2,X ; CPU:$E0BD PRG:20BD BD B2 00
CMP $02 ; CPU:$E0C0 PRG:20C0 C5 02
BNE UpdateObjectBufferOnNonZero_E0D2 ; CPU:$E0C2 PRG:20C2 D0 0E
INX ; CPU:$E0C4 PRG:20C4 E8
LDA a:$00B2,X ; CPU:$E0C5 PRG:20C5 BD B2 00
CMP $03 ; CPU:$E0C8 PRG:20C8 C5 03
BNE UpdateObjectBufferOnNonZero_E0D2 ; CPU:$E0CA PRG:20CA D0 06
INX ; CPU:$E0CC PRG:20CC E8
LDA a:$00B2,X ; CPU:$E0CD PRG:20CD BD B2 00
CLC ; CPU:$E0D0 PRG:20D0 18
RTS ; CPU:$E0D1 PRG:20D1 60
UpdateObjectBufferOnNonZero_E0D2:
LDA WorkPtr1Lo ; CPU:$E0D2 PRG:20D2 A5 02
STA a:$00B2,Y ; CPU:$E0D4 PRG:20D4 99 B2 00
INY ; CPU:$E0D7 PRG:20D7 C8
LDA $03 ; CPU:$E0D8 PRG:20D8 A5 03
STA a:$00B2,Y ; CPU:$E0DA PRG:20DA 99 B2 00
SEC ; CPU:$E0DD PRG:20DD 38
RTS ; CPU:$E0DE PRG:20DE 60
;------------------------------------------------------------
; UpdateObjectBufferRoutine_E0DF
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
UpdateObjectBufferRoutine_E0DF:
LDA #$08 ; CPU:$E0DF PRG:20DF A9 08
STA $02 ; CPU:$E0E1 PRG:20E1 85 02
LDA WorkPtr0Lo ; CPU:$E0E3 PRG:20E3 A5 00
ASL A ; CPU:$E0E5 PRG:20E5 0A
ROL $02 ; CPU:$E0E6 PRG:20E6 26 02
ASL A ; CPU:$E0E8 PRG:20E8 0A
ROL $02 ; CPU:$E0E9 PRG:20E9 26 02
AND #$E0 ; CPU:$E0EB PRG:20EB 29 E0
STA $03 ; CPU:$E0ED PRG:20ED 85 03
LDA WorkPtr0Hi ; CPU:$E0EF PRG:20EF A5 01
LSR A ; CPU:$E0F1 PRG:20F1 4A
LSR A ; CPU:$E0F2 PRG:20F2 4A
LSR A ; CPU:$E0F3 PRG:20F3 4A
ORA $03 ; CPU:$E0F4 PRG:20F4 05 03
STA $03 ; CPU:$E0F6 PRG:20F6 85 03
RTS ; CPU:$E0F8 PRG:20F8 60
;------------------------------------------------------------
; UpdateObjectBufferRoutine_E0F9
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
UpdateObjectBufferRoutine_E0F9:
LDA $03 ; CPU:$E0F9 PRG:20F9 A5 03
ASL A ; CPU:$E0FB PRG:20FB 0A
ASL A ; CPU:$E0FC PRG:20FC 0A
ASL A ; CPU:$E0FD PRG:20FD 0A
STA $01 ; CPU:$E0FE PRG:20FE 85 01
LDA $03 ; CPU:$E100 PRG:2100 A5 03
STA $00 ; CPU:$E102 PRG:2102 85 00
LDA WorkPtr1Lo ; CPU:$E104 PRG:2104 A5 02
LSR A ; CPU:$E106 PRG:2106 4A
ROR $00 ; CPU:$E107 PRG:2107 66 00
LSR A ; CPU:$E109 PRG:2109 4A
ROR $00 ; CPU:$E10A PRG:210A 66 00
LDA #$F8 ; CPU:$E10C PRG:210C A9 F8
AND $00 ; CPU:$E10E PRG:210E 25 00
STA $00 ; CPU:$E110 PRG:2110 85 00
RTS ; CPU:$E112 PRG:2112 60
;------------------------------------------------------------
; ObjectPath_E113
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ObjectPath_E113:
LDA PPUSTATUS ; CPU:$E113 PRG:2113 AD 02 20
LDX #$00 ; CPU:$E116 PRG:2116 A2 00
ObjectPathLoop_E118:
LDA a:$00B2,X ; CPU:$E118 PRG:2118 BD B2 00
STA PPUADDR ; CPU:$E11B PRG:211B 8D 06 20
INX ; CPU:$E11E PRG:211E E8
LDA a:$00B2,X ; CPU:$E11F PRG:211F BD B2 00
STA PPUADDR ; CPU:$E122 PRG:2122 8D 06 20
INX ; CPU:$E125 PRG:2125 E8
LDA PPUDATA ; CPU:$E126 PRG:2126 AD 07 20
LDA PPUDATA ; CPU:$E129 PRG:2129 AD 07 20
STA a:$00B2,X ; CPU:$E12C PRG:212C 9D B2 00
INX ; CPU:$E12F PRG:212F E8
CPX #$1E ; CPU:$E130 PRG:2130 E0 1E
BNE ObjectPathLoop_E118 ; CPU:$E132 PRG:2132 D0 E4
LDA $42 ; CPU:$E134 PRG:2134 A5 42
STA PPUSCROLL ; CPU:$E136 PRG:2136 8D 05 20
LDA $43 ; CPU:$E139 PRG:2139 A5 43
STA PPUSCROLL ; CPU:$E13B PRG:213B 8D 05 20
RTS ; CPU:$E13E PRG:213E 60
;------------------------------------------------------------
; ReadObjectRecordRoutine_E13F
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ReadObjectRecordRoutine_E13F:
LDY #$10 ; CPU:$E13F PRG:213F A0 10
LDA (CurrentObjectPtrLo),Y ; CPU:$E141 PRG:2141 B1 08
LDY #$21 ; CPU:$E143 PRG:2143 A0 21
CMP #$00 ; CPU:$E145 PRG:2145 C9 00
BEQ ReadObjectRecordOnZero_E15D ; CPU:$E147 PRG:2147 F0 14
CMP #$01 ; CPU:$E149 PRG:2149 C9 01
BEQ ReadObjectRecordOnZero_E153 ; CPU:$E14B PRG:214B F0 06
LDY #$23 ; CPU:$E14D PRG:214D A0 23
CMP #$02 ; CPU:$E14F PRG:214F C9 02
BEQ ReadObjectRecordOnZero_E15D ; CPU:$E151 PRG:2151 F0 0A
ReadObjectRecordOnZero_E153:
LDA (CurrentObjectPtrLo),Y ; CPU:$E153 PRG:2153 B1 08
AND #$07 ; CPU:$E155 PRG:2155 29 07
CMP #$07 ; CPU:$E157 PRG:2157 C9 07
BCS ObjectPathOnCarry_E165 ; CPU:$E159 PRG:2159 B0 0A
ObjectPathLoop_E15B:
CLC ; CPU:$E15B PRG:215B 18
RTS ; CPU:$E15C PRG:215C 60
ReadObjectRecordOnZero_E15D:
LDA (CurrentObjectPtrLo),Y ; CPU:$E15D PRG:215D B1 08
AND #$07 ; CPU:$E15F PRG:215F 29 07
CMP #$01 ; CPU:$E161 PRG:2161 C9 01
BCS ObjectPathLoop_E15B ; CPU:$E163 PRG:2163 B0 F6
ObjectPathOnCarry_E165:
SEC ; CPU:$E165 PRG:2165 38
RTS ; CPU:$E166 PRG:2166 60
.byte $01, $19, $03, $1A, $19, $01, $1A, $03, $12, $12, $14, $14, $11, $11, $13, $13 ; CPU:$E167 PRG:2167 0B
.byte $19, $19, $1A, $1A, $01, $01, $03, $03 ; CPU:$E177 PRG:2177 0B
;------------------------------------------------------------
; ProcessObjectStateRoutine_E17F
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessObjectStateRoutine_E17F:
LDX #$08 ; CPU:$E17F PRG:217F A2 08
LDY #$41 ; CPU:$E181 PRG:2181 A0 41
CMP #$F9 ; CPU:$E183 PRG:2183 C9 F9
BEQ ObjectPathContinue_E1BB ; CPU:$E185 PRG:2185 F0 34
LDX #$20 ; CPU:$E187 PRG:2187 A2 20
CMP #$93 ; CPU:$E189 PRG:2189 C9 93
BCS ObjectPathOnCarry_E191 ; CPU:$E18B PRG:218B B0 04
CMP #$7C ; CPU:$E18D PRG:218D C9 7C
BCS ObjectPathContinue_E1BB ; CPU:$E18F PRG:218F B0 2A
ObjectPathOnCarry_E191:
LDY #$31 ; CPU:$E191 PRG:2191 A0 31
CMP #$24 ; CPU:$E193 PRG:2193 C9 24
BEQ ObjectPathOnZero_E1A7 ; CPU:$E195 PRG:2195 F0 10
CMP #$4A ; CPU:$E197 PRG:2197 C9 4A
BCC ObjectPathContinue_E1BB ; CPU:$E199 PRG:2199 90 20
CMP #$C4 ; CPU:$E19B PRG:219B C9 C4
BCS ObjectPathOnCarry_E1A3 ; CPU:$E19D PRG:219D B0 04
CMP #$B9 ; CPU:$E19F PRG:219F C9 B9
BCS ObjectPathContinue_E1BB ; CPU:$E1A1 PRG:21A1 B0 18
ObjectPathOnCarry_E1A3:
CMP #$FF ; CPU:$E1A3 PRG:21A3 C9 FF
BEQ ObjectPathContinue_E1BB ; CPU:$E1A5 PRG:21A5 F0 14
ObjectPathOnZero_E1A7:
LDY #$80 ; CPU:$E1A7 PRG:21A7 A0 80
CMP #$60 ; CPU:$E1A9 PRG:21A9 C9 60
BCS ObjectPathContinue_E1B9 ; CPU:$E1AB PRG:21AB B0 0C
CMP #$50 ; CPU:$E1AD PRG:21AD C9 50
BCC ObjectPathContinue_E1B9 ; CPU:$E1AF PRG:21AF 90 08
LDX $0A ; CPU:$E1B1 PRG:21B1 A6 0A
LDA $90,X ; CPU:$E1B3 PRG:21B3 B5 90
CMP #$13 ; CPU:$E1B5 PRG:21B5 C9 13
BNE ObjectPathOnNonZero_E1BD ; CPU:$E1B7 PRG:21B7 D0 04
ObjectPathContinue_E1B9:
CLC ; CPU:$E1B9 PRG:21B9 18
RTS ; CPU:$E1BA PRG:21BA 60
ObjectPathContinue_E1BB:
STX $FF ; CPU:$E1BB PRG:21BB 86 FF
ObjectPathOnNonZero_E1BD:
SEC ; CPU:$E1BD PRG:21BD 38
RTS ; CPU:$E1BE PRG:21BE 60
;------------------------------------------------------------
; ProcessObjectStateRoutine_E1BF
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessObjectStateRoutine_E1BF:
TYA ; CPU:$E1BF PRG:21BF 98
BPL UpdateObjectRecordOnPositive_E1CF ; CPU:$E1C0 PRG:21C0 10 0D
JSR ReadObjectRecordRoutine_E262 ; CPU:$E1C2 PRG:21C2 20 62 E2
JSR UpdateObjectRecordRoutine_E229 ; CPU:$E1C5 PRG:21C5 20 29 E2
LDX $0A ; CPU:$E1C8 PRG:21C8 A6 0A
LDA #$13 ; CPU:$E1CA PRG:21CA A9 13
STA $90,X ; CPU:$E1CC PRG:21CC 95 90
RTS ; CPU:$E1CE PRG:21CE 60
UpdateObjectRecordOnPositive_E1CF:
EOR $06 ; CPU:$E1CF PRG:21CF 45 06
LDY #$1B ; CPU:$E1D1 PRG:21D1 A0 1B
STA (CurrentObjectPtrLo),Y ; CPU:$E1D3 PRG:21D3 91 08
STA $00 ; CPU:$E1D5 PRG:21D5 85 00
JSR ReadObjectRecordRoutine_E262 ; CPU:$E1D7 PRG:21D7 20 62 E2
LDA WorkPtr0Lo ; CPU:$E1DA PRG:21DA A5 00
CMP #$40 ; CPU:$E1DC PRG:21DC C9 40
BMI ObjectPathOnNegative_E1E8 ; CPU:$E1DE PRG:21DE 30 08
LSR $04 ; CPU:$E1E0 PRG:21E0 46 04
ROR $05 ; CPU:$E1E2 PRG:21E2 66 05
LSR $04 ; CPU:$E1E4 PRG:21E4 46 04
ROR $05 ; CPU:$E1E6 PRG:21E6 66 05
ObjectPathOnNegative_E1E8:
LSR $04 ; CPU:$E1E8 PRG:21E8 46 04
ROR $05 ; CPU:$E1EA PRG:21EA 66 05
LSR $04 ; CPU:$E1EC PRG:21EC 46 04
ROR $05 ; CPU:$E1EE PRG:21EE 66 05
LSR $04 ; CPU:$E1F0 PRG:21F0 46 04
ROR $05 ; CPU:$E1F2 PRG:21F2 66 05
LDA $06 ; CPU:$E1F4 PRG:21F4 A5 06
AND #$01 ; CPU:$E1F6 PRG:21F6 29 01
BNE UpdateObjectRecordOnNonZero_E1FD ; CPU:$E1F8 PRG:21F8 D0 03
JSR ProcessObjectStateRoutine_E281 ; CPU:$E1FA PRG:21FA 20 81 E2
UpdateObjectRecordOnNonZero_E1FD:
LDY #$18 ; CPU:$E1FD PRG:21FD A0 18
LDA $05 ; CPU:$E1FF PRG:21FF A5 05
STA (CurrentObjectPtrLo),Y ; CPU:$E201 PRG:2201 91 08
DEY ; CPU:$E203 PRG:2203 88
LDA $04 ; CPU:$E204 PRG:2204 A5 04
STA (CurrentObjectPtrLo),Y ; CPU:$E206 PRG:2206 91 08
JSR UpdateObjectRecordRoutine_E229 ; CPU:$E208 PRG:2208 20 29 E2
LDA $06 ; CPU:$E20B PRG:220B A5 06
ORA #$70 ; CPU:$E20D PRG:220D 09 70
LDY #$10 ; CPU:$E20F PRG:220F A0 10
STA (CurrentObjectPtrLo),Y ; CPU:$E211 PRG:2211 91 08
LDA WorkPtr0Lo ; CPU:$E213 PRG:2213 A5 00
CMP #$40 ; CPU:$E215 PRG:2215 C9 40
BCC ObjectPathOnNoCarry_E21D ; CPU:$E217 PRG:2217 90 04
JSR ProcessObjectStateRoutine_E69A ; CPU:$E219 PRG:2219 20 9A E6
RTS ; CPU:$E21C PRG:221C 60
ObjectPathOnNoCarry_E21D:
LDY $0A ; CPU:$E21D PRG:221D A4 0A
LDA #$10 ; CPU:$E21F PRG:221F A9 10
STA a:$0058,Y ; CPU:$E221 PRG:2221 99 58 00
RTS ; CPU:$E224 PRG:2224 60
.byte $F8, $00, $10, $18 ; CPU:$E225 PRG:2225 0B
;------------------------------------------------------------
; UpdateObjectRecordRoutine_E229
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
UpdateObjectRecordRoutine_E229:
LDY #$01 ; CPU:$E229 PRG:2229 A0 01
LDA (CurrentObjectPtrLo),Y ; CPU:$E22B PRG:222B B1 08
LDY #$19 ; CPU:$E22D PRG:222D A0 19
STA (CurrentObjectPtrLo),Y ; CPU:$E22F PRG:222F 91 08
LDY #$03 ; CPU:$E231 PRG:2231 A0 03
LDA (CurrentObjectPtrLo),Y ; CPU:$E233 PRG:2233 B1 08
LDY #$1A ; CPU:$E235 PRG:2235 A0 1A
STA (CurrentObjectPtrLo),Y ; CPU:$E237 PRG:2237 91 08
LDX $06 ; CPU:$E239 PRG:2239 A6 06
LDY $E17B,X ; CPU:$E23B PRG:223B BC 7B E1
LDX #$00 ; CPU:$E23E PRG:223E A2 00
LDA (CurrentObjectPtrLo),Y ; CPU:$E240 PRG:2240 B1 08
AND #$0F ; CPU:$E242 PRG:2242 29 0F
CMP #$08 ; CPU:$E244 PRG:2244 C9 08
BCC ObjectPathOnNoCarry_E249 ; CPU:$E246 PRG:2246 90 01
INX ; CPU:$E248 PRG:2248 E8
ObjectPathOnNoCarry_E249:
LDA $06 ; CPU:$E249 PRG:2249 A5 06
AND #$01 ; CPU:$E24B PRG:224B 29 01
BNE UpdateObjectRecordOnNonZero_E251 ; CPU:$E24D PRG:224D D0 02
INX ; CPU:$E24F PRG:224F E8
INX ; CPU:$E250 PRG:2250 E8
UpdateObjectRecordOnNonZero_E251:
LDA (CurrentObjectPtrLo),Y ; CPU:$E251 PRG:2251 B1 08
AND #$F0 ; CPU:$E253 PRG:2253 29 F0
CLC ; CPU:$E255 PRG:2255 18
ADC $E225,X ; CPU:$E256 PRG:2256 7D 25 E2
TAX ; CPU:$E259 PRG:2259 AA
LDA $E177,Y ; CPU:$E25A PRG:225A B9 77 E1
TAY ; CPU:$E25D PRG:225D A8
TXA ; CPU:$E25E PRG:225E 8A
STA (CurrentObjectPtrLo),Y ; CPU:$E25F PRG:225F 91 08
RTS ; CPU:$E261 PRG:2261 60
;------------------------------------------------------------
; ReadObjectRecordRoutine_E262
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ReadObjectRecordRoutine_E262:
LDX $06 ; CPU:$E262 PRG:2262 A6 06
LDY $E16F,X ; CPU:$E264 PRG:2264 BC 6F E1
LDA (CurrentObjectPtrLo),Y ; CPU:$E267 PRG:2267 B1 08
STA $05 ; CPU:$E269 PRG:2269 85 05
DEY ; CPU:$E26B PRG:226B 88
LDA (CurrentObjectPtrLo),Y ; CPU:$E26C PRG:226C B1 08
STA $04 ; CPU:$E26E PRG:226E 85 04
BPL UpdateObjectRecordOnPositive_E275 ; CPU:$E270 PRG:2270 10 03
JSR ProcessObjectStateRoutine_E281 ; CPU:$E272 PRG:2272 20 81 E2
UpdateObjectRecordOnPositive_E275:
LDY #$16 ; CPU:$E275 PRG:2275 A0 16
LDA $05 ; CPU:$E277 PRG:2277 A5 05
STA (CurrentObjectPtrLo),Y ; CPU:$E279 PRG:2279 91 08
DEY ; CPU:$E27B PRG:227B 88
LDA $04 ; CPU:$E27C PRG:227C A5 04
STA (CurrentObjectPtrLo),Y ; CPU:$E27E PRG:227E 91 08
RTS ; CPU:$E280 PRG:2280 60
;------------------------------------------------------------
; ProcessObjectStateRoutine_E281
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessObjectStateRoutine_E281:
SEC ; CPU:$E281 PRG:2281 38
LDA #$00 ; CPU:$E282 PRG:2282 A9 00
SBC $05 ; CPU:$E284 PRG:2284 E5 05
STA $05 ; CPU:$E286 PRG:2286 85 05
LDA #$00 ; CPU:$E288 PRG:2288 A9 00
SBC $04 ; CPU:$E28A PRG:228A E5 04
STA $04 ; CPU:$E28C PRG:228C 85 04
RTS ; CPU:$E28E PRG:228E 60
;------------------------------------------------------------
; ProcessObjectStateRoutine_E28F
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessObjectStateRoutine_E28F:
LDA $06 ; CPU:$E28F PRG:228F A5 06
AND #$03 ; CPU:$E291 PRG:2291 29 03
TAX ; CPU:$E293 PRG:2293 AA
LDA $06 ; CPU:$E294 PRG:2294 A5 06
AND #$F0 ; CPU:$E296 PRG:2296 29 F0
CMP #$70 ; CPU:$E298 PRG:2298 C9 70
BNE ReadObjectRecordOnNonZero_E2C7 ; CPU:$E29A PRG:229A D0 2B
JSR UpdateObjectRecordRoutine_E335 ; CPU:$E29C PRG:229C 20 35 E3
BCS ObjectPathOnCarry_E2BA ; CPU:$E29F PRG:229F B0 19
JSR UpdateObjectRecordRoutine_E2E6 ; CPU:$E2A1 PRG:22A1 20 E6 E2
BMI ObjectPathOnNegative_E2B5 ; CPU:$E2A4 PRG:22A4 30 0F
LDA WorkPtr0Lo ; CPU:$E2A6 PRG:22A6 A5 00
BMI ObjectPathOnNegative_E2B9 ; CPU:$E2A8 PRG:22A8 30 0F
;------------------------------------------------------------
; UpdateObjectRecordRoutine_E2AA
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
UpdateObjectRecordRoutine_E2AA:
LDY #$1B ; CPU:$E2AA PRG:22AA A0 1B
LDA (CurrentObjectPtrLo),Y ; CPU:$E2AC PRG:22AC B1 08
LDY #$10 ; CPU:$E2AE PRG:22AE A0 10
STA (CurrentObjectPtrLo),Y ; CPU:$E2B0 PRG:22B0 91 08
STA $06 ; CPU:$E2B2 PRG:22B2 85 06
RTS ; CPU:$E2B4 PRG:22B4 60
ObjectPathOnNegative_E2B5:
LDA WorkPtr0Lo ; CPU:$E2B5 PRG:22B5 A5 00
BMI UpdateObjectRecordRoutine_E2AA ; CPU:$E2B7 PRG:22B7 30 F1
ObjectPathOnNegative_E2B9:
RTS ; CPU:$E2B9 PRG:22B9 60
ObjectPathOnCarry_E2BA:
JSR UpdateObjectRecordRoutine_E2AA ; CPU:$E2BA PRG:22BA 20 AA E2
AND #$03 ; CPU:$E2BD PRG:22BD 29 03
TAX ; CPU:$E2BF PRG:22BF AA
LDY $E173,X ; CPU:$E2C0 PRG:22C0 BC 73 E1
JSR UpdateObjectRecordRoutine_E325 ; CPU:$E2C3 PRG:22C3 20 25 E3
RTS ; CPU:$E2C6 PRG:22C6 60
ReadObjectRecordOnNonZero_E2C7:
LDY $E16F,X ; CPU:$E2C7 PRG:22C7 BC 6F E1
LDA (CurrentObjectPtrLo),Y ; CPU:$E2CA PRG:22CA B1 08
STA $05 ; CPU:$E2CC PRG:22CC 85 05
DEY ; CPU:$E2CE PRG:22CE 88
LDA (CurrentObjectPtrLo),Y ; CPU:$E2CF PRG:22CF B1 08
STA $04 ; CPU:$E2D1 PRG:22D1 85 04
BPL ReadObjectRecordOnPositive_E2D8 ; CPU:$E2D3 PRG:22D3 10 03
JSR ProcessObjectStateRoutine_E281 ; CPU:$E2D5 PRG:22D5 20 81 E2
ReadObjectRecordOnPositive_E2D8:
LDY #$16 ; CPU:$E2D8 PRG:22D8 A0 16
SEC ; CPU:$E2DA PRG:22DA 38
LDA $05 ; CPU:$E2DB PRG:22DB A5 05
SBC (CurrentObjectPtrLo),Y ; CPU:$E2DD PRG:22DD F1 08
DEY ; CPU:$E2DF PRG:22DF 88
LDA $04 ; CPU:$E2E0 PRG:22E0 A5 04
SBC (CurrentObjectPtrLo),Y ; CPU:$E2E2 PRG:22E2 F1 08
BCC UpdateObjectRecordOnNoCarry_E301 ; CPU:$E2E4 PRG:22E4 90 1B
;------------------------------------------------------------
; UpdateObjectRecordRoutine_E2E6
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
UpdateObjectRecordRoutine_E2E6:
LDY #$18 ; CPU:$E2E6 PRG:22E6 A0 18
LDA (CurrentObjectPtrLo),Y ; CPU:$E2E8 PRG:22E8 B1 08
CLC ; CPU:$E2EA PRG:22EA 18
LDY $E16F,X ; CPU:$E2EB PRG:22EB BC 6F E1
ADC (CurrentObjectPtrLo),Y ; CPU:$E2EE PRG:22EE 71 08
STA (CurrentObjectPtrLo),Y ; CPU:$E2F0 PRG:22F0 91 08
LDY #$17 ; CPU:$E2F2 PRG:22F2 A0 17
LDA (CurrentObjectPtrLo),Y ; CPU:$E2F4 PRG:22F4 B1 08
STA $00 ; CPU:$E2F6 PRG:22F6 85 00
LDY $E16F,X ; CPU:$E2F8 PRG:22F8 BC 6F E1
DEY ; CPU:$E2FB PRG:22FB 88
ADC (CurrentObjectPtrLo),Y ; CPU:$E2FC PRG:22FC 71 08
STA (CurrentObjectPtrLo),Y ; CPU:$E2FE PRG:22FE 91 08
RTS ; CPU:$E300 PRG:2300 60
UpdateObjectRecordOnNoCarry_E301:
LDY #$10 ; CPU:$E301 PRG:2301 A0 10
TXA ; CPU:$E303 PRG:2303 8A
STA (CurrentObjectPtrLo),Y ; CPU:$E304 PRG:2304 91 08
LDY #$1B ; CPU:$E306 PRG:2306 A0 1B
STA (CurrentObjectPtrLo),Y ; CPU:$E308 PRG:2308 91 08
AND #$01 ; CPU:$E30A PRG:230A 29 01
BEQ UpdateObjectRecordOnZero_E313 ; CPU:$E30C PRG:230C F0 05
LDY #$15 ; CPU:$E30E PRG:230E A0 15
JSR UpdateObjectRecordRoutine_E325 ; CPU:$E310 PRG:2310 20 25 E3
UpdateObjectRecordOnZero_E313:
LDY #$15 ; CPU:$E313 PRG:2313 A0 15
LDA (CurrentObjectPtrLo),Y ; CPU:$E315 PRG:2315 B1 08
PHA ; CPU:$E317 PRG:2317 48
INY ; CPU:$E318 PRG:2318 C8
LDA (CurrentObjectPtrLo),Y ; CPU:$E319 PRG:2319 B1 08
LDY $E16F,X ; CPU:$E31B PRG:231B BC 6F E1
STA (CurrentObjectPtrLo),Y ; CPU:$E31E PRG:231E 91 08
DEY ; CPU:$E320 PRG:2320 88
PLA ; CPU:$E321 PRG:2321 68
STA (CurrentObjectPtrLo),Y ; CPU:$E322 PRG:2322 91 08
RTS ; CPU:$E324 PRG:2324 60
;------------------------------------------------------------
; UpdateObjectRecordRoutine_E325
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
UpdateObjectRecordRoutine_E325:
INY ; CPU:$E325 PRG:2325 C8
SEC ; CPU:$E326 PRG:2326 38
LDA #$00 ; CPU:$E327 PRG:2327 A9 00
SBC (CurrentObjectPtrLo),Y ; CPU:$E329 PRG:2329 F1 08
STA (CurrentObjectPtrLo),Y ; CPU:$E32B PRG:232B 91 08
DEY ; CPU:$E32D PRG:232D 88
LDA #$00 ; CPU:$E32E PRG:232E A9 00
SBC (CurrentObjectPtrLo),Y ; CPU:$E330 PRG:2330 F1 08
STA (CurrentObjectPtrLo),Y ; CPU:$E332 PRG:2332 91 08
RTS ; CPU:$E334 PRG:2334 60
;------------------------------------------------------------
; UpdateObjectRecordRoutine_E335
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
UpdateObjectRecordRoutine_E335:
LDY $E167,X ; CPU:$E335 PRG:2335 BC 67 E1
LDA (CurrentObjectPtrLo),Y ; CPU:$E338 PRG:2338 B1 08
LDY $E16B,X ; CPU:$E33A PRG:233A BC 6B E1
CMP (CurrentObjectPtrLo),Y ; CPU:$E33D PRG:233D D1 08
BCC ObjectPathOnNoCarry_E350 ; CPU:$E33F PRG:233F 90 0F
LDY $E177,X ; CPU:$E341 PRG:2341 BC 77 E1
LDA (CurrentObjectPtrLo),Y ; CPU:$E344 PRG:2344 B1 08
LDY $E17B,X ; CPU:$E346 PRG:2346 BC 7B E1
STA (CurrentObjectPtrLo),Y ; CPU:$E349 PRG:2349 91 08
INY ; CPU:$E34B PRG:234B C8
LDA #$00 ; CPU:$E34C PRG:234C A9 00
STA (CurrentObjectPtrLo),Y ; CPU:$E34E PRG:234E 91 08
ObjectPathOnNoCarry_E350:
RTS ; CPU:$E350 PRG:2350 60
;------------------------------------------------------------
; ReadObjectRecordRoutine_E351
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ReadObjectRecordRoutine_E351:
LDY #$20 ; CPU:$E351 PRG:2351 A0 20
LDA (CurrentObjectPtrLo),Y ; CPU:$E353 PRG:2353 B1 08
BNE ObjectPathLoop_E37E ; CPU:$E355 PRG:2355 D0 27
LDY #$21 ; CPU:$E357 PRG:2357 A0 21
LDA (CurrentObjectPtrLo),Y ; CPU:$E359 PRG:2359 B1 08
CLC ; CPU:$E35B PRG:235B 18
;------------------------------------------------------------
; ReadObjectRecord_E35C
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ReadObjectRecord_E35C:
ADC #$04 ; CPU:$E35C PRG:235C 69 04
STA $00 ; CPU:$E35E PRG:235E 85 00
LDY #$23 ; CPU:$E360 PRG:2360 A0 23
LDA (CurrentObjectPtrLo),Y ; CPU:$E362 PRG:2362 B1 08
CLC ; CPU:$E364 PRG:2364 18
ADC #$04 ; CPU:$E365 PRG:2365 69 04
STA $01 ; CPU:$E367 PRG:2367 85 01
JSR UpdateObjectBufferRoutine_E0DF ; CPU:$E369 PRG:2369 20 DF E0
LDA $0A ; CPU:$E36C PRG:236C A5 0A
CLC ; CPU:$E36E PRG:236E 18
ADC #$02 ; CPU:$E36F PRG:236F 69 02
JSR ProcessObjectStateRoutine_E0B2 ; CPU:$E371 PRG:2371 20 B2 E0
BCS ObjectPathLoop_E37E ; CPU:$E374 PRG:2374 B0 08
CMP #$4E ; CPU:$E376 PRG:2376 C9 4E
BEQ ObjectPathOnZero_E380 ; CPU:$E378 PRG:2378 F0 06
CMP #$4F ; CPU:$E37A PRG:237A C9 4F
BEQ ObjectPathOnZero_E380 ; CPU:$E37C PRG:237C F0 02
ObjectPathLoop_E37E:
CLC ; CPU:$E37E PRG:237E 18
RTS ; CPU:$E37F PRG:237F 60
ObjectPathOnZero_E380:
JSR ReadObjectRecordRoutine_E13F ; CPU:$E380 PRG:2380 20 3F E1
BCS ObjectPathLoop_E37E ; CPU:$E383 PRG:2383 B0 F9
SEC ; CPU:$E385 PRG:2385 38
RTS ; CPU:$E386 PRG:2386 60
.byte $00, $00, $00, $00, $0C, $F4, $0C, $F4, $F4, $0C, $F4, $0C, $00, $00, $00, $00 ; CPU:$E387 PRG:2387 0B
.byte $80, $00, $80, $00, $40, $C0, $40, $C0, $81, $80, $80, $81, $81, $80, $80, $81 ; CPU:$E397 PRG:2397 0B
;------------------------------------------------------------
; UpdateObjectRecordRoutine_E3A7
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
UpdateObjectRecordRoutine_E3A7:
JSR ReadObjectRecordRoutine_E262 ; CPU:$E3A7 PRG:23A7 20 62 E2
LDX $06 ; CPU:$E3AA PRG:23AA A6 06
LDY $E16F,X ; CPU:$E3AC PRG:23AC BC 6F E1
LDA #$00 ; CPU:$E3AF PRG:23AF A9 00
STA (CurrentObjectPtrLo),Y ; CPU:$E3B1 PRG:23B1 91 08
DEY ; CPU:$E3B3 PRG:23B3 88
STA (CurrentObjectPtrLo),Y ; CPU:$E3B4 PRG:23B4 91 08
;------------------------------------------------------------
; UpdateObjectRecord_E3B6
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
UpdateObjectRecord_E3B6:
LDA $07 ; CPU:$E3B6 PRG:23B6 A5 07
SEC ; CPU:$E3B8 PRG:23B8 38
SBC #$04 ; CPU:$E3B9 PRG:23B9 E9 04
TAX ; CPU:$E3BB PRG:23BB AA
LDA $E39F,X ; CPU:$E3BC PRG:23BC BD 9F E3
LDY #$10 ; CPU:$E3BF PRG:23BF A0 10
STA (CurrentObjectPtrLo),Y ; CPU:$E3C1 PRG:23C1 91 08
LDA $E387,X ; CPU:$E3C3 PRG:23C3 BD 87 E3
LDY #$19 ; CPU:$E3C6 PRG:23C6 A0 19
STA (CurrentObjectPtrLo),Y ; CPU:$E3C8 PRG:23C8 91 08
LDA $E38F,X ; CPU:$E3CA PRG:23CA BD 8F E3
INY ; CPU:$E3CD PRG:23CD C8
STA (CurrentObjectPtrLo),Y ; CPU:$E3CE PRG:23CE 91 08
LDA $E397,X ; CPU:$E3D0 PRG:23D0 BD 97 E3
INY ; CPU:$E3D3 PRG:23D3 C8
STA (CurrentObjectPtrLo),Y ; CPU:$E3D4 PRG:23D4 91 08
LDY #$01 ; CPU:$E3D6 PRG:23D6 A0 01
LDA (CurrentObjectPtrLo),Y ; CPU:$E3D8 PRG:23D8 B1 08
LDX $06 ; CPU:$E3DA PRG:23DA A6 06
CPX #$02 ; CPU:$E3DC PRG:23DC E0 02
PHP ; CPU:$E3DE PRG:23DE 08
BCS UpdateObjectRecordOnCarry_E3E4 ; CPU:$E3DF PRG:23DF B0 03
JSR ProcessObjectStateRoutine_E405 ; CPU:$E3E1 PRG:23E1 20 05 E4
UpdateObjectRecordOnCarry_E3E4:
STA (CurrentObjectPtrLo),Y ; CPU:$E3E4 PRG:23E4 91 08
LDY #$17 ; CPU:$E3E6 PRG:23E6 A0 17
STA (CurrentObjectPtrLo),Y ; CPU:$E3E8 PRG:23E8 91 08
LDY #$03 ; CPU:$E3EA PRG:23EA A0 03
LDA (CurrentObjectPtrLo),Y ; CPU:$E3EC PRG:23EC B1 08
PLP ; CPU:$E3EE PRG:23EE 28
BCC UpdateObjectRecordOnNoCarry_E3F4 ; CPU:$E3EF PRG:23EF 90 03
JSR ProcessObjectStateRoutine_E405 ; CPU:$E3F1 PRG:23F1 20 05 E4
UpdateObjectRecordOnNoCarry_E3F4:
STA (CurrentObjectPtrLo),Y ; CPU:$E3F4 PRG:23F4 91 08
LDY #$18 ; CPU:$E3F6 PRG:23F6 A0 18
STA (CurrentObjectPtrLo),Y ; CPU:$E3F8 PRG:23F8 91 08
LDA #$00 ; CPU:$E3FA PRG:23FA A9 00
LDY #$02 ; CPU:$E3FC PRG:23FC A0 02
STA (CurrentObjectPtrLo),Y ; CPU:$E3FE PRG:23FE 91 08
LDY #$04 ; CPU:$E400 PRG:2400 A0 04
STA (CurrentObjectPtrLo),Y ; CPU:$E402 PRG:2402 91 08
RTS ; CPU:$E404 PRG:2404 60
;------------------------------------------------------------
; ProcessObjectStateRoutine_E405
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessObjectStateRoutine_E405:
AND #$0F ; CPU:$E405 PRG:2405 29 0F
LDX #$04 ; CPU:$E407 PRG:2407 A2 04
CMP #$08 ; CPU:$E409 PRG:2409 C9 08
BCC ReadObjectRecordOnNoCarry_E40F ; CPU:$E40B PRG:240B 90 02
LDX #$0C ; CPU:$E40D PRG:240D A2 0C
ReadObjectRecordOnNoCarry_E40F:
STX $04 ; CPU:$E40F PRG:240F 86 04
LDA (CurrentObjectPtrLo),Y ; CPU:$E411 PRG:2411 B1 08
AND #$F0 ; CPU:$E413 PRG:2413 29 F0
ORA $04 ; CPU:$E415 PRG:2415 05 04
RTS ; CPU:$E417 PRG:2417 60
.byte $00, $04, $02, $04, $00, $04, $02, $04, $00, $04, $02, $04, $00, $04, $02, $04 ; CPU:$E418 PRG:2418 0B
.byte $40, $40, $40, $C0, $80, $80, $80, $00, $C0, $80, $00, $00, $00, $40, $C0, $C0 ; CPU:$E428 PRG:2428 0B
.byte $00, $03, $01, $02, $00, $03, $01, $02, $00, $02, $01, $03, $00, $02, $01, $03 ; CPU:$E438 PRG:2438 0B
.byte $F8, $F8, $04, $10, $10, $10, $04, $F8, $10, $10, $04, $F8, $F8, $F8, $04, $10 ; CPU:$E448 PRG:2448 0B
.byte $04, $FC, $F8, $FC, $04, $0C, $10, $0C, $04, $0C, $10, $0C, $04, $FC, $F8, $FC ; CPU:$E458 PRG:2458 0B
;------------------------------------------------------------
; UpdateObjectBufferRoutine_E468
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
UpdateObjectBufferRoutine_E468:
LDA #$00 ; CPU:$E468 PRG:2468 A9 00
STA $04 ; CPU:$E46A PRG:246A 85 04
STA $05 ; CPU:$E46C PRG:246C 85 05
LDX #$03 ; CPU:$E46E PRG:246E A2 03
ReadObjectRecordLoop_E470:
LDY #$16 ; CPU:$E470 PRG:2470 A0 16
LDA $05 ; CPU:$E472 PRG:2472 A5 05
CLC ; CPU:$E474 PRG:2474 18
ADC (CurrentObjectPtrLo),Y ; CPU:$E475 PRG:2475 71 08
STA $05 ; CPU:$E477 PRG:2477 85 05
LDY #$15 ; CPU:$E479 PRG:2479 A0 15
LDA $04 ; CPU:$E47B PRG:247B A5 04
ADC (CurrentObjectPtrLo),Y ; CPU:$E47D PRG:247D 71 08
STA $04 ; CPU:$E47F PRG:247F 85 04
DEX ; CPU:$E481 PRG:2481 CA
BNE ReadObjectRecordLoop_E470 ; CPU:$E482 PRG:2482 D0 EC
LDA $06 ; CPU:$E484 PRG:2484 A5 06
CMP #$80 ; CPU:$E486 PRG:2486 C9 80
BNE ObjectPathOnNonZero_E491 ; CPU:$E488 PRG:2488 D0 07
SEC ; CPU:$E48A PRG:248A 38
LDA #$00 ; CPU:$E48B PRG:248B A9 00
SBC $04 ; CPU:$E48D PRG:248D E5 04
STA $04 ; CPU:$E48F PRG:248F 85 04
ObjectPathOnNonZero_E491:
LDA $56 ; CPU:$E491 PRG:2491 A5 56
BNE ObjectPathOnNonZero_E49B ; CPU:$E493 PRG:2493 D0 06
LDX $0A ; CPU:$E495 PRG:2495 A6 0A
LDA $75,X ; CPU:$E497 PRG:2497 B5 75
BEQ UpdateObjectRecordOnZero_E49F ; CPU:$E499 PRG:2499 F0 04
ObjectPathOnNonZero_E49B:
LDA #$00 ; CPU:$E49B PRG:249B A9 00
STA $04 ; CPU:$E49D PRG:249D 85 04
UpdateObjectRecordOnZero_E49F:
LDY #$1B ; CPU:$E49F PRG:249F A0 1B
CLC ; CPU:$E4A1 PRG:24A1 18
LDA $04 ; CPU:$E4A2 PRG:24A2 A5 04
ADC (CurrentObjectPtrLo),Y ; CPU:$E4A4 PRG:24A4 71 08
STA (CurrentObjectPtrLo),Y ; CPU:$E4A6 PRG:24A6 91 08
JSR ProcessObjectStateRoutine_E045 ; CPU:$E4A8 PRG:24A8 20 45 E0
LDY #$19 ; CPU:$E4AB PRG:24AB A0 19
LDA (CurrentObjectPtrLo),Y ; CPU:$E4AD PRG:24AD B1 08
SEC ; CPU:$E4AF PRG:24AF 38
SBC $00 ; CPU:$E4B0 PRG:24B0 E5 00
LDY #$17 ; CPU:$E4B2 PRG:24B2 A0 17
CLC ; CPU:$E4B4 PRG:24B4 18
ADC (CurrentObjectPtrLo),Y ; CPU:$E4B5 PRG:24B5 71 08
LDY #$01 ; CPU:$E4B7 PRG:24B7 A0 01
STA (CurrentObjectPtrLo),Y ; CPU:$E4B9 PRG:24B9 91 08
LDY #$1B ; CPU:$E4BB PRG:24BB A0 1B
SEC ; CPU:$E4BD PRG:24BD 38
LDA #$40 ; CPU:$E4BE PRG:24BE A9 40
SBC (CurrentObjectPtrLo),Y ; CPU:$E4C0 PRG:24C0 F1 08
JSR ProcessObjectStateRoutine_E045 ; CPU:$E4C2 PRG:24C2 20 45 E0
LDY #$1A ; CPU:$E4C5 PRG:24C5 A0 1A
LDA (CurrentObjectPtrLo),Y ; CPU:$E4C7 PRG:24C7 B1 08
SEC ; CPU:$E4C9 PRG:24C9 38
SBC $00 ; CPU:$E4CA PRG:24CA E5 00
STA $00 ; CPU:$E4CC PRG:24CC 85 00
LDY #$18 ; CPU:$E4CE PRG:24CE A0 18
LDA (CurrentObjectPtrLo),Y ; CPU:$E4D0 PRG:24D0 B1 08
SEC ; CPU:$E4D2 PRG:24D2 38
SBC $00 ; CPU:$E4D3 PRG:24D3 E5 00
LDY #$03 ; CPU:$E4D5 PRG:24D5 A0 03
STA (CurrentObjectPtrLo),Y ; CPU:$E4D7 PRG:24D7 91 08
LDX #$07 ; CPU:$E4D9 PRG:24D9 A2 07
LDA $06 ; CPU:$E4DB PRG:24DB A5 06
CMP #$81 ; CPU:$E4DD PRG:24DD C9 81
BEQ ReadObjectRecordOnZero_E4E3 ; CPU:$E4DF PRG:24DF F0 02
LDX #$FF ; CPU:$E4E1 PRG:24E1 A2 FF
ReadObjectRecordOnZero_E4E3:
LDY #$1B ; CPU:$E4E3 PRG:24E3 A0 1B
LDA #$10 ; CPU:$E4E5 PRG:24E5 A9 10
CLC ; CPU:$E4E7 PRG:24E7 18
ADC (CurrentObjectPtrLo),Y ; CPU:$E4E8 PRG:24E8 71 08
UpdateObjectRecordLoop_E4EA:
SEC ; CPU:$E4EA PRG:24EA 38
SBC #$20 ; CPU:$E4EB PRG:24EB E9 20
INX ; CPU:$E4ED PRG:24ED E8
BCS UpdateObjectRecordLoop_E4EA ; CPU:$E4EE PRG:24EE B0 FA
LDA $E418,X ; CPU:$E4F0 PRG:24F0 BD 18 E4
LDY #$05 ; CPU:$E4F3 PRG:24F3 A0 05
STA (CurrentObjectPtrLo),Y ; CPU:$E4F5 PRG:24F5 91 08
LDA $E428,X ; CPU:$E4F7 PRG:24F7 BD 28 E4
LDY #$08 ; CPU:$E4FA PRG:24FA A0 08
STA (CurrentObjectPtrLo),Y ; CPU:$E4FC PRG:24FC 91 08
LDY #$28 ; CPU:$E4FE PRG:24FE A0 28
STA (CurrentObjectPtrLo),Y ; CPU:$E500 PRG:2500 91 08
LDY #$38 ; CPU:$E502 PRG:2502 A0 38
STA (CurrentObjectPtrLo),Y ; CPU:$E504 PRG:2504 91 08
LDA $E438,X ; CPU:$E506 PRG:2506 BD 38 E4
LDY #$25 ; CPU:$E509 PRG:2509 A0 25
STA (CurrentObjectPtrLo),Y ; CPU:$E50B PRG:250B 91 08
LDA $E418,X ; CPU:$E50D PRG:250D BD 18 E4
LDY #$35 ; CPU:$E510 PRG:2510 A0 35
STA (CurrentObjectPtrLo),Y ; CPU:$E512 PRG:2512 91 08
LDA $E448,X ; CPU:$E514 PRG:2514 BD 48 E4
LDY #$01 ; CPU:$E517 PRG:2517 A0 01
CLC ; CPU:$E519 PRG:2519 18
ADC (CurrentObjectPtrLo),Y ; CPU:$E51A PRG:251A 71 08
LDY #$31 ; CPU:$E51C PRG:251C A0 31
STA (CurrentObjectPtrLo),Y ; CPU:$E51E PRG:251E 91 08
LDA $E458,X ; CPU:$E520 PRG:2520 BD 58 E4
LDY #$03 ; CPU:$E523 PRG:2523 A0 03
CLC ; CPU:$E525 PRG:2525 18
ADC (CurrentObjectPtrLo),Y ; CPU:$E526 PRG:2526 71 08
LDY #$33 ; CPU:$E528 PRG:2528 A0 33
STA (CurrentObjectPtrLo),Y ; CPU:$E52A PRG:252A 91 08
RTS ; CPU:$E52C PRG:252C 60
.byte $02, $01, $03, $00, $02, $03, $03, $01, $01, $11, $24 ; CPU:$E52D PRG:252D 0B
ObjectPathLoop_E538:
RTS ; CPU:$E538 PRG:2538 60
;------------------------------------------------------------
; ReadObjectRecordRoutine_E539
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ReadObjectRecordRoutine_E539:
LDX $0A ; CPU:$E539 PRG:2539 A6 0A
LDA $46,X ; CPU:$E53B PRG:253B B5 46
AND #$0F ; CPU:$E53D PRG:253D 29 0F
BNE ObjectPathLoop_E538 ; CPU:$E53F PRG:253F D0 F7
LDY #$1B ; CPU:$E541 PRG:2541 A0 1B
LDA (CurrentObjectPtrLo),Y ; CPU:$E543 PRG:2543 B1 08
LDY #$FF ; CPU:$E545 PRG:2545 A0 FF
ObjectPathLoop_E547:
INY ; CPU:$E547 PRG:2547 C8
SEC ; CPU:$E548 PRG:2548 38
SBC #$40 ; CPU:$E549 PRG:2549 E9 40
BCS ObjectPathLoop_E547 ; CPU:$E54B PRG:254B B0 FA
ADC #$40 ; CPU:$E54D PRG:254D 69 40
LDX $06 ; CPU:$E54F PRG:254F A6 06
CPX #$80 ; CPU:$E551 PRG:2551 E0 80
BEQ ObjectPathOnZero_E59C ; CPU:$E553 PRG:2553 F0 47
CMP #$1C ; CPU:$E555 PRG:2555 C9 1C
BCS ObjectPathLoop_E538 ; CPU:$E557 PRG:2557 B0 DF
INY ; CPU:$E559 PRG:2559 C8
UpdateObjectRecordLoop_E55A:
LDA $E52D,Y ; CPU:$E55A PRG:255A B9 2D E5
LDY #$10 ; CPU:$E55D PRG:255D A0 10
STA (CurrentObjectPtrLo),Y ; CPU:$E55F PRG:255F 91 08
LDY #$1B ; CPU:$E561 PRG:2561 A0 1B
STA (CurrentObjectPtrLo),Y ; CPU:$E563 PRG:2563 91 08
STA $06 ; CPU:$E565 PRG:2565 85 06
LDY #$15 ; CPU:$E567 PRG:2567 A0 15
TAX ; CPU:$E569 PRG:2569 AA
AND #$01 ; CPU:$E56A PRG:256A 29 01
BEQ UpdateObjectRecordOnZero_E571 ; CPU:$E56C PRG:256C F0 03
JSR UpdateObjectRecordRoutine_E325 ; CPU:$E56E PRG:256E 20 25 E3
UpdateObjectRecordOnZero_E571:
LDA (CurrentObjectPtrLo),Y ; CPU:$E571 PRG:2571 B1 08
STA $00 ; CPU:$E573 PRG:2573 85 00
INY ; CPU:$E575 PRG:2575 C8
LDA (CurrentObjectPtrLo),Y ; CPU:$E576 PRG:2576 B1 08
LDY $E16F,X ; CPU:$E578 PRG:2578 BC 6F E1
STA (CurrentObjectPtrLo),Y ; CPU:$E57B PRG:257B 91 08
LDA WorkPtr0Lo ; CPU:$E57D PRG:257D A5 00
DEY ; CPU:$E57F PRG:257F 88
STA (CurrentObjectPtrLo),Y ; CPU:$E580 PRG:2580 91 08
LDY $E532,X ; CPU:$E582 PRG:2582 BC 32 E5
LDA (CurrentObjectPtrLo),Y ; CPU:$E585 PRG:2585 B1 08
AND #$04 ; CPU:$E587 PRG:2587 29 04
PHP ; CPU:$E589 PRG:2589 08
LDA (CurrentObjectPtrLo),Y ; CPU:$E58A PRG:258A B1 08
PLP ; CPU:$E58C PRG:258C 28
BEQ UpdateObjectRecordOnZero_E592 ; CPU:$E58D PRG:258D F0 03
CLC ; CPU:$E58F PRG:258F 18
ADC #$04 ; CPU:$E590 PRG:2590 69 04
UpdateObjectRecordOnZero_E592:
AND #$F8 ; CPU:$E592 PRG:2592 29 F8
STA (CurrentObjectPtrLo),Y ; CPU:$E594 PRG:2594 91 08
INY ; CPU:$E596 PRG:2596 C8
LDA #$00 ; CPU:$E597 PRG:2597 A9 00
STA (CurrentObjectPtrLo),Y ; CPU:$E599 PRG:2599 91 08
ObjectPathLoop_E59B:
RTS ; CPU:$E59B PRG:259B 60
ObjectPathOnZero_E59C:
CMP #$24 ; CPU:$E59C PRG:259C C9 24
BCC ObjectPathLoop_E59B ; CPU:$E59E PRG:259E 90 FB
BCS UpdateObjectRecordLoop_E55A ; CPU:$E5A0 PRG:25A0 B0 B8
.byte $0F, $01, $04, $04, $04, $04, $0F, $01 ; CPU:$E5A2 PRG:25A2 0B
;------------------------------------------------------------
; ReadObjectRecordRoutine_E5AA
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ReadObjectRecordRoutine_E5AA:
PHA ; CPU:$E5AA PRG:25AA 48
LDA $06 ; CPU:$E5AB PRG:25AB A5 06
AND #$03 ; CPU:$E5AD PRG:25AD 29 03
TAX ; CPU:$E5AF PRG:25AF AA
LDA $E5A2,X ; CPU:$E5B0 PRG:25B0 BD A2 E5
LDY #$01 ; CPU:$E5B3 PRG:25B3 A0 01
CLC ; CPU:$E5B5 PRG:25B5 18
ADC (CurrentObjectPtrLo),Y ; CPU:$E5B6 PRG:25B6 71 08
STA $00 ; CPU:$E5B8 PRG:25B8 85 00
LDA $E5A6,X ; CPU:$E5BA PRG:25BA BD A6 E5
LDY #$03 ; CPU:$E5BD PRG:25BD A0 03
CLC ; CPU:$E5BF PRG:25BF 18
ADC (CurrentObjectPtrLo),Y ; CPU:$E5C0 PRG:25C0 71 08
STA $01 ; CPU:$E5C2 PRG:25C2 85 01
JSR UpdateObjectBufferRoutine_E0DF ; CPU:$E5C4 PRG:25C4 20 DF E0
PLA ; CPU:$E5C7 PRG:25C7 68
JSR ProcessObjectStateRoutine_E0B2 ; CPU:$E5C8 PRG:25C8 20 B2 E0
RTS ; CPU:$E5CB PRG:25CB 60
.byte $34, $24, $24, $24, $24, $6E, $86, $86, $6F, $24, $24, $24, $24, $34, $24, $24 ; CPU:$E5CC PRG:25CC 0B
.byte $24, $24, $70, $87, $88, $71, $24, $24, $24, $24, $34, $24, $24, $24, $24, $72 ; CPU:$E5DC PRG:25DC 0B
.byte $89, $8A, $73, $24, $9F, $A0, $24, $34, $24, $24, $24, $24, $74, $8B, $8C, $75 ; CPU:$E5EC PRG:25EC 0B
.byte $A1, $A2, $A3, $A4, $34, $24, $24, $24, $24, $76, $8D, $8E, $77, $24, $24, $24 ; CPU:$E5FC PRG:25FC 0B
.byte $24, $34, $24, $A5, $A6, $24, $78, $8F, $90, $79, $24, $24, $24, $24, $34, $A7 ; CPU:$E60C PRG:260C 0B
.byte $A8, $A9, $AA, $7A, $91, $92, $7B, $24, $24, $24, $24, $43, $24, $60, $24, $24 ; CPU:$E61C PRG:261C 0B
.byte $7C, $24, $24, $7C, $24, $24, $61, $24, $43, $24, $62, $24, $24, $7D, $24, $24 ; CPU:$E62C PRG:262C 0B
.byte $7E, $24, $24, $63, $24, $43, $24, $64, $24, $24, $81, $93, $24, $82, $94, $24 ; CPU:$E63C PRG:263C 0B
.byte $65, $24, $43, $24, $66, $95, $24, $85, $96, $24, $85, $97, $24, $67, $98, $43 ; CPU:$E64C PRG:264C 0B
.byte $24, $68, $24, $24, $7F, $24, $24, $80, $24, $24, $69, $24, $43, $24, $6A, $24 ; CPU:$E65C PRG:265C 0B
.byte $99, $83, $24, $9A, $84, $24, $24, $6B, $24, $43, $9B, $6C, $24, $9C, $85, $24 ; CPU:$E66C PRG:266C 0B
.byte $9D, $85, $24, $9E, $6D, $24, $00, $0D, $00, $34, $41, $34, $00, $0D, $1A, $27 ; CPU:$E67C PRG:267C 0B
.byte $1A, $0D, $00, $34, $00, $0D, $1A, $0D, $00, $34, $41, $4E, $41, $34 ; CPU:$E68C PRG:268C 0B
;------------------------------------------------------------
; ProcessObjectStateRoutine_E69A
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessObjectStateRoutine_E69A:
LDX #$FB ; CPU:$E69A PRG:269A A2 FB
ReadObjectRecordLoop_E69C:
INX ; CPU:$E69C PRG:269C E8
INX ; CPU:$E69D PRG:269D E8
INX ; CPU:$E69E PRG:269E E8
INX ; CPU:$E69F PRG:269F E8
INX ; CPU:$E6A0 PRG:26A0 E8
CPX #$14 ; CPU:$E6A1 PRG:26A1 E0 14
BEQ ObjectPathLoop_E6F2 ; CPU:$E6A3 PRG:26A3 F0 4D
LDA $0370,X ; CPU:$E6A5 PRG:26A5 BD 70 03
BNE ReadObjectRecordLoop_E69C ; CPU:$E6A8 PRG:26A8 D0 F2
LDA #$0C ; CPU:$E6AA PRG:26AA A9 0C
STA $0370,X ; CPU:$E6AC PRG:26AC 9D 70 03
LDY #$16 ; CPU:$E6AF PRG:26AF A0 16
LDA (CurrentObjectPtrLo),Y ; CPU:$E6B1 PRG:26B1 B1 08
STA $00 ; CPU:$E6B3 PRG:26B3 85 00
DEY ; CPU:$E6B5 PRG:26B5 88
LDA (CurrentObjectPtrLo),Y ; CPU:$E6B6 PRG:26B6 B1 08
LSR A ; CPU:$E6B8 PRG:26B8 4A
ROR $00 ; CPU:$E6B9 PRG:26B9 66 00
LSR A ; CPU:$E6BB PRG:26BB 4A
ROR $00 ; CPU:$E6BC PRG:26BC 66 00
LSR A ; CPU:$E6BE PRG:26BE 4A
ROR $00 ; CPU:$E6BF PRG:26BF 66 00
BNE ObjectPathOnNonZero_E6C5 ; CPU:$E6C1 PRG:26C1 D0 02
INC $00 ; CPU:$E6C3 PRG:26C3 E6 00
ObjectPathOnNonZero_E6C5:
SEC ; CPU:$E6C5 PRG:26C5 38
LDA #$00 ; CPU:$E6C6 PRG:26C6 A9 00
SBC $00 ; CPU:$E6C8 PRG:26C8 E5 00
LDY #$00 ; CPU:$E6CA PRG:26CA A0 00
ObjectPathLoop_E6CC:
INY ; CPU:$E6CC PRG:26CC C8
SEC ; CPU:$E6CD PRG:26CD 38
SBC $00 ; CPU:$E6CE PRG:26CE E5 00
BCS ObjectPathLoop_E6CC ; CPU:$E6D0 PRG:26D0 B0 FA
TYA ; CPU:$E6D2 PRG:26D2 98
BNE UpdateObjectBufferOnNonZero_E6D7 ; CPU:$E6D3 PRG:26D3 D0 02
LDA #$FF ; CPU:$E6D5 PRG:26D5 A9 FF
UpdateObjectBufferOnNonZero_E6D7:
INX ; CPU:$E6D7 PRG:26D7 E8
STA $0370,X ; CPU:$E6D8 PRG:26D8 9D 70 03
INX ; CPU:$E6DB PRG:26DB E8
LDA $06 ; CPU:$E6DC PRG:26DC A5 06
STA $0370,X ; CPU:$E6DE PRG:26DE 9D 70 03
INX ; CPU:$E6E1 PRG:26E1 E8
SEC ; CPU:$E6E2 PRG:26E2 38
LDA $03 ; CPU:$E6E3 PRG:26E3 A5 03
SBC #$21 ; CPU:$E6E5 PRG:26E5 E9 21
STA $0370,X ; CPU:$E6E7 PRG:26E7 9D 70 03
INX ; CPU:$E6EA PRG:26EA E8
LDA WorkPtr1Lo ; CPU:$E6EB PRG:26EB A5 02
SBC #$00 ; CPU:$E6ED PRG:26ED E9 00
STA $0370,X ; CPU:$E6EF PRG:26EF 9D 70 03
ObjectPathLoop_E6F2:
RTS ; CPU:$E6F2 PRG:26F2 60
;------------------------------------------------------------
; ProcessObjectStateRoutine_E6F3
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessObjectStateRoutine_E6F3:
LDA #$FF ; CPU:$E6F3 PRG:26F3 A9 FF
STA $07 ; CPU:$E6F5 PRG:26F5 85 07
LDX #$FB ; CPU:$E6F7 PRG:26F7 A2 FB
ObjectPathLoop_E6F9:
INX ; CPU:$E6F9 PRG:26F9 E8
INX ; CPU:$E6FA PRG:26FA E8
INX ; CPU:$E6FB PRG:26FB E8
INX ; CPU:$E6FC PRG:26FC E8
ProcessObjectStateDispatch_E6FD:
INX ; CPU:$E6FD PRG:26FD E8
INC $07 ; CPU:$E6FE PRG:26FE E6 07
;------------------------------------------------------------
; UpdateObjectBuffer_E700
;
; Global:
; First-pass object-engine entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Object pointers, entity state, or gameplay state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
UpdateObjectBuffer_E700:
CPX #$14 ; CPU:$E700 PRG:2700 E0 14
BEQ ObjectPathLoop_E6F2 ; CPU:$E702 PRG:2702 F0 EE
LDY $07 ; CPU:$E704 PRG:2704 A4 07
LDA a:$0068,Y ; CPU:$E706 PRG:2706 B9 68 00
BNE ObjectPathLoop_E6F9 ; CPU:$E709 PRG:2709 D0 EE
LDA $0370,X ; CPU:$E70B PRG:270B BD 70 03
BEQ ObjectPathLoop_E6F9 ; CPU:$E70E PRG:270E F0 E9
DEC $0370,X ; CPU:$E710 PRG:2710 DE 70 03
LDA $0370,X ; CPU:$E713 PRG:2713 BD 70 03
STA $00 ; CPU:$E716 PRG:2716 85 00
INX ; CPU:$E718 PRG:2718 E8
LDA $0370,X ; CPU:$E719 PRG:2719 BD 70 03
STA a:$0068,Y ; CPU:$E71C PRG:271C 99 68 00
INX ; CPU:$E71F PRG:271F E8
LDA $0370,X ; CPU:$E720 PRG:2720 BD 70 03
CMP #$02 ; CPU:$E723 PRG:2723 C9 02
PHP ; CPU:$E725 PRG:2725 08
AND #$01 ; CPU:$E726 PRG:2726 29 01
BEQ ObjectPathOnZero_E731 ; CPU:$E728 PRG:2728 F0 07
LDA #$0C ; CPU:$E72A PRG:272A A9 0C
CLC ; CPU:$E72C PRG:272C 18
ADC $00 ; CPU:$E72D PRG:272D 65 00
STA $00 ; CPU:$E72F PRG:272F 85 00
ObjectPathOnZero_E731:
LDY $00 ; CPU:$E731 PRG:2731 A4 00
LDA $E682,Y ; CPU:$E733 PRG:2733 B9 82 E6
PLP ; CPU:$E736 PRG:2736 28
BCC UpdateObjectBufferOnNoCarry_E73C ; CPU:$E737 PRG:2737 90 03
CLC ; CPU:$E739 PRG:2739 18
ADC #$5B ; CPU:$E73A PRG:273A 69 5B
UpdateObjectBufferOnNoCarry_E73C:
CLC ; CPU:$E73C PRG:273C 18
ADC #$CC ; CPU:$E73D PRG:273D 69 CC
STA $02 ; CPU:$E73F PRG:273F 85 02
LDA #$00 ; CPU:$E741 PRG:2741 A9 00
ADC #$E5 ; CPU:$E743 PRG:2743 69 E5
STA $03 ; CPU:$E745 PRG:2745 85 03
INX ; CPU:$E747 PRG:2747 E8
LDA $0370,X ; CPU:$E748 PRG:2748 BD 70 03
STA $00 ; CPU:$E74B PRG:274B 85 00
INX ; CPU:$E74D PRG:274D E8
LDA $0370,X ; CPU:$E74E PRG:274E BD 70 03
STA $01 ; CPU:$E751 PRG:2751 85 01
STX $08 ; CPU:$E753 PRG:2753 86 08
JSR UpdateCommandBufferRoutine_F3A1 ; CPU:$E755 PRG:2755 20 A1 F3
LDX $08 ; CPU:$E758 PRG:2758 A6 08
JMP ProcessObjectStateDispatch_E6FD ; CPU:$E75A PRG:275A 4C FD E6
.byte $80, $C8, $80, $CB, $80, $D1, $80, $D4, $81, $25, $81, $2E, $81, $37, $81, $E5 ; CPU:$E75D PRG:275D 0B
.byte $81, $F7, $82, $48, $82, $54, $82, $AB, $82, $B1, $83, $0E, $C0, $C8, $C0, $CE ; CPU:$E76D PRG:276D 0B
.byte $C0, $D1, $C0 ; CPU:$E77D PRG:277D 0B
;------------------------------------------------------------
; Resource and level data with embedded PPU update code
; CPU $F20B-$F21A
; PRG $2780-$321A
;
; Pass 1 recursively traced from verified entry roots in this region.
; Direct branches, jumps, and subroutine calls are decoded.
; Bytes not reached by that trace remain explicit .byte data.
;------------------------------------------------------------
.byte $D7, $C1, $25, $C1, $3A, $C1, $85, $C1, $9A, $C1, $E8, $C1, $F7, $C2, $4B, $C2 ; CPU:$E780 PRG:2780 0B
.byte $54, $C2, $AE, $C2, $B1, $F1, $8B, $F1, $94, $FF, $80, $CB, $80, $D1, $81, $8B ; CPU:$E790 PRG:2790 0B
.byte $81, $91, $82, $45, $82, $57, $82, $A5, $82, $A8, $82, $AB, $82, $AE, $82, $B1 ; CPU:$E7A0 PRG:27A0 0B
.byte $82, $B4, $82, $B7, $82, $57, $83, $08, $83, $0B, $83, $0E, $83, $11, $83, $14 ; CPU:$E7B0 PRG:27B0 0B
.byte $C0, $CB, $C0, $CE, $C0, $D1, $C0, $D4, $C1, $2B, $C1, $2E, $C1, $31, $C1, $34 ; CPU:$E7C0 PRG:27C0 0B
.byte $C2, $45, $C2, $48, $C2, $57, $C2, $5A, $C2, $A8, $C2, $B7, $B1, $E5, $B1, $F7 ; CPU:$E7D0 PRG:27D0 0B
.byte $FF, $80, $CE, $81, $28, $81, $2B, $81, $2E, $81, $31, $81, $34, $81, $85, $81 ; CPU:$E7E0 PRG:27E0 0B
.byte $88, $81, $94, $81, $97, $81, $E5, $81, $F7, $82, $AE, $83, $0B, $83, $11, $C0 ; CPU:$E7F0 PRG:27F0 0B
.byte $CE, $C0, $D1, $C1, $28, $C1, $37, $C1, $85, $C1, $88, $C1, $8B, $C1, $94, $C1 ; CPU:$E800 PRG:2800 0B
.byte $97, $C1, $9A, $C1, $EB, $C1, $F4, $C2, $4B, $C2, $54, $C2, $AB, $C2, $AE, $C2 ; CPU:$E810 PRG:2810 0B
.byte $B1, $C2, $B4, $B1, $8E, $FF, $80, $CB, $80, $CE, $80, $D1, $81, $28, $81, $34 ; CPU:$E820 PRG:2820 0B
.byte $81, $85, $81, $97, $81, $E5, $81, $E8, $81, $EB, $81, $EE, $81, $F1, $81, $F4 ; CPU:$E830 PRG:2830 0B
.byte $81, $F7, $83, $08, $83, $0B, $83, $0E, $83, $11, $83, $14, $C0, $CB, $C0, $D4 ; CPU:$E840 PRG:2840 0B
.byte $C1, $28, $C1, $37, $C1, $85, $C1, $9A, $C1, $E8, $C1, $F7, $C2, $48, $C2, $57 ; CPU:$E850 PRG:2850 0B
.byte $C2, $A8, $C2, $B7, $F2, $4B, $F2, $54, $FF, $80, $CE, $80, $D1, $81, $31, $81 ; CPU:$E860 PRG:2860 0B
.byte $85, $81, $88, $81, $8B, $81, $91, $81, $94, $81, $97, $81, $E5, $81, $F7, $82 ; CPU:$E870 PRG:2870 0B
.byte $4B, $82, $51, $82, $AB, $82, $AE, $82, $B1, $83, $0B, $83, $11, $C0, $CE, $C0 ; CPU:$E880 PRG:2880 0B
.byte $D4, $C1, $2E, $C1, $31, $C1, $85, $C1, $9A, $C2, $AB, $C2, $AE, $C2, $B1, $C2 ; CPU:$E890 PRG:2890 0B
.byte $B4, $B1, $EB, $B1, $F1, $FF, $80, $C8, $80, $D4, $81, $28, $81, $2B, $81, $2E ; CPU:$E8A0 PRG:28A0 0B
.byte $81, $31, $81, $34, $81, $88, $81, $94, $82, $4E, $82, $AB, $82, $AE, $82, $B1 ; CPU:$E8B0 PRG:28B0 0B
.byte $83, $0E, $C0, $C8, $C0, $CB, $C0, $D4, $C0, $D7, $C1, $2B, $C1, $34, $C1, $88 ; CPU:$E8C0 PRG:28C0 0B
.byte $C1, $97, $C2, $4B, $C2, $54, $C2, $AE, $C2, $B1, $F1, $8E, $F1, $91, $FF, $81 ; CPU:$E8D0 PRG:28D0 0B
.byte $28, $81, $34, $81, $85, $81, $8B, $81, $91, $81, $97, $81, $E5, $81, $EB, $81 ; CPU:$E8E0 PRG:28E0 0B
.byte $F1, $81, $F7, $82, $4E, $83, $0E, $C1, $28, $C1, $2B, $C1, $34, $C1, $37, $C1 ; CPU:$E8F0 PRG:28F0 0B
.byte $85, $C1, $8E, $C1, $91, $C1, $9A, $C1, $EB, $C1, $F4, $C2, $AE, $C2, $B1, $B1 ; CPU:$E900 PRG:2900 0B
.byte $2E, $F2, $AB, $F2, $B4, $FF, $80, $CE, $81, $2B, $81, $31, $81, $88, $81, $94 ; CPU:$E910 PRG:2910 0B
.byte $81, $EE, $82, $4B, $82, $4E, $82, $51, $82, $AB, $82, $B1, $83, $0B, $83, $0E ; CPU:$E920 PRG:2920 0B
.byte $83, $11, $C0, $CE, $C0, $D1, $C1, $2B, $C1, $34, $C1, $88, $C1, $97, $C1, $EE ; CPU:$E930 PRG:2930 0B
.byte $C1, $F1, $C2, $AB, $C2, $B4, $B1, $8E, $FF, $81, $88, $81, $8B, $81, $91, $81 ; CPU:$E940 PRG:2940 0B
.byte $94, $81, $E5, $81, $EE, $81, $F7, $82, $A8, $82, $AB, $82, $B1, $82, $B4, $C0 ; CPU:$E950 PRG:2950 0B
.byte $C5, $C0, $DA, $C1, $25, $C1, $3A, $C1, $85, $C1, $88, $C1, $8E, $C1, $91, $C1 ; CPU:$E960 PRG:2960 0B
.byte $97, $C1, $9A, $C1, $E8, $C1, $EE, $C1, $F1, $C1, $F7, $C2, $48, $C2, $4E, $C2 ; CPU:$E970 PRG:2970 0B
.byte $51, $C2, $57, $B1, $28, $B1, $34, $FF, $81, $25, $81, $37, $81, $88, $81, $94 ; CPU:$E980 PRG:2980 0B
.byte $81, $EB, $81, $EE, $81, $F1, $82, $4B, $82, $51, $82, $A5, $82, $A8, $82, $AE ; CPU:$E990 PRG:2990 0B
.byte $82, $B4, $82, $B7, $C1, $25, $C1, $28, $C1, $37, $C1, $3A, $C1, $85, $C1, $8B ; CPU:$E9A0 PRG:29A0 0B
.byte $C1, $94, $C1, $9A, $C1, $E5, $C1, $EE, $C1, $F1, $C1, $FA, $C2, $45, $C2, $4B ; CPU:$E9B0 PRG:29B0 0B
.byte $C2, $4E, $C2, $51, $C2, $54, $C2, $5A, $F1, $2E, $F1, $31, $FF, $80, $C5, $80 ; CPU:$E9C0 PRG:29C0 0B
.byte $D7, $81, $28, $81, $2B, $81, $2E, $81, $31, $81, $34, $81, $85, $81, $97, $82 ; CPU:$E9D0 PRG:29D0 0B
.byte $48, $82, $4E, $82, $54, $82, $AB, $82, $AE, $82, $B1, $C0, $C5, $C0, $C8, $C0 ; CPU:$E9E0 PRG:29E0 0B
.byte $D7, $C0, $DA, $C1, $25, $C1, $3A, $C1, $88, $C1, $97, $C1, $E8, $C1, $F7, $C2 ; CPU:$E9F0 PRG:29F0 0B
.byte $4B, $C2, $4E, $C2, $51, $C2, $54, $B2, $A5, $B2, $B7, $B1, $8B, $B1, $91, $FF ; CPU:$EA00 PRG:2A00 0B
.byte $81, $8B, $81, $8E, $81, $97, $81, $E5, $81, $E8, $81, $EB, $81, $EE, $81, $F1 ; CPU:$EA10 PRG:2A10 0B
.byte $81, $F4, $81, $F7, $82, $54, $82, $57, $82, $A5, $82, $A8, $82, $AB, $82, $AE ; CPU:$EA20 PRG:2A20 0B
.byte $82, $B1, $82, $B7, $C1, $2E, $C1, $8B, $C1, $91, $C1, $97, $C1, $9A, $C1, $E5 ; CPU:$EA30 PRG:2A30 0B
.byte $C1, $F7, $C2, $45, $C2, $54, $C2, $57, $C2, $5A, $F0, $C8, $F0, $D7, $FF, $80 ; CPU:$EA40 PRG:2A40 0B
.byte $C8, $80, $D4, $81, $28, $81, $34, $81, $8E, $81, $E5, $81, $EE, $81, $F7, $82 ; CPU:$EA50 PRG:2A50 0B
.byte $45, $82, $4E, $82, $57, $82, $A8, $82, $B4, $83, $08, $83, $14, $C0, $C8, $C0 ; CPU:$EA60 PRG:2A60 0B
.byte $CB, $C0, $D4, $C0, $D7, $C1, $8E, $C1, $91, $C1, $E5, $C1, $E8, $C1, $EE, $C1 ; CPU:$EA70 PRG:2A70 0B
.byte $F1, $C1, $F7, $C1, $FA, $C2, $A8, $C2, $AB, $C2, $B4, $C2, $B7, $B1, $88, $B1 ; CPU:$EA80 PRG:2A80 0B
.byte $94, $F1, $EB, $F1, $F4, $FF, $80, $C5, $80, $C8, $80, $D4, $80, $D7, $81, $8B ; CPU:$EA90 PRG:2A90 0B
.byte $81, $8E, $81, $91, $82, $4B, $82, $4E, $82, $51, $83, $05, $83, $08, $83, $14 ; CPU:$EAA0 PRG:2AA0 0B
.byte $83, $17, $C0, $C5, $C0, $CB, $C0, $D4, $C0, $DA, $C1, $25, $C1, $2B, $C1, $34 ; CPU:$EAB0 PRG:2AB0 0B
.byte $C1, $3A, $C1, $85, $C1, $9A, $C1, $E5, $C1, $FA, $C2, $45, $C2, $4B, $C2, $54 ; CPU:$EAC0 PRG:2AC0 0B
.byte $C2, $5A, $C2, $A5, $C2, $AB, $C2, $B4, $C2, $BA, $B1, $EB, $B1, $F1, $F1, $88 ; CPU:$EAD0 PRG:2AD0 0B
.byte $F1, $97, $F2, $48, $F2, $57, $FF, $81, $25, $81, $28, $81, $34, $81, $37, $81 ; CPU:$EAE0 PRG:2AE0 0B
.byte $85, $81, $88, $81, $8B, $81, $8E, $81, $91, $81, $94, $81, $97, $82, $45, $82 ; CPU:$EAF0 PRG:2AF0 0B
.byte $48, $82, $4B, $82, $4E, $82, $51, $82, $54, $82, $57, $82, $A5, $82, $A8, $82 ; CPU:$EB00 PRG:2B00 0B
.byte $B4, $82, $B7, $C1, $25, $C1, $2B, $C1, $34, $C1, $3A, $C1, $8B, $C1, $94, $C1 ; CPU:$EB10 PRG:2B10 0B
.byte $EB, $C1, $F4, $C2, $45, $C2, $4B, $C2, $54, $C2, $5A, $B1, $E5, $B1, $EE, $B1 ; CPU:$EB20 PRG:2B20 0B
.byte $F7, $FF, $80, $C5, $80, $D7, $81, $28, $81, $34, $81, $85, $81, $88, $81, $94 ; CPU:$EB30 PRG:2B30 0B
.byte $81, $97, $82, $45, $82, $48, $82, $54, $82, $57, $82, $A5, $82, $B7, $83, $08 ; CPU:$EB40 PRG:2B40 0B
.byte $83, $14, $C0, $C5, $C0, $C8, $C0, $D7, $C0, $DA, $C1, $25, $C1, $2B, $C1, $34 ; CPU:$EB50 PRG:2B50 0B
.byte $C1, $3A, $C2, $45, $C2, $4B, $C2, $54, $C2, $5A, $C2, $A8, $C2, $AB, $C2, $B4 ; CPU:$EB60 PRG:2B60 0B
.byte $C2, $B7, $B1, $E5, $B1, $EB, $B1, $F1, $B1, $F7, $FF, $80, $C5, $80, $D7, $81 ; CPU:$EB70 PRG:2B70 0B
.byte $85, $81, $2E, $81, $97, $82, $45, $82, $AE, $82, $57, $83, $05, $83, $17, $C0 ; CPU:$EB80 PRG:2B80 0B
.byte $C8, $C0, $D7, $C1, $8E, $C1, $91, $C1, $EE, $C1, $F1, $C2, $A8, $C2, $B7, $B1 ; CPU:$EB90 PRG:2B90 0B
.byte $E8, $B1, $F4, $F1, $2B, $F1, $34, $F2, $4B, $F2, $54, $F1, $22, $F2, $5D, $FF ; CPU:$EBA0 PRG:2BA0 0B
.byte $81, $25, $81, $2E, $81, $37, $81, $82, $81, $88, $81, $8E, $81, $94, $81, $9A ; CPU:$EBB0 PRG:2BB0 0B
.byte $82, $42, $82, $48, $82, $4E, $82, $54, $82, $5A, $82, $A5, $82, $AE, $82, $B7 ; CPU:$EBC0 PRG:2BC0 0B
.byte $C0, $C8, $C0, $D7, $C2, $A8, $C2, $B7, $B1, $E8, $B1, $EE, $B1, $F4, $F0, $CB ; CPU:$EBD0 PRG:2BD0 0B
.byte $F0, $D4, $F2, $AB, $F2, $B4, $FF, $81, $2B, $81, $2E, $81, $31, $81, $85, $81 ; CPU:$EBE0 PRG:2BE0 0B
.byte $97, $81, $EE, $82, $45, $82, $57, $82, $AB, $82, $AE, $82, $B1, $C0, $CB, $C0 ; CPU:$EBF0 PRG:2BF0 0B
.byte $D4, $C1, $88, $C1, $97, $C1, $E8, $C1, $F7, $C2, $AB, $C2, $B4, $B1, $8E, $B2 ; CPU:$EC00 PRG:2C00 0B
.byte $4E, $F0, $C8, $F0, $D7, $F2, $A8, $F2, $B7, $F1, $3D, $F2, $42, $FF, $80, $C5 ; CPU:$EC10 PRG:2C10 0B
.byte $80, $C8, $80, $D4, $80, $D7, $81, $2B, $81, $31, $82, $AB, $82, $B1, $83, $05 ; CPU:$EC20 PRG:2C20 0B
.byte $83, $08, $83, $14, $83, $17, $C1, $22, $C1, $3D, $C1, $2B, $C1, $34, $C2, $4B ; CPU:$EC30 PRG:2C30 0B
.byte $C2, $54, $C2, $42, $C2, $5D, $B1, $8E, $B2, $4E, $B1, $E8, $B1, $F4, $F1, $28 ; CPU:$EC40 PRG:2C40 0B
.byte $F1, $37, $F2, $48, $F2, $57, $FF, $3F, $00, $20, $0F, $30, $17, $25, $0F, $30 ; CPU:$EC50 PRG:2C50 0B
.byte $17, $17, $0F, $30, $25, $05, $0F, $30, $21, $01, $0F, $30, $27, $16, $0F, $30 ; CPU:$EC60 PRG:2C60 0B
.byte $27, $1A, $0F, $30, $1C, $01, $0F, $30, $27, $08, $60, $20, $50, $04, $2A, $2B ; CPU:$EC70 PRG:2C70 0B
.byte $2C, $2D, $20, $49, $04, $26, $27, $28, $29, $20, $C2, $D3, $4E, $20, $C5, $D3 ; CPU:$EC80 PRG:2C80 0B
.byte $4E, $20, $C8, $D3, $4E, $20, $CB, $D3, $4E, $20, $CE, $D3, $4E, $20, $D1, $D3 ; CPU:$EC90 PRG:2C90 0B
.byte $4E, $20, $D4, $D3, $4E, $20, $D7, $D3, $4E, $20, $DA, $D3, $4E, $20, $DD, $D3 ; CPU:$ECA0 PRG:2CA0 0B
.byte $4E, $20, $E2, $5C, $24, $21, $02, $5C, $24, $21, $42, $5C, $24, $21, $62, $5C ; CPU:$ECB0 PRG:2CB0 0B
.byte $24, $21, $A2, $5C, $24, $21, $C2, $5C, $24, $22, $02, $5C, $24, $22, $22, $5C ; CPU:$ECC0 PRG:2CC0 0B
.byte $24, $22, $62, $5C, $24, $22, $82, $5C, $24, $22, $C2, $5C, $24, $22, $E2, $5C ; CPU:$ECD0 PRG:2CD0 0B
.byte $24, $60, $21, $02, $CF, $32, $21, $1D, $CF, $32, $20, $67, $52, $39, $23, $67 ; CPU:$ECE0 PRG:2CE0 0B
.byte $52, $39, $60, $04, $08, $22, $0F, $38, $18, $38, $D8, $4C, $57, $EC, $4C, $7B ; CPU:$ECF0 PRG:2CF0 0B
.byte $EC, $4C, $E2, $EC, $00, $00, $65, $10, $79, $23, $45, $33, $59, $00, $C2, $10 ; CPU:$ED00 PRG:2D00 0B
.byte $DC, $22, $E2, $32, $FC, $43, $1A, $53, $04, $60, $BA, $70, $A4, $FF, $06, $0A ; CPU:$ED10 PRG:2D10 0B
.byte $22, $C6, $22, $D8, $20, $60, $20, $90, $4C, $57, $EC, $3F, $08, $04, $0F, $30 ; CPU:$ED20 PRG:2D20 0B
.byte $2A, $0A, $4C, $7B, $EC, $4C, $E2, $EC, $00, $00, $65, $10, $79, $23, $45, $33 ; CPU:$ED30 PRG:2D30 0B
.byte $59, $00, $C2, $10, $DC, $22, $E2, $32, $FC, $43, $1A, $53, $04, $60, $BA, $70 ; CPU:$ED40 PRG:2D40 0B
.byte $A4, $C1, $E8, $C2, $4E, $C2, $51, $C1, $F7, $82, $48, $82, $54, $FF, $06, $0A ; CPU:$ED50 PRG:2D50 0B
.byte $22, $0C, $22, $12, $38, $78, $B0, $78, $4C, $57, $EC, $3F, $08, $04, $0F, $30 ; CPU:$ED60 PRG:2D60 0B
.byte $21, $01, $4C, $7B, $EC, $20, $64, $46, $39, $20, $CD, $46, $39, $20, $76, $46 ; CPU:$ED70 PRG:2D70 0B
.byte $39, $23, $64, $46, $39, $23, $0D, $46, $39, $23, $76, $46, $39, $20, $A2, $D5 ; CPU:$ED80 PRG:2D80 0B
.byte $32, $20, $BD, $D5, $32, $00, $00, $62, $10, $7C, $23, $42, $33, $5C, $00, $74 ; CPU:$ED90 PRG:2D90 0B
.byte $10, $6A, $23, $54, $33, $4A, $43, $0B, $53, $13, $60, $AB, $70, $B3, $FF, $0A ; CPU:$EDA0 PRG:2DA0 0B
.byte $0E, $21, $46, $21, $58, $22, $CC, $22, $D2, $20, $60, $20, $90, $4C, $57, $EC ; CPU:$EDB0 PRG:2DB0 0B
.byte $3F, $00, $0C, $0F, $30, $17, $2A, $0F, $30, $17, $17, $0F, $30, $23, $03, $4C ; CPU:$EDC0 PRG:2DC0 0B
.byte $7B, $EC, $4C, $E2, $EC, $20, $60, $60, $39, $20, $6F, $42, $24, $23, $60, $60 ; CPU:$EDD0 PRG:2DD0 0B
.byte $39, $23, $6F, $42, $24, $20, $C0, $D3, $39, $20, $DF, $D3, $39, $20, $AE, $C3 ; CPU:$EDE0 PRG:2DE0 0B
.byte $32, $20, $B1, $C3, $32, $22, $EE, $C3, $32, $22, $F1, $C3, $32, $20, $E0, $D1 ; CPU:$EDF0 PRG:2DF0 0B
.byte $FF, $21, $01, $CF, $FF, $21, $1E, $CF, $FF, $20, $FF, $D1, $FF, $00, $00, $71 ; CPU:$EE00 PRG:2E00 0B
.byte $10, $6D, $23, $51, $33, $4D, $42, $AE, $52, $B0, $61, $0E, $71, $10, $40, $DD ; CPU:$EE10 PRG:2E10 0B
.byte $50, $C1, $62, $FD, $72, $E1, $FF, $0A, $0E, $22, $06, $22, $0C, $22, $12, $22 ; CPU:$EE20 PRG:2E20 0B
.byte $18, $20, $18, $20, $D8, $4C, $57, $EC, $3F, $08, $04, $0F, $30, $27, $07, $4C ; CPU:$EE30 PRG:2E30 0B
.byte $7B, $EC, $20, $64, $49, $39, $20, $73, $49, $39, $23, $64, $49, $39, $23, $73 ; CPU:$EE40 PRG:2E40 0B
.byte $49, $39, $20, $C0, $01, $39, $20, $DF, $01, $39, $23, $00, $01, $39, $23, $1F ; CPU:$EE50 PRG:2E50 0B
.byte $01, $39, $00, $00, $62, $10, $7C, $23, $42, $33, $5C, $00, $71, $10, $6D, $23 ; CPU:$EE60 PRG:2E60 0B
.byte $51, $33, $4D, $43, $1D, $53, $01, $60, $BD, $70, $A1, $43, $0E, $53, $10, $60 ; CPU:$EE70 PRG:2E70 0B
.byte $AE, $70, $B0, $C1, $25, $C1, $3A, $C2, $45, $C2, $5A, $91, $E2, $91, $FA, $FF ; CPU:$EE80 PRG:2E80 0B
.byte $02, $06, $38, $60, $38, $90, $4C, $57, $EC, $3F, $04, $04, $0F, $30, $11, $11 ; CPU:$EE90 PRG:2E90 0B
.byte $3F, $1C, $04, $0F, $30, $21, $01, $4C, $89, $EC, $20, $63, $5A, $BF, $23, $63 ; CPU:$EEA0 PRG:2EA0 0B
.byte $5A, $BF, $20, $82, $D7, $BD, $20, $9D, $D7, $BD, $21, $8C, $48, $BF, $22, $4C ; CPU:$EEB0 PRG:2EB0 0B
.byte $48, $BF, $21, $AB, $C5, $BD, $21, $B4, $C5, $BD, $21, $AC, $48, $FF, $21, $CC ; CPU:$EEC0 PRG:2EC0 0B
.byte $08, $FF, $0B, $18, $17, $1E, $1C, $AD, $FF, $21, $EC, $48, $FF, $22, $0C, $08 ; CPU:$EED0 PRG:2ED0 0B
.byte $2A, $2B, $2C, $2D, $FF, $FF, $FF, $FF, $22, $2C, $48, $FF, $20, $62, $01, $B9 ; CPU:$EEE0 PRG:2EE0 0B
.byte $20, $7D, $01, $C2, $23, $62, $01, $BA, $23, $7D, $01, $C3, $21, $8B, $01, $BC ; CPU:$EEF0 PRG:2EF0 0B
.byte $21, $94, $01, $C0, $22, $4B, $01, $BE, $22, $54, $01, $C1, $00, $80, $C5, $80 ; CPU:$EF00 PRG:2F00 0B
.byte $C8, $80, $CB, $80, $CE, $80, $D1, $80, $D4, $80, $D7, $81, $25, $81, $28, $81 ; CPU:$EF10 PRG:2F10 0B
.byte $2B, $81, $2E, $81, $31, $81, $34, $81, $37, $81, $85, $81, $97, $81, $E5, $81 ; CPU:$EF20 PRG:2F20 0B
.byte $F7, $82, $45, $82, $57, $82, $A5, $82, $A8, $82, $AB, $82, $AE, $82, $B1, $82 ; CPU:$EF30 PRG:2F30 0B
.byte $B4, $82, $B7, $83, $05, $83, $08, $83, $0B, $83, $0E, $83, $11, $83, $14, $83 ; CPU:$EF40 PRG:2F40 0B
.byte $17, $C0, $C5, $C0, $C8, $C0, $CB, $C0, $CE, $C0, $D1, $C0, $D4, $C0, $D7, $C0 ; CPU:$EF50 PRG:2F50 0B
.byte $DA, $C1, $25, $C1, $28, $C1, $37, $C1, $3A, $C1, $85, $C1, $88, $C1, $97, $C1 ; CPU:$EF60 PRG:2F60 0B
.byte $9A, $C1, $E5, $C1, $E8, $C1, $F7, $C1, $FA, $C2, $45, $C2, $48, $C2, $57, $C2 ; CPU:$EF70 PRG:2F70 0B
.byte $5A, $C2, $A5, $C2, $A8, $C2, $AB, $C2, $AE, $C2, $B1, $C2, $B4, $C2, $B7, $C2 ; CPU:$EF80 PRG:2F80 0B
.byte $BA, $FF, $02, $4C, $57, $EC, $3F, $00, $14, $0F, $30, $21, $01, $0F, $30, $30 ; CPU:$EF90 PRG:2F90 0B
.byte $0F, $0F, $25, $25, $0F, $0F, $21, $21, $0F, $0F, $30, $26, $27, $23, $E0, $48 ; CPU:$EFA0 PRG:2FA0 0B
.byte $50, $23, $E8, $48, $A5, $23, $F0, $48, $F5, $20, $86, $14, $DA, $DF, $E3, $E5 ; CPU:$EFB0 PRG:2FB0 0B
.byte $24, $24, $E5, $24, $E5, $24, $24, $DA, $DF, $E3, $E5, $24, $24, $E5, $24, $E5 ; CPU:$EFC0 PRG:2FC0 0B
.byte $20, $A6, $14, $DB, $E0, $E4, $DC, $24, $24, $DC, $24, $DC, $24, $24, $DB, $E0 ; CPU:$EFD0 PRG:2FD0 0B
.byte $E4, $DC, $24, $24, $DC, $24, $DC, $20, $C6, $14, $DC, $24, $24, $DC, $24, $24 ; CPU:$EFE0 PRG:2FE0 0B
.byte $DC, $24, $DC, $24, $24, $DC, $24, $24, $DC, $24, $24, $DC, $24, $DC, $20, $E6 ; CPU:$EFF0 PRG:2FF0 0B
.byte $14, $DD, $E1, $E5, $DD, $24, $24, $DD, $E1, $DC, $24, $24, $DD, $E1, $E5, $DD ; CPU:$F000 PRG:3000 0B
.byte $24, $24, $DD, $E1, $DC, $21, $06, $14, $DE, $E2, $E6, $DE, $E2, $E7, $DE, $E2 ; CPU:$F010 PRG:3010 0B
.byte $E6, $24, $24, $DE, $E2, $E6, $DE, $E2, $E7, $DE, $E2, $E6, $20, $44, $57, $39 ; CPU:$F020 PRG:3020 0B
.byte $22, $05, $57, $39, $20, $83, $CB, $DC, $20, $7C, $CD, $DC, $20, $43, $82, $DA ; CPU:$F030 PRG:3030 0B
.byte $DB, $21, $E3, $01, $DD, $22, $03, $02, $DE, $E2, $20, $5B, $02, $DF, $E3, $20 ; CPU:$F040 PRG:3040 0B
.byte $7B, $01, $E0, $21, $FB, $01, $E1, $22, $1C, $01, $E6, $21, $46, $85, $E5, $DC ; CPU:$F050 PRG:3050 0B
.byte $DC, $DD, $DE, $21, $4B, $0F, $DA, $39, $39, $DF, $E3, $DA, $DF, $E3, $24, $E5 ; CPU:$F060 PRG:3060 0B
.byte $EA, $39, $39, $DF, $E3, $21, $6B, $0F, $DB, $24, $24, $E0, $DC, $DB, $E0, $DC ; CPU:$F070 PRG:3070 0B
.byte $24, $DC, $24, $EB, $24, $E0, $DC, $21, $8B, $0F, $DC, $24, $24, $24, $DC, $DC ; CPU:$F080 PRG:3080 0B
.byte $24, $DC, $24, $DC, $24, $DC, $24, $24, $DC, $21, $AB, $0F, $E8, $E9, $39, $E7 ; CPU:$F090 PRG:3090 0B
.byte $DC, $DC, $24, $DD, $E1, $DC, $24, $EC, $24, $E1, $DC, $21, $C7, $13, $E2, $39 ; CPU:$F0A0 PRG:30A0 0B
.byte $39, $E7, $EC, $24, $24, $24, $EC, $EC, $24, $DE, $E2, $E6, $EA, $39, $39, $39 ; CPU:$F0B0 PRG:30B0 0B
.byte $E6, $22, $4A, $0D, $01, $24, $19, $15, $0A, $22, $0E, $1B, $24, $10, $0A, $16 ; CPU:$F0C0 PRG:30C0 0B
.byte $0E, $22, $8A, $0D, $02, $24, $19, $15, $0A, $22, $0E, $1B, $24, $10, $0A, $16 ; CPU:$F0D0 PRG:30D0 0B
.byte $0E, $22, $CA, $04, $B5, $B6, $B7, $B8, $22, $D4, $04, $B2, $B3, $B4, $CC, $23 ; CPU:$F0E0 PRG:30E0 0B
.byte $04, $02, $AB, $B8, $23, $0C, $07, $B2, $B3, $B4, $CC, $24, $AC, $B8, $23, $19 ; CPU:$F0F0 PRG:30F0 0B
.byte $04, $B2, $B3, $B4, $CC, $23, $69, $0E, $25, $01, $09, $08, $04, $24, $17, $12 ; CPU:$F100 PRG:3100 0B
.byte $17, $1D, $0E, $17, $0D, $18, $00, $FF, $02, $4C, $7E, $F1, $00, $FF, $02, $4C ; CPU:$F110 PRG:3110 0B
.byte $7E, $F1, $2B, $E1, $46, $FA, $2B, $E9, $46, $FF, $2B, $F1, $46, $AF, $2B, $F1 ; CPU:$F120 PRG:3120 0B
.byte $01, $A5, $2A, $24, $58, $C7, $2B, $44, $58, $C8, $2A, $43, $C8, $C5, $2A, $5C ; CPU:$F130 PRG:3130 0B
.byte $C8, $CA, $2A, $23, $01, $C4, $2A, $3C, $01, $C9, $2B, $43, $01, $C6, $2B, $5C ; CPU:$F140 PRG:3140 0B
.byte $01, $CB, $2A, $4A, $0C, $2E, $24, $19, $15, $0A, $22, $0E, $1B, $24, $02, $24 ; CPU:$F150 PRG:3150 0B
.byte $2F, $2A, $8F, $4A, $C7, $2A, $CF, $4A, $C8, $2A, $8E, $83, $C4, $C5, $C6, $2A ; CPU:$F160 PRG:3160 0B
.byte $B5, $04, $B2, $B3, $B4, $CC, $2A, $99, $83, $C9, $CA, $CB, $00, $FF, $2B, $C0 ; CPU:$F170 PRG:3170 0B
.byte $60, $AA, $2B, $E0, $60, $AA, $2B, $C9, $46, $FF, $2B, $D1, $46, $FF, $2B, $D1 ; CPU:$F180 PRG:3180 0B
.byte $01, $55, $28, $64, $58, $C7, $29, $84, $58, $C8, $28, $83, $C8, $C5, $28, $9C ; CPU:$F190 PRG:3190 0B
.byte $C8, $CA, $28, $63, $01, $C4, $28, $7C, $01, $C9, $29, $83, $01, $C6, $29, $9C ; CPU:$F1A0 PRG:31A0 0B
.byte $01, $CB, $28, $8A, $0C, $2E, $24, $19, $15, $0A, $22, $0E, $1B, $24, $01, $24 ; CPU:$F1B0 PRG:31B0 0B
.byte $2F, $28, $CF, $4A, $C7, $29, $0F, $4A, $C8, $28, $CE, $83, $C4, $C5, $C6, $28 ; CPU:$F1C0 PRG:31C0 0B
.byte $F5, $04, $B2, $B3, $B4, $CC, $28, $D9, $83, $C9, $CA, $CB, $29, $A2, $45, $2E ; CPU:$F1D0 PRG:31D0 0B
.byte $29, $B9, $45, $2F, $29, $A8, $0E, $0C, $15, $1E, $B8, $0C, $15, $1E, $B8, $15 ; CPU:$F1E0 PRG:31E0 0B
.byte $0A, $17, $0D, $B8, $B8, $29, $E4, $04, $2A, $2B, $2C, $2D, $29, $EE, $04, $B5 ; CPU:$F1F0 PRG:31F0 0B
.byte $B6, $B7, $B8, $29, $F8, $04, $B2, $B3, $B4, $CC, $60 ; CPU:$F200 PRG:3200 0B
;------------------------------------------------------------
; ResourceAndLevelData
;
; Global:
; First-pass ResourceAndLevelData entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Zero-page pointers, object state, or PPU state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ResourceAndLevelData:
LDA $40 ; CPU:$F20B PRG:320B A5 40
AND #$FB ; CPU:$F20D PRG:320D 29 FB
STA PPUCTRL ; CPU:$F20F PRG:320F 8D 00 20
STA $40 ; CPU:$F212 PRG:3212 85 40
LDX PPUSTATUS ; CPU:$F214 PRG:3214 AE 02 20
LDY #$00 ; CPU:$F217 PRG:3217 A0 00
BEQ PPUCommandReadNextByte_F249 ; CPU:$F219 PRG:3219 F0 2E
; Branch target inside the final five bytes of the preceding raw region.
; This is part of the PPU command-processing loop continued at $F220.
PPUCommandLoop_F21B:
PHA ; CPU:$F21B PRG:321B 48
STA PPUADDR ; CPU:$F21C PRG:321C 8D 06 20
INY ; CPU:$F21F PRG:321F C8
;------------------------------------------------------------
; Resource, input, and collision code with embedded tables
; CPU $F220-$F7C0
; PRG $3220-$37C0
;
; Pass 1 recursively traced from verified entry roots in this region.
; Direct branches, jumps, and subroutine calls are decoded.
; Bytes not reached by that trace remain explicit .byte data.
;------------------------------------------------------------
;------------------------------------------------------------
; ResourceInputCollisionCode
;
; Global:
; First-pass resource/input/collision entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Zero-page pointers, object state, or PPU state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ResourceInputCollisionCode:
LDA $0301,Y ; CPU:$F220 PRG:3220 B9 01 03
STA PPUADDR ; CPU:$F223 PRG:3223 8D 06 20
INY ; CPU:$F226 PRG:3226 C8
LDA $0301,Y ; CPU:$F227 PRG:3227 B9 01 03
AND #$3F ; CPU:$F22A PRG:322A 29 3F
TAX ; CPU:$F22C PRG:322C AA
UpdateCommandBufferLoop_F22D:
INY ; CPU:$F22D PRG:322D C8
LDA $0301,Y ; CPU:$F22E PRG:322E B9 01 03
STA PPUDATA ; CPU:$F231 PRG:3231 8D 07 20
DEX ; CPU:$F234 PRG:3234 CA
BNE UpdateCommandBufferLoop_F22D ; CPU:$F235 PRG:3235 D0 F6
PLA ; CPU:$F237 PRG:3237 68
CMP #$3F ; CPU:$F238 PRG:3238 C9 3F
BNE UpdateCommandBufferOnNonZero_F248 ; CPU:$F23A PRG:323A D0 0C
STA PPUADDR ; CPU:$F23C PRG:323C 8D 06 20
STX PPUADDR ; CPU:$F23F PRG:323F 8E 06 20
STX PPUADDR ; CPU:$F242 PRG:3242 8E 06 20
STX PPUADDR ; CPU:$F245 PRG:3245 8E 06 20
UpdateCommandBufferOnNonZero_F248:
INY ; CPU:$F248 PRG:3248 C8
PPUCommandReadNextByte_F249:
LDA $0301,Y ; CPU:$F249 PRG:3249 B9 01 03
BNE PPUCommandLoop_F21B ; CPU:$F24C PRG:324C D0 CD
LDA #$00 ; CPU:$F24E PRG:324E A9 00
STA $0300 ; CPU:$F250 PRG:3250 8D 00 03
STA $0301 ; CPU:$F253 PRG:3253 8D 01 03
RTS ; CPU:$F256 PRG:3256 60
;------------------------------------------------------------
; ProcessResourceStateRoutine_F257
;
; Global:
; First-pass resource/input/collision entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Zero-page pointers, object state, or PPU state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessResourceStateRoutine_F257:
LDA PPUSTATUS ; CPU:$F257 PRG:3257 AD 02 20
LDA $40 ; CPU:$F25A PRG:325A A5 40
AND #$FB ; CPU:$F25C PRG:325C 29 FB
STA PPUCTRL ; CPU:$F25E PRG:325E 8D 00 20
STA $40 ; CPU:$F261 PRG:3261 85 40
LDA #$1C ; CPU:$F263 PRG:3263 A9 1C
CLC ; CPU:$F265 PRG:3265 18
EnginePathLoop_F266:
ADC #$04 ; CPU:$F266 PRG:3266 69 04
DEC $01 ; CPU:$F268 PRG:3268 C6 01
BNE EnginePathLoop_F266 ; CPU:$F26A PRG:326A D0 FA
STA $02 ; CPU:$F26C PRG:326C 85 02
STA PPUADDR ; CPU:$F26E PRG:326E 8D 06 20
LDA #$00 ; CPU:$F271 PRG:3271 A9 00
STA PPUADDR ; CPU:$F273 PRG:3273 8D 06 20
LDX #$04 ; CPU:$F276 PRG:3276 A2 04
LDY #$00 ; CPU:$F278 PRG:3278 A0 00
LDA WorkPtr0Lo ; CPU:$F27A PRG:327A A5 00
EnginePathLoop_F27C:
STA PPUDATA ; CPU:$F27C PRG:327C 8D 07 20
DEY ; CPU:$F27F PRG:327F 88
BNE EnginePathLoop_F27C ; CPU:$F280 PRG:3280 D0 FA
DEX ; CPU:$F282 PRG:3282 CA
BNE EnginePathLoop_F27C ; CPU:$F283 PRG:3283 D0 F7
LDA WorkPtr1Lo ; CPU:$F285 PRG:3285 A5 02
ADC #$03 ; CPU:$F287 PRG:3287 69 03
STA PPUADDR ; CPU:$F289 PRG:3289 8D 06 20
LDA #$C0 ; CPU:$F28C PRG:328C A9 C0
STA PPUADDR ; CPU:$F28E PRG:328E 8D 06 20
LDY #$40 ; CPU:$F291 PRG:3291 A0 40
LDA #$00 ; CPU:$F293 PRG:3293 A9 00
EnginePathLoop_F295:
STA PPUDATA ; CPU:$F295 PRG:3295 8D 07 20
DEY ; CPU:$F298 PRG:3298 88
BNE EnginePathLoop_F295 ; CPU:$F299 PRG:3299 D0 FA
RTS ; CPU:$F29B PRG:329B 60
EnginePathLoop_F29C:
PHA ; CPU:$F29C PRG:329C 48
STA PPUADDR ; CPU:$F29D PRG:329D 8D 06 20
INY ; CPU:$F2A0 PRG:32A0 C8
LDA ($00),Y ; CPU:$F2A1 PRG:32A1 B1 00
STA PPUADDR ; CPU:$F2A3 PRG:32A3 8D 06 20
INY ; CPU:$F2A6 PRG:32A6 C8
LDA ($00),Y ; CPU:$F2A7 PRG:32A7 B1 00
ASL A ; CPU:$F2A9 PRG:32A9 0A
PHA ; CPU:$F2AA PRG:32AA 48
LDA $40 ; CPU:$F2AB PRG:32AB A5 40
ORA #$04 ; CPU:$F2AD PRG:32AD 09 04
BCS EnginePathOnCarry_F2B3 ; CPU:$F2AF PRG:32AF B0 02
AND #$FB ; CPU:$F2B1 PRG:32B1 29 FB
EnginePathOnCarry_F2B3:
STA PPUCTRL ; CPU:$F2B3 PRG:32B3 8D 00 20
STA $40 ; CPU:$F2B6 PRG:32B6 85 40
PLA ; CPU:$F2B8 PRG:32B8 68
ASL A ; CPU:$F2B9 PRG:32B9 0A
BCC EnginePathOnNoCarry_F2BF ; CPU:$F2BA PRG:32BA 90 03
ORA #$02 ; CPU:$F2BC PRG:32BC 09 02
INY ; CPU:$F2BE PRG:32BE C8
EnginePathOnNoCarry_F2BF:
LSR A ; CPU:$F2BF PRG:32BF 4A
LSR A ; CPU:$F2C0 PRG:32C0 4A
TAX ; CPU:$F2C1 PRG:32C1 AA
EnginePathLoop_F2C2:
BCS EnginePathOnCarry_F2C5 ; CPU:$F2C2 PRG:32C2 B0 01
INY ; CPU:$F2C4 PRG:32C4 C8
EnginePathOnCarry_F2C5:
LDA ($00),Y ; CPU:$F2C5 PRG:32C5 B1 00
STA PPUDATA ; CPU:$F2C7 PRG:32C7 8D 07 20
DEX ; CPU:$F2CA PRG:32CA CA
BNE EnginePathLoop_F2C2 ; CPU:$F2CB PRG:32CB D0 F5
PLA ; CPU:$F2CD PRG:32CD 68
CMP #$3F ; CPU:$F2CE PRG:32CE C9 3F
BNE EnginePathLoop_F2DE ; CPU:$F2D0 PRG:32D0 D0 0C
STA PPUADDR ; CPU:$F2D2 PRG:32D2 8D 06 20
STX PPUADDR ; CPU:$F2D5 PRG:32D5 8E 06 20
STX PPUADDR ; CPU:$F2D8 PRG:32D8 8E 06 20
STX PPUADDR ; CPU:$F2DB PRG:32DB 8E 06 20
EnginePathLoop_F2DE:
SEC ; CPU:$F2DE PRG:32DE 38
TYA ; CPU:$F2DF PRG:32DF 98
ADC $00 ; CPU:$F2E0 PRG:32E0 65 00
STA $00 ; CPU:$F2E2 PRG:32E2 85 00
LDA #$00 ; CPU:$F2E4 PRG:32E4 A9 00
ADC $01 ; CPU:$F2E6 PRG:32E6 65 01
STA $01 ; CPU:$F2E8 PRG:32E8 85 01
;------------------------------------------------------------
; ProcessResourceStateDispatch_F2EA
;
; Global:
; First-pass resource/input/collision entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Zero-page pointers, object state, or PPU state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessResourceStateDispatch_F2EA:
LDX PPUSTATUS ; CPU:$F2EA PRG:32EA AE 02 20
LDY #$00 ; CPU:$F2ED PRG:32ED A0 00
LDA ($00),Y ; CPU:$F2EF PRG:32EF B1 00
BNE EnginePathOnNonZero_F2F4 ; CPU:$F2F1 PRG:32F1 D0 01
RTS ; CPU:$F2F3 PRG:32F3 60
EnginePathOnNonZero_F2F4:
CMP #$60 ; CPU:$F2F4 PRG:32F4 C9 60
BNE EnginePathOnNonZero_F302 ; CPU:$F2F6 PRG:32F6 D0 0A
PLA ; CPU:$F2F8 PRG:32F8 68
STA $01 ; CPU:$F2F9 PRG:32F9 85 01
PLA ; CPU:$F2FB PRG:32FB 68
STA $00 ; CPU:$F2FC PRG:32FC 85 00
LDY #$02 ; CPU:$F2FE PRG:32FE A0 02
BNE EnginePathLoop_F2DE ; CPU:$F300 PRG:3300 D0 DC
EnginePathOnNonZero_F302:
CMP #$4C ; CPU:$F302 PRG:3302 C9 4C
BNE EnginePathLoop_F29C ; CPU:$F304 PRG:3304 D0 96
LDA WorkPtr0Lo ; CPU:$F306 PRG:3306 A5 00
PHA ; CPU:$F308 PRG:3308 48
LDA WorkPtr0Hi ; CPU:$F309 PRG:3309 A5 01
PHA ; CPU:$F30B PRG:330B 48
INY ; CPU:$F30C PRG:330C C8
LDA ($00),Y ; CPU:$F30D PRG:330D B1 00
TAX ; CPU:$F30F PRG:330F AA
INY ; CPU:$F310 PRG:3310 C8
LDA ($00),Y ; CPU:$F311 PRG:3311 B1 00
STA $01 ; CPU:$F313 PRG:3313 85 01
STX $00 ; CPU:$F315 PRG:3315 86 00
JMP ProcessResourceStateDispatch_F2EA ; CPU:$F317 PRG:3317 4C EA F2
;------------------------------------------------------------
; ProcessResourceStateRoutine_F31A
;
; Global:
; First-pass resource/input/collision entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Zero-page pointers, object state, or PPU state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessResourceStateRoutine_F31A:
STA $00 ; CPU:$F31A PRG:331A 85 00
LDX $00 ; CPU:$F31C PRG:331C A6 00
JSR UpdateCommandBufferRoutine_F32C ; CPU:$F31E PRG:331E 20 2C F3
LDA WorkPtr0Lo ; CPU:$F321 PRG:3321 A5 00
LSR A ; CPU:$F323 PRG:3323 4A
LSR A ; CPU:$F324 PRG:3324 4A
LSR A ; CPU:$F325 PRG:3325 4A
LSR A ; CPU:$F326 PRG:3326 4A
TAX ; CPU:$F327 PRG:3327 AA
JSR UpdateCommandBufferRoutine_F32C ; CPU:$F328 PRG:3328 20 2C F3
RTS ; CPU:$F32B PRG:332B 60
;------------------------------------------------------------
; UpdateCommandBufferRoutine_F32C
;
; Global:
; First-pass resource/input/collision entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Zero-page pointers, object state, or PPU state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
UpdateCommandBufferRoutine_F32C:
INX ; CPU:$F32C PRG:332C E8
TXA ; CPU:$F32D PRG:332D 8A
AND #$0F ; CPU:$F32E PRG:332E 29 0F
CMP #$09 ; CPU:$F330 PRG:3330 C9 09
BCS EnginePathContinue_F3A0 ; CPU:$F332 PRG:3332 B0 6C
ASL A ; CPU:$F334 PRG:3334 0A
ASL A ; CPU:$F335 PRG:3335 0A
TAY ; CPU:$F336 PRG:3336 A8
STA $02 ; CPU:$F337 PRG:3337 85 02
LDX $0300 ; CPU:$F339 PRG:3339 AE 00 03
LDA $0700,Y ; CPU:$F33C PRG:333C B9 00 07
STA $0301,X ; CPU:$F33F PRG:333F 9D 01 03
JSR ProcessResourceStateRoutine_F3F5 ; CPU:$F342 PRG:3342 20 F5 F3
INY ; CPU:$F345 PRG:3345 C8
LDA $0700,Y ; CPU:$F346 PRG:3346 B9 00 07
STA $0301,X ; CPU:$F349 PRG:3349 9D 01 03
JSR ProcessResourceStateRoutine_F3F5 ; CPU:$F34C PRG:334C 20 F5 F3
INY ; CPU:$F34F PRG:334F C8
LDA $0700,Y ; CPU:$F350 PRG:3350 B9 00 07
AND #$07 ; CPU:$F353 PRG:3353 29 07
STA $0301,X ; CPU:$F355 PRG:3355 9D 01 03
STA $01 ; CPU:$F358 PRG:3358 85 01
TXA ; CPU:$F35A PRG:335A 8A
SEC ; CPU:$F35B PRG:335B 38
ADC $01 ; CPU:$F35C PRG:335C 65 01
JSR UpdateCommandBufferRoutine_F3F7 ; CPU:$F35E PRG:335E 20 F7 F3
TAX ; CPU:$F361 PRG:3361 AA
STX $0300 ; CPU:$F362 PRG:3362 8E 00 03
LDA #$00 ; CPU:$F365 PRG:3365 A9 00
STA $0301,X ; CPU:$F367 PRG:3367 9D 01 03
INY ; CPU:$F36A PRG:336A C8
LDA $0700,Y ; CPU:$F36B PRG:336B B9 00 07
STA $03 ; CPU:$F36E PRG:336E 85 03
UpdateCommandBufferLoop_F370:
DEX ; CPU:$F370 PRG:3370 CA
LDA a:$0020,Y ; CPU:$F371 PRG:3371 B9 20 00
AND #$0F ; CPU:$F374 PRG:3374 29 0F
STA $0301,X ; CPU:$F376 PRG:3376 9D 01 03
DEC $01 ; CPU:$F379 PRG:3379 C6 01
BEQ UpdateCommandBufferOnZero_F38F ; CPU:$F37B PRG:337B F0 12
DEX ; CPU:$F37D PRG:337D CA
LDA a:$0020,Y ; CPU:$F37E PRG:337E B9 20 00
AND #$F0 ; CPU:$F381 PRG:3381 29 F0
LSR A ; CPU:$F383 PRG:3383 4A
LSR A ; CPU:$F384 PRG:3384 4A
LSR A ; CPU:$F385 PRG:3385 4A
LSR A ; CPU:$F386 PRG:3386 4A
STA $0301,X ; CPU:$F387 PRG:3387 9D 01 03
DEY ; CPU:$F38A PRG:338A 88
DEC $01 ; CPU:$F38B PRG:338B C6 01
BNE UpdateCommandBufferLoop_F370 ; CPU:$F38D PRG:338D D0 E1
UpdateCommandBufferOnZero_F38F:
LDA $03 ; CPU:$F38F PRG:338F A5 03
AND #$01 ; CPU:$F391 PRG:3391 29 01
BEQ EnginePathContinue_F3A0 ; CPU:$F393 PRG:3393 F0 0B
LDY $02 ; CPU:$F395 PRG:3395 A4 02
CLC ; CPU:$F397 PRG:3397 18
LDA a:$0020,Y ; CPU:$F398 PRG:3398 B9 20 00
ADC #$B1 ; CPU:$F39B PRG:339B 69 B1
STA $0301,X ; CPU:$F39D PRG:339D 9D 01 03
EnginePathContinue_F3A0:
RTS ; CPU:$F3A0 PRG:33A0 60
;------------------------------------------------------------
; UpdateCommandBufferRoutine_F3A1
;
; Global:
; First-pass resource/input/collision entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Zero-page pointers, object state, or PPU state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
UpdateCommandBufferRoutine_F3A1:
LDY #$00 ; CPU:$F3A1 PRG:33A1 A0 00
LDA ($02),Y ; CPU:$F3A3 PRG:33A3 B1 02
AND #$0F ; CPU:$F3A5 PRG:33A5 29 0F
STA $05 ; CPU:$F3A7 PRG:33A7 85 05
LDA ($02),Y ; CPU:$F3A9 PRG:33A9 B1 02
LSR A ; CPU:$F3AB PRG:33AB 4A
LSR A ; CPU:$F3AC PRG:33AC 4A
LSR A ; CPU:$F3AD PRG:33AD 4A
LSR A ; CPU:$F3AE PRG:33AE 4A
STA $04 ; CPU:$F3AF PRG:33AF 85 04
LDX $0300 ; CPU:$F3B1 PRG:33B1 AE 00 03
UpdateCommandBufferLoop_F3B4:
LDA WorkPtr0Hi ; CPU:$F3B4 PRG:33B4 A5 01
STA $0301,X ; CPU:$F3B6 PRG:33B6 9D 01 03
JSR ProcessResourceStateRoutine_F3F5 ; CPU:$F3B9 PRG:33B9 20 F5 F3
LDA WorkPtr0Lo ; CPU:$F3BC PRG:33BC A5 00
STA $0301,X ; CPU:$F3BE PRG:33BE 9D 01 03
JSR ProcessResourceStateRoutine_F3F5 ; CPU:$F3C1 PRG:33C1 20 F5 F3
LDA $05 ; CPU:$F3C4 PRG:33C4 A5 05
STA $06 ; CPU:$F3C6 PRG:33C6 85 06
STA $0301,X ; CPU:$F3C8 PRG:33C8 9D 01 03
UpdateCommandBufferLoop_F3CB:
JSR ProcessResourceStateRoutine_F3F5 ; CPU:$F3CB PRG:33CB 20 F5 F3
INY ; CPU:$F3CE PRG:33CE C8
LDA ($02),Y ; CPU:$F3CF PRG:33CF B1 02
STA $0301,X ; CPU:$F3D1 PRG:33D1 9D 01 03
DEC $06 ; CPU:$F3D4 PRG:33D4 C6 06
BNE UpdateCommandBufferLoop_F3CB ; CPU:$F3D6 PRG:33D6 D0 F3
JSR ProcessResourceStateRoutine_F3F5 ; CPU:$F3D8 PRG:33D8 20 F5 F3
STX $0300 ; CPU:$F3DB PRG:33DB 8E 00 03
CLC ; CPU:$F3DE PRG:33DE 18
LDA #$20 ; CPU:$F3DF PRG:33DF A9 20
ADC $00 ; CPU:$F3E1 PRG:33E1 65 00
STA $00 ; CPU:$F3E3 PRG:33E3 85 00
LDA #$00 ; CPU:$F3E5 PRG:33E5 A9 00
ADC $01 ; CPU:$F3E7 PRG:33E7 65 01
STA $01 ; CPU:$F3E9 PRG:33E9 85 01
DEC $04 ; CPU:$F3EB PRG:33EB C6 04
BNE UpdateCommandBufferLoop_F3B4 ; CPU:$F3ED PRG:33ED D0 C5
LDA #$00 ; CPU:$F3EF PRG:33EF A9 00
STA $0301,X ; CPU:$F3F1 PRG:33F1 9D 01 03
RTS ; CPU:$F3F4 PRG:33F4 60
;------------------------------------------------------------
; ProcessResourceStateRoutine_F3F5
;
; Global:
; First-pass resource/input/collision entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Zero-page pointers, object state, or PPU state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessResourceStateRoutine_F3F5:
INX ; CPU:$F3F5 PRG:33F5 E8
TXA ; CPU:$F3F6 PRG:33F6 8A
;------------------------------------------------------------
; UpdateCommandBufferRoutine_F3F7
;
; Global:
; First-pass resource/input/collision entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Zero-page pointers, object state, or PPU state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
UpdateCommandBufferRoutine_F3F7:
CMP #$4E ; CPU:$F3F7 PRG:33F7 C9 4E
BCC EnginePathOnNoCarry_F407 ; CPU:$F3F9 PRG:33F9 90 0C
LDX $0300 ; CPU:$F3FB PRG:33FB AE 00 03
LDA #$00 ; CPU:$F3FE PRG:33FE A9 00
STA $0301,X ; CPU:$F400 PRG:3400 9D 01 03
PLA ; CPU:$F403 PRG:3403 68
PLA ; CPU:$F404 PRG:3404 68
LDA #$01 ; CPU:$F405 PRG:3405 A9 01
EnginePathOnNoCarry_F407:
RTS ; CPU:$F407 PRG:3407 60
;------------------------------------------------------------
; ProcessResourceStateRoutine_F408
;
; Global:
; First-pass resource/input/collision entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Zero-page pointers, object state, or PPU state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessResourceStateRoutine_F408:
LDX #$FF ; CPU:$F408 PRG:3408 A2 FF
BNE EnginePathOnNonZero_F40E ; CPU:$F40A PRG:340A D0 02
;------------------------------------------------------------
; ProcessResourceStateRoutine_F40C
;
; Global:
; First-pass resource/input/collision entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Zero-page pointers, object state, or PPU state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessResourceStateRoutine_F40C:
LDX #$00 ; CPU:$F40C PRG:340C A2 00
EnginePathOnNonZero_F40E:
STX $04 ; CPU:$F40E PRG:340E 86 04
LDX #$00 ; CPU:$F410 PRG:3410 A2 00
STX $05 ; CPU:$F412 PRG:3412 86 05
STX $06 ; CPU:$F414 PRG:3414 86 06
STX $07 ; CPU:$F416 PRG:3416 86 07
LDA WorkPtr0Hi ; CPU:$F418 PRG:3418 A5 01
AND #$08 ; CPU:$F41A PRG:341A 29 08
BNE EnginePathOnNonZero_F41F ; CPU:$F41C PRG:341C D0 01
INX ; CPU:$F41E PRG:341E E8
EnginePathOnNonZero_F41F:
LDA WorkPtr0Lo ; CPU:$F41F PRG:341F A5 00
STA $06,X ; CPU:$F421 PRG:3421 95 06
LDA WorkPtr0Hi ; CPU:$F423 PRG:3423 A5 01
JSR ProcessResourceStateRoutine_F429 ; CPU:$F425 PRG:3425 20 29 F4
RTS ; CPU:$F428 PRG:3428 60
;------------------------------------------------------------
; ProcessResourceStateRoutine_F429
;
; Global:
; First-pass resource/input/collision entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Zero-page pointers, object state, or PPU state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessResourceStateRoutine_F429:
AND #$07 ; CPU:$F429 PRG:3429 29 07
ASL A ; CPU:$F42B PRG:342B 0A
ASL A ; CPU:$F42C PRG:342C 0A
TAX ; CPU:$F42D PRG:342D AA
LDA $04 ; CPU:$F42E PRG:342E A5 04
BEQ EnginePathOnZero_F459 ; CPU:$F430 PRG:3430 F0 27
LDA $24,X ; CPU:$F432 PRG:3432 B5 24
BEQ EnginePathOnZero_F45D ; CPU:$F434 PRG:3434 F0 27
EnginePathLoop_F436:
CLC ; CPU:$F436 PRG:3436 18
LDA $27,X ; CPU:$F437 PRG:3437 B5 27
STA $03 ; CPU:$F439 PRG:3439 85 03
LDA $07 ; CPU:$F43B PRG:343B A5 07
JSR ProcessResourceStateRoutine_F4AE ; CPU:$F43D PRG:343D 20 AE F4
STA $27,X ; CPU:$F440 PRG:3440 95 27
LDA $26,X ; CPU:$F442 PRG:3442 B5 26
STA $03 ; CPU:$F444 PRG:3444 85 03
LDA $06 ; CPU:$F446 PRG:3446 A5 06
JSR ProcessResourceStateRoutine_F4AE ; CPU:$F448 PRG:3448 20 AE F4
STA $26,X ; CPU:$F44B PRG:344B 95 26
LDA $25,X ; CPU:$F44D PRG:344D B5 25
STA $03 ; CPU:$F44F PRG:344F 85 03
LDA $05 ; CPU:$F451 PRG:3451 A5 05
JSR ProcessResourceStateRoutine_F4AE ; CPU:$F453 PRG:3453 20 AE F4
STA $25,X ; CPU:$F456 PRG:3456 95 25
RTS ; CPU:$F458 PRG:3458 60
EnginePathOnZero_F459:
LDA $24,X ; CPU:$F459 PRG:3459 B5 24
BEQ EnginePathLoop_F436 ; CPU:$F45B PRG:345B F0 D9
EnginePathOnZero_F45D:
SEC ; CPU:$F45D PRG:345D 38
LDA $27,X ; CPU:$F45E PRG:345E B5 27
STA $03 ; CPU:$F460 PRG:3460 85 03
LDA $07 ; CPU:$F462 PRG:3462 A5 07
JSR ProcessResourceStateRoutine_F4CF ; CPU:$F464 PRG:3464 20 CF F4
STA $27,X ; CPU:$F467 PRG:3467 95 27
LDA $26,X ; CPU:$F469 PRG:3469 B5 26
STA $03 ; CPU:$F46B PRG:346B 85 03
LDA $06 ; CPU:$F46D PRG:346D A5 06
JSR ProcessResourceStateRoutine_F4CF ; CPU:$F46F PRG:346F 20 CF F4
STA $26,X ; CPU:$F472 PRG:3472 95 26
LDA $25,X ; CPU:$F474 PRG:3474 B5 25
STA $03 ; CPU:$F476 PRG:3476 85 03
LDA $05 ; CPU:$F478 PRG:3478 A5 05
JSR ProcessResourceStateRoutine_F4CF ; CPU:$F47A PRG:347A 20 CF F4
STA $25,X ; CPU:$F47D PRG:347D 95 25
LDA $25,X ; CPU:$F47F PRG:347F B5 25
BNE EnginePathOnNonZero_F48B ; CPU:$F481 PRG:3481 D0 08
LDA $26,X ; CPU:$F483 PRG:3483 B5 26
BNE EnginePathOnNonZero_F48B ; CPU:$F485 PRG:3485 D0 04
LDA $27,X ; CPU:$F487 PRG:3487 B5 27
BEQ EnginePathOnZero_F491 ; CPU:$F489 PRG:3489 F0 06
EnginePathOnNonZero_F48B:
BCS EnginePathOnCarry_F4AD ; CPU:$F48B PRG:348B B0 20
LDA $24,X ; CPU:$F48D PRG:348D B5 24
EOR #$FF ; CPU:$F48F PRG:348F 49 FF
EnginePathOnZero_F491:
STA $24,X ; CPU:$F491 PRG:3491 95 24
SEC ; CPU:$F493 PRG:3493 38
LDA #$00 ; CPU:$F494 PRG:3494 A9 00
STA $03 ; CPU:$F496 PRG:3496 85 03
LDA $27,X ; CPU:$F498 PRG:3498 B5 27
JSR ProcessResourceStateRoutine_F4CF ; CPU:$F49A PRG:349A 20 CF F4
STA $27,X ; CPU:$F49D PRG:349D 95 27
LDA $26,X ; CPU:$F49F PRG:349F B5 26
JSR ProcessResourceStateRoutine_F4CF ; CPU:$F4A1 PRG:34A1 20 CF F4
STA $26,X ; CPU:$F4A4 PRG:34A4 95 26
LDA $25,X ; CPU:$F4A6 PRG:34A6 B5 25
JSR ProcessResourceStateRoutine_F4CF ; CPU:$F4A8 PRG:34A8 20 CF F4
STA $25,X ; CPU:$F4AB PRG:34AB 95 25
EnginePathOnCarry_F4AD:
RTS ; CPU:$F4AD PRG:34AD 60
;------------------------------------------------------------
; ProcessResourceStateRoutine_F4AE
;
; Global:
; First-pass resource/input/collision entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Zero-page pointers, object state, or PPU state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessResourceStateRoutine_F4AE:
JSR ProcessResourceStateRoutine_F4F1 ; CPU:$F4AE PRG:34AE 20 F1 F4
ADC $01 ; CPU:$F4B1 PRG:34B1 65 01
CMP #$0A ; CPU:$F4B3 PRG:34B3 C9 0A
BCC EnginePathOnNoCarry_F4B9 ; CPU:$F4B5 PRG:34B5 90 02
ADC #$05 ; CPU:$F4B7 PRG:34B7 69 05
EnginePathOnNoCarry_F4B9:
CLC ; CPU:$F4B9 PRG:34B9 18
ADC $02 ; CPU:$F4BA PRG:34BA 65 02
STA $02 ; CPU:$F4BC PRG:34BC 85 02
LDA $03 ; CPU:$F4BE PRG:34BE A5 03
AND #$F0 ; CPU:$F4C0 PRG:34C0 29 F0
ADC $02 ; CPU:$F4C2 PRG:34C2 65 02
BCC EnginePathOnNoCarry_F4CA ; CPU:$F4C4 PRG:34C4 90 04
EnginePathLoop_F4C6:
ADC #$5F ; CPU:$F4C6 PRG:34C6 69 5F
SEC ; CPU:$F4C8 PRG:34C8 38
RTS ; CPU:$F4C9 PRG:34C9 60
EnginePathOnNoCarry_F4CA:
CMP #$A0 ; CPU:$F4CA PRG:34CA C9 A0
BCS EnginePathLoop_F4C6 ; CPU:$F4CC PRG:34CC B0 F8
RTS ; CPU:$F4CE PRG:34CE 60
;------------------------------------------------------------
; ProcessResourceStateRoutine_F4CF
;
; Global:
; First-pass resource/input/collision entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Zero-page pointers, object state, or PPU state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessResourceStateRoutine_F4CF:
JSR ProcessResourceStateRoutine_F4F1 ; CPU:$F4CF PRG:34CF 20 F1 F4
SBC $01 ; CPU:$F4D2 PRG:34D2 E5 01
STA $01 ; CPU:$F4D4 PRG:34D4 85 01
BCS EnginePathOnCarry_F4E2 ; CPU:$F4D6 PRG:34D6 B0 0A
ADC #$0A ; CPU:$F4D8 PRG:34D8 69 0A
STA $01 ; CPU:$F4DA PRG:34DA 85 01
LDA WorkPtr1Lo ; CPU:$F4DC PRG:34DC A5 02
ADC #$0F ; CPU:$F4DE PRG:34DE 69 0F
STA $02 ; CPU:$F4E0 PRG:34E0 85 02
EnginePathOnCarry_F4E2:
LDA $03 ; CPU:$F4E2 PRG:34E2 A5 03
AND #$F0 ; CPU:$F4E4 PRG:34E4 29 F0
SEC ; CPU:$F4E6 PRG:34E6 38
SBC $02 ; CPU:$F4E7 PRG:34E7 E5 02
BCS EnginePathOnCarry_F4EE ; CPU:$F4E9 PRG:34E9 B0 03
ADC #$A0 ; CPU:$F4EB PRG:34EB 69 A0
CLC ; CPU:$F4ED PRG:34ED 18
EnginePathOnCarry_F4EE:
ORA $01 ; CPU:$F4EE PRG:34EE 05 01
RTS ; CPU:$F4F0 PRG:34F0 60
;------------------------------------------------------------
; ProcessResourceStateRoutine_F4F1
;
; Global:
; First-pass resource/input/collision entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Zero-page pointers, object state, or PPU state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessResourceStateRoutine_F4F1:
PHA ; CPU:$F4F1 PRG:34F1 48
AND #$0F ; CPU:$F4F2 PRG:34F2 29 0F
STA $01 ; CPU:$F4F4 PRG:34F4 85 01
PLA ; CPU:$F4F6 PRG:34F6 68
AND #$F0 ; CPU:$F4F7 PRG:34F7 29 F0
STA $02 ; CPU:$F4F9 PRG:34F9 85 02
LDA $03 ; CPU:$F4FB PRG:34FB A5 03
AND #$0F ; CPU:$F4FD PRG:34FD 29 0F
RTS ; CPU:$F4FF PRG:34FF 60
;------------------------------------------------------------
; ProcessResourceStateRoutine_F500
;
; Global:
; First-pass resource/input/collision entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Zero-page pointers, object state, or PPU state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessResourceStateRoutine_F500:
LDA #$00 ; CPU:$F500 PRG:3500 A9 00
STA $04 ; CPU:$F502 PRG:3502 85 04
CLC ; CPU:$F504 PRG:3504 18
LDA WorkPtr0Lo ; CPU:$F505 PRG:3505 A5 00
ADC #$10 ; CPU:$F507 PRG:3507 69 10
AND #$F0 ; CPU:$F509 PRG:3509 29 F0
LSR A ; CPU:$F50B PRG:350B 4A
LSR A ; CPU:$F50C PRG:350C 4A
TAY ; CPU:$F50D PRG:350D A8
LDA WorkPtr0Lo ; CPU:$F50E PRG:350E A5 00
AND #$07 ; CPU:$F510 PRG:3510 29 07
ASL A ; CPU:$F512 PRG:3512 0A
ASL A ; CPU:$F513 PRG:3513 0A
TAX ; CPU:$F514 PRG:3514 AA
EnginePathLoop_F515:
LDA a:$0020,Y ; CPU:$F515 PRG:3515 B9 20 00
BEQ EnginePathOnZero_F56B ; CPU:$F518 PRG:3518 F0 51
LDA $24,X ; CPU:$F51A PRG:351A B5 24
BEQ EnginePathLoop_F544 ; CPU:$F51C PRG:351C F0 26
EnginePathLoop_F51E:
SEC ; CPU:$F51E PRG:351E 38
LDA a:$0023,Y ; CPU:$F51F PRG:351F B9 23 00
STA $03 ; CPU:$F522 PRG:3522 85 03
LDA $27,X ; CPU:$F524 PRG:3524 B5 27
JSR ProcessResourceStateRoutine_F4CF ; CPU:$F526 PRG:3526 20 CF F4
LDA a:$0022,Y ; CPU:$F529 PRG:3529 B9 22 00
STA $03 ; CPU:$F52C PRG:352C 85 03
LDA $26,X ; CPU:$F52E PRG:352E B5 26
JSR ProcessResourceStateRoutine_F4CF ; CPU:$F530 PRG:3530 20 CF F4
LDA a:$0021,Y ; CPU:$F533 PRG:3533 B9 21 00
STA $03 ; CPU:$F536 PRG:3536 85 03
LDA $25,X ; CPU:$F538 PRG:3538 B5 25
JSR ProcessResourceStateRoutine_F4CF ; CPU:$F53A PRG:353A 20 CF F4
BCS EnginePathOnCarry_F56F ; CPU:$F53D PRG:353D B0 30
LDA a:$0020,Y ; CPU:$F53F PRG:353F B9 20 00
BNE EnginePathOnNonZero_F574 ; CPU:$F542 PRG:3542 D0 30
EnginePathLoop_F544:
LDA #$FF ; CPU:$F544 PRG:3544 A9 FF
STA $04 ; CPU:$F546 PRG:3546 85 04
SEC ; CPU:$F548 PRG:3548 38
EnginePathLoop_F549:
TYA ; CPU:$F549 PRG:3549 98
BNE EnginePathContinue_F56A ; CPU:$F54A PRG:354A D0 1E
BCC EnginePathOnNoCarry_F55E ; CPU:$F54C PRG:354C 90 10
LDA $24,X ; CPU:$F54E PRG:354E B5 24
STA $20 ; CPU:$F550 PRG:3550 85 20
LDA $25,X ; CPU:$F552 PRG:3552 B5 25
STA $21 ; CPU:$F554 PRG:3554 85 21
LDA $26,X ; CPU:$F556 PRG:3556 B5 26
STA $22 ; CPU:$F558 PRG:3558 85 22
LDA $27,X ; CPU:$F55A PRG:355A B5 27
STA $23 ; CPU:$F55C PRG:355C 85 23
EnginePathOnNoCarry_F55E:
LDA WorkPtr0Lo ; CPU:$F55E PRG:355E A5 00
AND #$08 ; CPU:$F560 PRG:3560 29 08
BEQ EnginePathContinue_F56A ; CPU:$F562 PRG:3562 F0 06
DEX ; CPU:$F564 PRG:3564 CA
DEX ; CPU:$F565 PRG:3565 CA
DEX ; CPU:$F566 PRG:3566 CA
DEX ; CPU:$F567 PRG:3567 CA
BPL EnginePathLoop_F515 ; CPU:$F568 PRG:3568 10 AB
EnginePathContinue_F56A:
RTS ; CPU:$F56A PRG:356A 60
EnginePathOnZero_F56B:
LDA $24,X ; CPU:$F56B PRG:356B B5 24
BEQ EnginePathLoop_F51E ; CPU:$F56D PRG:356D F0 AF
EnginePathOnCarry_F56F:
LDA a:$0020,Y ; CPU:$F56F PRG:356F B9 20 00
BNE EnginePathLoop_F544 ; CPU:$F572 PRG:3572 D0 D0
EnginePathOnNonZero_F574:
CLC ; CPU:$F574 PRG:3574 18
BCC EnginePathLoop_F549 ; CPU:$F575 PRG:3575 90 D2
;------------------------------------------------------------
; ProcessResourceStateRoutine_F577
;
; Global:
; First-pass resource/input/collision entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Zero-page pointers, object state, or PPU state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessResourceStateRoutine_F577:
LDX #$1E ; CPU:$F577 PRG:3577 A2 1E
DEC $50 ; CPU:$F579 PRG:3579 C6 50
BPL EnginePathLoop_F583 ; CPU:$F57B PRG:357B 10 06
LDA #$0A ; CPU:$F57D PRG:357D A9 0A
STA $50 ; CPU:$F57F PRG:357F 85 50
LDX #$2E ; CPU:$F581 PRG:3581 A2 2E
EnginePathLoop_F583:
LDA $51,X ; CPU:$F583 PRG:3583 B5 51
BEQ EnginePathOnZero_F589 ; CPU:$F585 PRG:3585 F0 02
DEC $51,X ; CPU:$F587 PRG:3587 D6 51
EnginePathOnZero_F589:
DEX ; CPU:$F589 PRG:3589 CA
BPL EnginePathLoop_F583 ; CPU:$F58A PRG:358A 10 F7
RTS ; CPU:$F58C PRG:358C 60
;------------------------------------------------------------
; EnginePath_F58D
;
; Global:
; First-pass resource/input/collision entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Zero-page pointers, object state, or PPU state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
EnginePath_F58D:
LDA $10 ; CPU:$F58D PRG:358D A5 10
AND #$02 ; CPU:$F58F PRG:358F 29 02
STA $00 ; CPU:$F591 PRG:3591 85 00
LDA $11 ; CPU:$F593 PRG:3593 A5 11
AND #$02 ; CPU:$F595 PRG:3595 29 02
EOR $00 ; CPU:$F597 PRG:3597 45 00
CLC ; CPU:$F599 PRG:3599 18
BEQ EnginePathOnZero_F59D ; CPU:$F59A PRG:359A F0 01
SEC ; CPU:$F59C PRG:359C 38
EnginePathOnZero_F59D:
ROR $10 ; CPU:$F59D PRG:359D 66 10
ROR $11 ; CPU:$F59F PRG:359F 66 11
ROR $12 ; CPU:$F5A1 PRG:35A1 66 12
ROR $13 ; CPU:$F5A3 PRG:35A3 66 13
ROR $14 ; CPU:$F5A5 PRG:35A5 66 14
ROR $15 ; CPU:$F5A7 PRG:35A7 66 15
ROR $16 ; CPU:$F5A9 PRG:35A9 66 16
ROR $17 ; CPU:$F5AB PRG:35AB 66 17
RTS ; CPU:$F5AD PRG:35AD 60
;------------------------------------------------------------
; EnginePath_F5AE
;
; Global:
; First-pass resource/input/collision entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Zero-page pointers, object state, or PPU state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
EnginePath_F5AE:
LDA #$01 ; CPU:$F5AE PRG:35AE A9 01
STA JOY1 ; CPU:$F5B0 PRG:35B0 8D 16 40
LDX #$00 ; CPU:$F5B3 PRG:35B3 A2 00
LDA #$00 ; CPU:$F5B5 PRG:35B5 A9 00
STA JOY1 ; CPU:$F5B7 PRG:35B7 8D 16 40
JSR ProcessResourceStateRoutine_F5BE ; CPU:$F5BA PRG:35BA 20 BE F5
INX ; CPU:$F5BD PRG:35BD E8
;------------------------------------------------------------
; ProcessResourceStateRoutine_F5BE
;
; Global:
; First-pass resource/input/collision entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Zero-page pointers, object state, or PPU state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessResourceStateRoutine_F5BE:
LDY #$08 ; CPU:$F5BE PRG:35BE A0 08
EnginePathLoop_F5C0:
PHA ; CPU:$F5C0 PRG:35C0 48
LDA JOY1,X ; CPU:$F5C1 PRG:35C1 BD 16 40
STA $00 ; CPU:$F5C4 PRG:35C4 85 00
LSR A ; CPU:$F5C6 PRG:35C6 4A
ORA $00 ; CPU:$F5C7 PRG:35C7 05 00
LSR A ; CPU:$F5C9 PRG:35C9 4A
PLA ; CPU:$F5CA PRG:35CA 68
ROL A ; CPU:$F5CB PRG:35CB 2A
DEY ; CPU:$F5CC PRG:35CC 88
BNE EnginePathLoop_F5C0 ; CPU:$F5CD PRG:35CD D0 F1
LDY $44,X ; CPU:$F5CF PRG:35CF B4 44
STY $00 ; CPU:$F5D1 PRG:35D1 84 00
PHA ; CPU:$F5D3 PRG:35D3 48
STA $44,X ; CPU:$F5D4 PRG:35D4 95 44
LDY $46,X ; CPU:$F5D6 PRG:35D6 B4 46
AND #$3F ; CPU:$F5D8 PRG:35D8 29 3F
STA $46,X ; CPU:$F5DA PRG:35DA 95 46
PLA ; CPU:$F5DC PRG:35DC 68
ORA $00 ; CPU:$F5DD PRG:35DD 05 00
EOR $00 ; CPU:$F5DF PRG:35DF 45 00
AND #$C0 ; CPU:$F5E1 PRG:35E1 29 C0
ORA $46,X ; CPU:$F5E3 PRG:35E3 15 46
STA $46,X ; CPU:$F5E5 PRG:35E5 95 46
TYA ; CPU:$F5E7 PRG:35E7 98
AND #$0F ; CPU:$F5E8 PRG:35E8 29 0F
AND $46,X ; CPU:$F5EA PRG:35EA 35 46
BEQ EnginePathOnZero_F5F4 ; CPU:$F5EC PRG:35EC F0 06
ORA #$F0 ; CPU:$F5EE PRG:35EE 09 F0
AND $46,X ; CPU:$F5F0 PRG:35F0 35 46
STA $46,X ; CPU:$F5F2 PRG:35F2 95 46
EnginePathOnZero_F5F4:
RTS ; CPU:$F5F4 PRG:35F4 60
EnginePathLoop_F5F5:
BMI EnginePathLoop_F600 ; CPU:$F5F5 PRG:35F5 30 09
CPX #$F4 ; CPU:$F5F7 PRG:35F7 E0 F4
BEQ EnginePathLoop_F600 ; CPU:$F5F9 PRG:35F9 F0 05
LDA #$F4 ; CPU:$F5FB PRG:35FB A9 F4
JSR ProcessResourceStateRoutine_F6FB ; CPU:$F5FD PRG:35FD 20 FB F6
EnginePathLoop_F600:
RTS ; CPU:$F600 PRG:3600 60
;------------------------------------------------------------
; ProcessResourceStateRoutine_F601
;
; Global:
; First-pass resource/input/collision entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Zero-page pointers, object state, or PPU state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessResourceStateRoutine_F601:
LDY #$0B ; CPU:$F601 PRG:3601 A0 0B
LDA ($00),Y ; CPU:$F603 PRG:3603 B1 00
STA $02 ; CPU:$F605 PRG:3605 85 02
LDA #$02 ; CPU:$F607 PRG:3607 A9 02
STA $03 ; CPU:$F609 PRG:3609 85 03
LDY #$06 ; CPU:$F60B PRG:360B A0 06
LDA ($00),Y ; CPU:$F60D PRG:360D B1 00
STA $0B ; CPU:$F60F PRG:360F 85 0B
LDY #$01 ; CPU:$F611 PRG:3611 A0 01
LDA ($00),Y ; CPU:$F613 PRG:3613 B1 00
TAX ; CPU:$F615 PRG:3615 AA
STA $08 ; CPU:$F616 PRG:3616 85 08
DEY ; CPU:$F618 PRG:3618 88
LDA ($00),Y ; CPU:$F619 PRG:3619 B1 00
BNE EnginePathLoop_F5F5 ; CPU:$F61B PRG:361B D0 D8
LDY #$0A ; CPU:$F61D PRG:361D A0 0A
LDA ($00),Y ; CPU:$F61F PRG:361F B1 00
TAX ; CPU:$F621 PRG:3621 AA
LSR A ; CPU:$F622 PRG:3622 4A
LSR A ; CPU:$F623 PRG:3623 4A
LSR A ; CPU:$F624 PRG:3624 4A
LSR A ; CPU:$F625 PRG:3625 4A
BEQ EnginePathLoop_F600 ; CPU:$F626 PRG:3626 F0 D8
STA $04 ; CPU:$F628 PRG:3628 85 04
STA $06 ; CPU:$F62A PRG:362A 85 06
TXA ; CPU:$F62C PRG:362C 8A
AND #$0F ; CPU:$F62D PRG:362D 29 0F
BEQ EnginePathLoop_F600 ; CPU:$F62F PRG:362F F0 CF
STA $05 ; CPU:$F631 PRG:3631 85 05
STA $07 ; CPU:$F633 PRG:3633 85 07
LDY #$08 ; CPU:$F635 PRG:3635 A0 08
LDA ($00),Y ; CPU:$F637 PRG:3637 B1 00
AND #$C0 ; CPU:$F639 PRG:3639 29 C0
INY ; CPU:$F63B PRG:363B C8
ORA ($00),Y ; CPU:$F63C PRG:363C 11 00
STA $09 ; CPU:$F63E PRG:363E 85 09
LDY #$03 ; CPU:$F640 PRG:3640 A0 03
LDA ($00),Y ; CPU:$F642 PRG:3642 B1 00
STA $0A ; CPU:$F644 PRG:3644 85 0A
LDY #$02 ; CPU:$F646 PRG:3646 A0 02
LDA $09 ; CPU:$F648 PRG:3648 A5 09
CMP ($02),Y ; CPU:$F64A PRG:364A D1 02
BNE EnginePathOnNonZero_F6B0 ; CPU:$F64C PRG:364C D0 62
LDY #$00 ; CPU:$F64E PRG:364E A0 00
LDA $08 ; CPU:$F650 PRG:3650 A5 08
CMP ($02),Y ; CPU:$F652 PRG:3652 D1 02
BEQ EnginePathOnZero_F659 ; CPU:$F654 PRG:3654 F0 03
JSR ProcessResourceStateRoutine_F707 ; CPU:$F656 PRG:3656 20 07 F7
EnginePathOnZero_F659:
LDY #$03 ; CPU:$F659 PRG:3659 A0 03
LDA $0A ; CPU:$F65B PRG:365B A5 0A
CMP ($02),Y ; CPU:$F65D PRG:365D D1 02
BEQ EnginePathOnZero_F677 ; CPU:$F65F PRG:365F F0 16
EnginePathLoop_F661:
LDX $05 ; CPU:$F661 PRG:3661 A6 05
STX $07 ; CPU:$F663 PRG:3663 86 07
EnginePathLoop_F665:
LDX $04 ; CPU:$F665 PRG:3665 A6 04
EnginePathLoop_F667:
STA ($02),Y ; CPU:$F667 PRG:3667 91 02
INY ; CPU:$F669 PRG:3669 C8
INY ; CPU:$F66A PRG:366A C8
INY ; CPU:$F66B PRG:366B C8
INY ; CPU:$F66C PRG:366C C8
DEX ; CPU:$F66D PRG:366D CA
BNE EnginePathLoop_F667 ; CPU:$F66E PRG:366E D0 F7
CLC ; CPU:$F670 PRG:3670 18
ADC #$08 ; CPU:$F671 PRG:3671 69 08
DEC $07 ; CPU:$F673 PRG:3673 C6 07
BNE EnginePathLoop_F665 ; CPU:$F675 PRG:3675 D0 EE
EnginePathOnZero_F677:
LDY #$05 ; CPU:$F677 PRG:3677 A0 05
LDA ($00),Y ; CPU:$F679 PRG:3679 B1 00
STA $08 ; CPU:$F67B PRG:367B 85 08
LDA #$00 ; CPU:$F67D PRG:367D A9 00
LDX $0B ; CPU:$F67F PRG:367F A6 0B
CLC ; CPU:$F681 PRG:3681 18
EnginePathLoop_F682:
ADC $08 ; CPU:$F682 PRG:3682 65 08
DEX ; CPU:$F684 PRG:3684 CA
BNE EnginePathLoop_F682 ; CPU:$F685 PRG:3685 D0 FB
LDY #$07 ; CPU:$F687 PRG:3687 A0 07
ADC ($00),Y ; CPU:$F689 PRG:3689 71 00
TAX ; CPU:$F68B PRG:368B AA
LDY #$01 ; CPU:$F68C PRG:368C A0 01
LDA #$FF ; CPU:$F68E PRG:368E A9 FF
STA $0A ; CPU:$F690 PRG:3690 85 0A
BIT $09 ; CPU:$F692 PRG:3692 24 09
BMI EnginePathOnNegative_F6BE ; CPU:$F694 PRG:3694 30 28
BVS EnginePathOnOverflowSet_F6C0 ; CPU:$F696 PRG:3696 70 28
LDA #$01 ; CPU:$F698 PRG:3698 A9 01
STA $0A ; CPU:$F69A PRG:369A 85 0A
EnginePathLoop_F69C:
TXA ; CPU:$F69C PRG:369C 8A
CMP ($02),Y ; CPU:$F69D PRG:369D D1 02
BEQ EnginePathOnZero_F6AF ; CPU:$F69F PRG:369F F0 0E
LDX $0B ; CPU:$F6A1 PRG:36A1 A6 0B
EnginePathLoop_F6A3:
STA ($02),Y ; CPU:$F6A3 PRG:36A3 91 02
CLC ; CPU:$F6A5 PRG:36A5 18
ADC $0A ; CPU:$F6A6 PRG:36A6 65 0A
INY ; CPU:$F6A8 PRG:36A8 C8
INY ; CPU:$F6A9 PRG:36A9 C8
INY ; CPU:$F6AA PRG:36AA C8
INY ; CPU:$F6AB PRG:36AB C8
DEX ; CPU:$F6AC PRG:36AC CA
BNE EnginePathLoop_F6A3 ; CPU:$F6AD PRG:36AD D0 F4
EnginePathOnZero_F6AF:
RTS ; CPU:$F6AF PRG:36AF 60
EnginePathOnNonZero_F6B0:
JSR ProcessResourceStateRoutine_F6FB ; CPU:$F6B0 PRG:36B0 20 FB F6
LDY #$00 ; CPU:$F6B3 PRG:36B3 A0 00
JSR ProcessResourceStateRoutine_F707 ; CPU:$F6B5 PRG:36B5 20 07 F7
LDA $0A ; CPU:$F6B8 PRG:36B8 A5 0A
LDY #$03 ; CPU:$F6BA PRG:36BA A0 03
BNE EnginePathLoop_F661 ; CPU:$F6BC PRG:36BC D0 A3
EnginePathOnNegative_F6BE:
BVC EnginePathOnOverflowClear_F6D4 ; CPU:$F6BE PRG:36BE 50 14
EnginePathOnOverflowSet_F6C0:
TXA ; CPU:$F6C0 PRG:36C0 8A
ADC $0B ; CPU:$F6C1 PRG:36C1 65 0B
TAX ; CPU:$F6C3 PRG:36C3 AA
DEX ; CPU:$F6C4 PRG:36C4 CA
ASL $09 ; CPU:$F6C5 PRG:36C5 06 09
BCS EnginePathLoop_F69C ; CPU:$F6C7 PRG:36C7 B0 D3
LDA #$01 ; CPU:$F6C9 PRG:36C9 A9 01
STA $0A ; CPU:$F6CB PRG:36CB 85 0A
LDA #$00 ; CPU:$F6CD PRG:36CD A9 00
SEC ; CPU:$F6CF PRG:36CF 38
SBC $06 ; CPU:$F6D0 PRG:36D0 E5 06
STA $06 ; CPU:$F6D2 PRG:36D2 85 06
EnginePathOnOverflowClear_F6D4:
TXA ; CPU:$F6D4 PRG:36D4 8A
LDX $04 ; CPU:$F6D5 PRG:36D5 A6 04
CLC ; CPU:$F6D7 PRG:36D7 18
ADC $06 ; CPU:$F6D8 PRG:36D8 65 06
CLC ; CPU:$F6DA PRG:36DA 18
ADC $0A ; CPU:$F6DB PRG:36DB 65 0A
CMP ($02),Y ; CPU:$F6DD PRG:36DD D1 02
BNE EnginePathOnNonZero_F6E7 ; CPU:$F6DF PRG:36DF D0 06
RTS ; CPU:$F6E1 PRG:36E1 60
EnginePathLoop_F6E2:
LDX $04 ; CPU:$F6E2 PRG:36E2 A6 04
EnginePathLoop_F6E4:
CLC ; CPU:$F6E4 PRG:36E4 18
ADC $0A ; CPU:$F6E5 PRG:36E5 65 0A
EnginePathOnNonZero_F6E7:
STA ($02),Y ; CPU:$F6E7 PRG:36E7 91 02
INY ; CPU:$F6E9 PRG:36E9 C8
INY ; CPU:$F6EA PRG:36EA C8
INY ; CPU:$F6EB PRG:36EB C8
INY ; CPU:$F6EC PRG:36EC C8
DEX ; CPU:$F6ED PRG:36ED CA
BNE EnginePathLoop_F6E4 ; CPU:$F6EE PRG:36EE D0 F4
CLC ; CPU:$F6F0 PRG:36F0 18
ADC $06 ; CPU:$F6F1 PRG:36F1 65 06
CLC ; CPU:$F6F3 PRG:36F3 18
ADC $06 ; CPU:$F6F4 PRG:36F4 65 06
DEC $05 ; CPU:$F6F6 PRG:36F6 C6 05
BNE EnginePathLoop_F6E2 ; CPU:$F6F8 PRG:36F8 D0 E8
RTS ; CPU:$F6FA PRG:36FA 60
;------------------------------------------------------------
; ProcessResourceStateRoutine_F6FB
;
; Global:
; First-pass resource/input/collision entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Zero-page pointers, object state, or PPU state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessResourceStateRoutine_F6FB:
LDX $0B ; CPU:$F6FB PRG:36FB A6 0B
EnginePathLoop_F6FD:
STA ($02),Y ; CPU:$F6FD PRG:36FD 91 02
INY ; CPU:$F6FF PRG:36FF C8
INY ; CPU:$F700 PRG:3700 C8
INY ; CPU:$F701 PRG:3701 C8
INY ; CPU:$F702 PRG:3702 C8
DEX ; CPU:$F703 PRG:3703 CA
BNE EnginePathLoop_F6FD ; CPU:$F704 PRG:3704 D0 F7
RTS ; CPU:$F706 PRG:3706 60
;------------------------------------------------------------
; ProcessResourceStateRoutine_F707
;
; Global:
; First-pass resource/input/collision entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Zero-page pointers, object state, or PPU state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessResourceStateRoutine_F707:
LDA $08 ; CPU:$F707 PRG:3707 A5 08
LDX $04 ; CPU:$F709 PRG:3709 A6 04
EnginePathLoop_F70B:
STA ($02),Y ; CPU:$F70B PRG:370B 91 02
INY ; CPU:$F70D PRG:370D C8
INY ; CPU:$F70E PRG:370E C8
INY ; CPU:$F70F PRG:370F C8
INY ; CPU:$F710 PRG:3710 C8
CLC ; CPU:$F711 PRG:3711 18
ADC #$08 ; CPU:$F712 PRG:3712 69 08
DEX ; CPU:$F714 PRG:3714 CA
BNE EnginePathLoop_F70B ; CPU:$F715 PRG:3715 D0 F4
DEC $07 ; CPU:$F717 PRG:3717 C6 07
;------------------------------------------------------------
; EnginePath_F719
;
; Global:
; First-pass resource/input/collision entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Zero-page pointers, object state, or PPU state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
EnginePath_F719:
BNE ProcessResourceStateRoutine_F707 ; CPU:$F719 PRG:3719 D0 EC
RTS ; CPU:$F71B PRG:371B 60
;------------------------------------------------------------
; ProcessResourceStateRoutine_F71C
;
; Global:
; First-pass resource/input/collision entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Zero-page pointers, object state, or PPU state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessResourceStateRoutine_F71C:
CLC ; CPU:$F71C PRG:371C 18
LDY #$00 ; CPU:$F71D PRG:371D A0 00
LDA ($00),Y ; CPU:$F71F PRG:371F B1 00
BNE EnginePathContinue_F77C ; CPU:$F721 PRG:3721 D0 59
LDA ($02),Y ; CPU:$F723 PRG:3723 B1 02
BNE EnginePathContinue_F77C ; CPU:$F725 PRG:3725 D0 55
LDY #$0C ; CPU:$F727 PRG:3727 A0 0C
LDA ($02),Y ; CPU:$F729 PRG:3729 B1 02
LDY #$01 ; CPU:$F72B PRG:372B A0 01
ADC ($02),Y ; CPU:$F72D PRG:372D 71 02
STA $04 ; CPU:$F72F PRG:372F 85 04
LDA ($00),Y ; CPU:$F731 PRG:3731 B1 00
LDY #$0E ; CPU:$F733 PRG:3733 A0 0E
CLC ; CPU:$F735 PRG:3735 18
ADC ($00),Y ; CPU:$F736 PRG:3736 71 00
CMP $04 ; CPU:$F738 PRG:3738 C5 04
BCC EnginePathContinue_F77C ; CPU:$F73A PRG:373A 90 40
LDY #$0C ; CPU:$F73C PRG:373C A0 0C
LDA ($00),Y ; CPU:$F73E PRG:373E B1 00
LDY #$01 ; CPU:$F740 PRG:3740 A0 01
CLC ; CPU:$F742 PRG:3742 18
ADC ($00),Y ; CPU:$F743 PRG:3743 71 00
STA $04 ; CPU:$F745 PRG:3745 85 04
LDA ($02),Y ; CPU:$F747 PRG:3747 B1 02
LDY #$0E ; CPU:$F749 PRG:3749 A0 0E
CLC ; CPU:$F74B PRG:374B 18
ADC ($02),Y ; CPU:$F74C PRG:374C 71 02
CMP $04 ; CPU:$F74E PRG:374E C5 04
BCC EnginePathContinue_F77C ; CPU:$F750 PRG:3750 90 2A
LDY #$0D ; CPU:$F752 PRG:3752 A0 0D
LDA ($02),Y ; CPU:$F754 PRG:3754 B1 02
LDY #$03 ; CPU:$F756 PRG:3756 A0 03
CLC ; CPU:$F758 PRG:3758 18
ADC ($02),Y ; CPU:$F759 PRG:3759 71 02
STA $04 ; CPU:$F75B PRG:375B 85 04
LDA ($00),Y ; CPU:$F75D PRG:375D B1 00
LDY #$0F ; CPU:$F75F PRG:375F A0 0F
CLC ; CPU:$F761 PRG:3761 18
ADC ($00),Y ; CPU:$F762 PRG:3762 71 00
CMP $04 ; CPU:$F764 PRG:3764 C5 04
BCC EnginePathContinue_F77C ; CPU:$F766 PRG:3766 90 14
LDY #$0D ; CPU:$F768 PRG:3768 A0 0D
LDA ($00),Y ; CPU:$F76A PRG:376A B1 00
LDY #$03 ; CPU:$F76C PRG:376C A0 03
CLC ; CPU:$F76E PRG:376E 18
ADC ($00),Y ; CPU:$F76F PRG:376F 71 00
STA $04 ; CPU:$F771 PRG:3771 85 04
LDA ($02),Y ; CPU:$F773 PRG:3773 B1 02
LDY #$0F ; CPU:$F775 PRG:3775 A0 0F
CLC ; CPU:$F777 PRG:3777 18
ADC ($02),Y ; CPU:$F778 PRG:3778 71 02
CMP $04 ; CPU:$F77A PRG:377A C5 04
EnginePathContinue_F77C:
RTS ; CPU:$F77C PRG:377C 60
;------------------------------------------------------------
; ProcessResourceStateRoutine_F77D
;
; Global:
; First-pass resource/input/collision entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Zero-page pointers, object state, or PPU state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessResourceStateRoutine_F77D:
STA $00 ; CPU:$F77D PRG:377D 85 00
STX $01 ; CPU:$F77F PRG:377F 86 01
LDY #$04 ; CPU:$F781 PRG:3781 A0 04
LDA ($00),Y ; CPU:$F783 PRG:3783 B1 00
STA $03 ; CPU:$F785 PRG:3785 85 03
DEY ; CPU:$F787 PRG:3787 88
LDA ($00),Y ; CPU:$F788 PRG:3788 B1 00
STA $02 ; CPU:$F78A PRG:378A 85 02
DEY ; CPU:$F78C PRG:378C 88
LDA ($00),Y ; CPU:$F78D PRG:378D B1 00
STA $05 ; CPU:$F78F PRG:378F 85 05
DEY ; CPU:$F791 PRG:3791 88
LDA ($00),Y ; CPU:$F792 PRG:3792 B1 00
STA $04 ; CPU:$F794 PRG:3794 85 04
DEY ; CPU:$F796 PRG:3796 88
LDA ($00),Y ; CPU:$F797 PRG:3797 B1 00
STA $06 ; CPU:$F799 PRG:3799 85 06
LDA #$05 ; CPU:$F79B PRG:379B A9 05
EnginePathLoop_F79D:
CLC ; CPU:$F79D PRG:379D 18
ADC a:$0000,Y ; CPU:$F79E PRG:379E 79 00 00
STA a:$0000,Y ; CPU:$F7A1 PRG:37A1 99 00 00
LDA #$00 ; CPU:$F7A4 PRG:37A4 A9 00
ADC a:$0001,Y ; CPU:$F7A6 PRG:37A6 79 01 00
STA a:$0001,Y ; CPU:$F7A9 PRG:37A9 99 01 00
LDY #$00 ; CPU:$F7AC PRG:37AC A0 00
LDX $05 ; CPU:$F7AE PRG:37AE A6 05
EnginePathLoop_F7B0:
LDA ($00),Y ; CPU:$F7B0 PRG:37B0 B1 00
STA ($02),Y ; CPU:$F7B2 PRG:37B2 91 02
INY ; CPU:$F7B4 PRG:37B4 C8
DEX ; CPU:$F7B5 PRG:37B5 CA
BNE EnginePathLoop_F7B0 ; CPU:$F7B6 PRG:37B6 D0 F8
LDA $06 ; CPU:$F7B8 PRG:37B8 A5 06
LDY #$02 ; CPU:$F7BA PRG:37BA A0 02
DEC $04 ; CPU:$F7BC PRG:37BC C6 04
BNE EnginePathLoop_F79D ; CPU:$F7BE PRG:37BE D0 DD
RTS ; CPU:$F7C0 PRG:37C0 60
;------------------------------------------------------------
; Audio driver code and embedded tables
; CPU $F7C1-$FC77
; PRG $37C1-$3C77
;
; Pass 1 recursively traced from AudioDriverCode ($F7C1).
; Direct branches, jumps, and subroutine calls are decoded.
; Bytes not reached by that trace remain explicit .byte data.
;------------------------------------------------------------
;------------------------------------------------------------
; AudioDriverCode
;
; Global:
; First-pass audio-driver entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the audio naming pass.
;
; Parameters:
; Audio workspace and APU register state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
AudioDriverCode:
LDA #$FF ; CPU:$F7C1 PRG:37C1 A9 FF
STA JOY2 ; CPU:$F7C3 PRG:37C3 8D 17 40
JSR ProcessAudioStateRoutine_F898 ; CPU:$F7C6 PRG:37C6 20 98 F8
JSR ProcessAudioStateRoutine_FA2E ; CPU:$F7C9 PRG:37C9 20 2E FA
JSR ProcessAudioStateRoutine_FACF ; CPU:$F7CC PRG:37CC 20 CF FA
JSR ProcessAudioStateRoutine_FB22 ; CPU:$F7CF PRG:37CF 20 22 FB
LDA #$00 ; CPU:$F7D2 PRG:37D2 A9 00
STA AudioRequest4 ; CPU:$F7D4 PRG:37D4 85 FF
STA AudioRequest3 ; CPU:$F7D6 PRG:37D6 85 FE
STA AudioRequest1 ; CPU:$F7D8 PRG:37D8 85 FC
STA AudioRequest0 ; CPU:$F7DA PRG:37DA 85 FB
LDY $07FE ; CPU:$F7DC PRG:37DC AC FE 07
LDA AudioNoiseState ; CPU:$F7DF PRG:37DF A5 F3
AND #$1C ; CPU:$F7E1 PRG:37E1 29 1C
BEQ AudioPathOnZero_F7EC ; CPU:$F7E3 PRG:37E3 F0 07
INC $07FE ; CPU:$F7E5 PRG:37E5 EE FE 07
CPY #$50 ; CPU:$F7E8 PRG:37E8 C0 50
BCC AudioPathContinue_F7F2 ; CPU:$F7EA PRG:37EA 90 06
AudioPathOnZero_F7EC:
TYA ; CPU:$F7EC PRG:37EC 98
BEQ AudioPathContinue_F7F2 ; CPU:$F7ED PRG:37ED F0 03
DEC $07FE ; CPU:$F7EF PRG:37EF CE FE 07
AudioPathContinue_F7F2:
STY $4011 ; CPU:$F7F2 PRG:37F2 8C 11 40
RTS ; CPU:$F7F5 PRG:37F5 60
;------------------------------------------------------------
; UpdatePulse1Routine_F7F6
;
; Global:
; First-pass audio-driver entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the audio naming pass.
;
; Parameters:
; Audio workspace and APU register state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
UpdatePulse1Routine_F7F6:
STX SQ1_VOL ; CPU:$F7F6 PRG:37F6 8E 00 40
STY SQ1_SWEEP ; CPU:$F7F9 PRG:37F9 8C 01 40
RTS ; CPU:$F7FC PRG:37FC 60
;------------------------------------------------------------
; ProcessAudioStateRoutine_F7FD
;
; Global:
; First-pass audio-driver entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the audio naming pass.
;
; Parameters:
; Audio workspace and APU register state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessAudioStateRoutine_F7FD:
JSR UpdatePulse1Routine_F7F6 ; CPU:$F7FD PRG:37FD 20 F6 F7
;------------------------------------------------------------
; ProcessAudioStateRoutine_F800
;
; Global:
; First-pass audio-driver entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the audio naming pass.
;
; Parameters:
; Audio workspace and APU register state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessAudioStateRoutine_F800:
LDX #$00 ; CPU:$F800 PRG:3800 A2 00
UpdatePulse1Loop_F802:
TAY ; CPU:$F802 PRG:3802 A8
LDA $FF01,Y ; CPU:$F803 PRG:3803 B9 01 FF
BEQ AudioPathOnZero_F813 ; CPU:$F806 PRG:3806 F0 0B
STA SQ1_LO,X ; CPU:$F808 PRG:3808 9D 02 40
LDA $FF00,Y ; CPU:$F80B PRG:380B B9 00 FF
ORA #$08 ; CPU:$F80E PRG:380E 09 08
STA SQ1_HI,X ; CPU:$F810 PRG:3810 9D 03 40
AudioPathOnZero_F813:
RTS ; CPU:$F813 PRG:3813 60
;------------------------------------------------------------
; ProcessAudioStateRoutine_F814
;
; Global:
; First-pass audio-driver entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the audio naming pass.
;
; Parameters:
; Audio workspace and APU register state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessAudioStateRoutine_F814:
LDX #$04 ; CPU:$F814 PRG:3814 A2 04
BNE UpdatePulse1Loop_F802 ; CPU:$F816 PRG:3816 D0 EA
;------------------------------------------------------------
; ProcessAudioStateRoutine_F818
;
; Global:
; First-pass audio-driver entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the audio naming pass.
;
; Parameters:
; Audio workspace and APU register state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessAudioStateRoutine_F818:
LDX #$08 ; CPU:$F818 PRG:3818 A2 08
BNE UpdatePulse1Loop_F802 ; CPU:$F81A PRG:381A D0 E6
STY $7E85 ; CPU:$F81C PRG:381C 8C 85 7E
.byte $77, $70, $69, $62, $5B, $54, $4D, $46, $3F, $38, $31, $2A, $23, $04, $0E, $04 ; CPU:$F81F PRG:381F 0B
.byte $2E, $0E, $2E, $2C, $0E, $2C, $2A, $0E, $2A, $28, $2C, $28, $26, $91, $91, $51 ; CPU:$F82F PRG:382F 0B
.byte $92, $92, $92, $53, $93, $93, $93, $54, $94, $94, $54, $54, $95, $95, $95, $55 ; CPU:$F83F PRG:383F 0B
.byte $95, $95, $96, $56, $96, $96, $97, $57, $97, $97, $57, $57, $98, $98, $98, $58 ; CPU:$F84F PRG:384F 0B
.byte $98, $99, $99, $59, $9A, $9A, $9B, $5C, $9D, $9E, $5A, $5A ; CPU:$F85F PRG:385F 0B
AudioPathLoop_F86B:
STY AudioPulse1State ; CPU:$F86B PRG:386B 84 F0
LDA #$8C ; CPU:$F86D PRG:386D A9 8C
STA AudioPeriodOrEnvelope ; CPU:$F86F PRG:386F 85 F4
AudioPathLoop_F871:
LDA AudioPeriodOrEnvelope ; CPU:$F871 PRG:3871 A5 F4
LDY #$10 ; CPU:$F873 PRG:3873 A0 10
AudioPathLoop_F875:
CMP $F81B,Y ; CPU:$F875 PRG:3875 D9 1B F8
BNE AudioPathOnNonZero_F881 ; CPU:$F878 PRG:3878 D0 07
LDA $F82B,Y ; CPU:$F87A PRG:387A B9 2B F8
LDY #$7F ; CPU:$F87D PRG:387D A0 7F
BNE AudioPathOnNonZero_F890 ; CPU:$F87F PRG:387F D0 0F
AudioPathOnNonZero_F881:
DEY ; CPU:$F881 PRG:3881 88
BNE AudioPathLoop_F875 ; CPU:$F882 PRG:3882 D0 F1
CMP #$16 ; CPU:$F884 PRG:3884 C9 16
BCS AudioPathContinue_F895 ; CPU:$F886 PRG:3886 B0 0D
AND #$03 ; CPU:$F888 PRG:3888 29 03
BNE AudioPathContinue_F895 ; CPU:$F88A PRG:388A D0 09
LDY #$A3 ; CPU:$F88C PRG:388C A0 A3
LDA #$2A ; CPU:$F88E PRG:388E A9 2A
AudioPathOnNonZero_F890:
LDX #$9F ; CPU:$F890 PRG:3890 A2 9F
JSR ProcessAudioStateRoutine_F7FD ; CPU:$F892 PRG:3892 20 FD F7
AudioPathContinue_F895:
JMP ProcessAudioStateDispatch_F9CB ; CPU:$F895 PRG:3895 4C CB F9
;------------------------------------------------------------
; ProcessAudioStateRoutine_F898
;
; Global:
; First-pass audio-driver entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the audio naming pass.
;
; Parameters:
; Audio workspace and APU register state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessAudioStateRoutine_F898:
LDY AudioRequest4 ; CPU:$F898 PRG:3898 A4 FF
LDA $F0 ; CPU:$F89A PRG:389A A5 F0
LSR AudioRequest4 ; CPU:$F89C PRG:389C 46 FF
BCS AudioPathLoop_F86B ; CPU:$F89E PRG:389E B0 CB
LSR A ; CPU:$F8A0 PRG:38A0 4A
BCS AudioPathLoop_F871 ; CPU:$F8A1 PRG:38A1 B0 CE
LSR AudioRequest4 ; CPU:$F8A3 PRG:38A3 46 FF
BCC UpdatePulse1OnNoCarry_F8F9 ; CPU:$F8A5 PRG:38A5 90 52
STY AudioPulse1State ; CPU:$F8A7 PRG:38A7 84 F0
LDA #$2F ; CPU:$F8A9 PRG:38A9 A9 2F
STA $07F4 ; CPU:$F8AB PRG:38AB 8D F4 07
LDX #$5F ; CPU:$F8AE PRG:38AE A2 5F
LDY #$93 ; CPU:$F8B0 PRG:38B0 A0 93
JSR UpdatePulse1Routine_F7F6 ; CPU:$F8B2 PRG:38B2 20 F6 F7
AudioPathLoop_F8B5:
LDA $07F4 ; CPU:$F8B5 PRG:38B5 AD F4 07
CMP #$C0 ; CPU:$F8B8 PRG:38B8 C9 C0
BCC AudioPathOnNoCarry_F8BD ; CPU:$F8BA PRG:38BA 90 01
LSR A ; CPU:$F8BC PRG:38BC 4A
AudioPathOnNoCarry_F8BD:
LSR A ; CPU:$F8BD PRG:38BD 4A
LSR A ; CPU:$F8BE PRG:38BE 4A
LSR A ; CPU:$F8BF PRG:38BF 4A
LSR A ; CPU:$F8C0 PRG:38C0 4A
CLC ; CPU:$F8C1 PRG:38C1 18
ADC $07F4 ; CPU:$F8C2 PRG:38C2 6D F4 07
BCC UpdatePulse1OnNoCarry_F8EA ; CPU:$F8C5 PRG:38C5 90 23
AudioPathLoop_F8C7:
JMP ProcessAudioStateDispatch_F9CF ; CPU:$F8C7 PRG:38C7 4C CF F9
AudioPathLoop_F8CA:
STY AudioPulse1State ; CPU:$F8CA PRG:38CA 84 F0
LDA #$FE ; CPU:$F8CC PRG:38CC A9 FE
STA $07F4 ; CPU:$F8CE PRG:38CE 8D F4 07
LDX #$5C ; CPU:$F8D1 PRG:38D1 A2 5C
LDY #$BA ; CPU:$F8D3 PRG:38D3 A0 BA
JSR UpdatePulse1Routine_F7F6 ; CPU:$F8D5 PRG:38D5 20 F6 F7
AudioPathLoop_F8D8:
LDA $07F4 ; CPU:$F8D8 PRG:38D8 AD F4 07
LSR A ; CPU:$F8DB PRG:38DB 4A
LSR A ; CPU:$F8DC PRG:38DC 4A
LSR A ; CPU:$F8DD PRG:38DD 4A
BNE AudioPathOnNonZero_F8E2 ; CPU:$F8DE PRG:38DE D0 02
LDA #$01 ; CPU:$F8E0 PRG:38E0 A9 01
AudioPathOnNonZero_F8E2:
EOR #$FF ; CPU:$F8E2 PRG:38E2 49 FF
SEC ; CPU:$F8E4 PRG:38E4 38
ADC $07F4 ; CPU:$F8E5 PRG:38E5 6D F4 07
BCC AudioPathLoop_F8C7 ; CPU:$F8E8 PRG:38E8 90 DD
UpdatePulse1OnNoCarry_F8EA:
STA $07F4 ; CPU:$F8EA PRG:38EA 8D F4 07
ROL A ; CPU:$F8ED PRG:38ED 2A
ROL A ; CPU:$F8EE PRG:38EE 2A
STA SQ1_LO ; CPU:$F8EF PRG:38EF 8D 02 40
ROL A ; CPU:$F8F2 PRG:38F2 2A
AND #$03 ; CPU:$F8F3 PRG:38F3 29 03
STA SQ1_HI ; CPU:$F8F5 PRG:38F5 8D 03 40
RTS ; CPU:$F8F8 PRG:38F8 60
UpdatePulse1OnNoCarry_F8F9:
LSR A ; CPU:$F8F9 PRG:38F9 4A
BCS AudioPathLoop_F8B5 ; CPU:$F8FA PRG:38FA B0 B9
LSR AudioRequest4 ; CPU:$F8FC PRG:38FC 46 FF
BCS AudioPathLoop_F8CA ; CPU:$F8FE PRG:38FE B0 CA
LSR A ; CPU:$F900 PRG:3900 4A
BCS AudioPathLoop_F8D8 ; CPU:$F901 PRG:3901 B0 D5
LSR AudioRequest4 ; CPU:$F903 PRG:3903 46 FF
BCC UpdatePulse1OnNoCarry_F95F ; CPU:$F905 PRG:3905 90 58
STY AudioPulse1State ; CPU:$F907 PRG:3907 84 F0
LDA #$3A ; CPU:$F909 PRG:3909 A9 3A
STA AudioPeriodOrEnvelope ; CPU:$F90B PRG:390B 85 F4
LDA #$6A ; CPU:$F90D PRG:390D A9 6A
STA $07F4 ; CPU:$F90F PRG:390F 8D F4 07
LDA #$82 ; CPU:$F912 PRG:3912 A9 82
STA SQ1_SWEEP ; CPU:$F914 PRG:3914 8D 01 40
UpdatePulse1Loop_F917:
LDA AudioPeriodOrEnvelope ; CPU:$F917 PRG:3917 A5 F4
CMP #$34 ; CPU:$F919 PRG:3919 C9 34
BCC UpdatePulse1OnNoCarry_F935 ; CPU:$F91B PRG:391B 90 18
BEQ UpdatePulse1OnZero_F92B ; CPU:$F91D PRG:391D F0 0C
ORA #$90 ; CPU:$F91F PRG:391F 09 90
STA SQ1_VOL ; CPU:$F921 PRG:3921 8D 00 40
LDA $07F4 ; CPU:$F924 PRG:3924 AD F4 07
SBC #$FC ; CPU:$F927 PRG:3927 E9 FC
BNE UpdatePulse1OnNonZero_F94D ; CPU:$F929 PRG:3929 D0 22
UpdatePulse1OnZero_F92B:
LDX #$FF ; CPU:$F92B PRG:392B A2 FF
STX $07F4 ; CPU:$F92D PRG:392D 8E F4 07
LDY #$8C ; CPU:$F930 PRG:3930 A0 8C
STY SQ1_SWEEP ; CPU:$F932 PRG:3932 8C 01 40
UpdatePulse1OnNoCarry_F935:
LSR A ; CPU:$F935 PRG:3935 4A
LSR A ; CPU:$F936 PRG:3936 4A
ORA #$90 ; CPU:$F937 PRG:3937 09 90
STA SQ1_VOL ; CPU:$F939 PRG:3939 8D 00 40
LDA AudioPeriodOrEnvelope ; CPU:$F93C PRG:393C A5 F4
AND #$03 ; CPU:$F93E PRG:393E 29 03
BNE AudioPathOnNonZero_F95C ; CPU:$F940 PRG:3940 D0 1A
LDA $07F4 ; CPU:$F942 PRG:3942 AD F4 07
LSR A ; CPU:$F945 PRG:3945 4A
LSR A ; CPU:$F946 PRG:3946 4A
LSR A ; CPU:$F947 PRG:3947 4A
LSR A ; CPU:$F948 PRG:3948 4A
SEC ; CPU:$F949 PRG:3949 38
SBC $07F4 ; CPU:$F94A PRG:394A ED F4 07
UpdatePulse1OnNonZero_F94D:
STA $07F4 ; CPU:$F94D PRG:394D 8D F4 07
ROL A ; CPU:$F950 PRG:3950 2A
ROL A ; CPU:$F951 PRG:3951 2A
ROL A ; CPU:$F952 PRG:3952 2A
STA SQ1_LO ; CPU:$F953 PRG:3953 8D 02 40
ROL A ; CPU:$F956 PRG:3956 2A
AND #$07 ; CPU:$F957 PRG:3957 29 07
STA SQ1_HI ; CPU:$F959 PRG:3959 8D 03 40
AudioPathOnNonZero_F95C:
JMP ProcessAudioStateDispatch_F9CB ; CPU:$F95C PRG:395C 4C CB F9
UpdatePulse1OnNoCarry_F95F:
LSR A ; CPU:$F95F PRG:395F 4A
BCS UpdatePulse1Loop_F917 ; CPU:$F960 PRG:3960 B0 B5
LSR $FF ; CPU:$F962 PRG:3962 46 FF
BCC AudioPathOnNoCarry_F9D9 ; CPU:$F964 PRG:3964 90 73
STY $F0 ; CPU:$F966 PRG:3966 84 F0
LDA #$30 ; CPU:$F968 PRG:3968 A9 30
STA AudioPeriodOrEnvelope ; CPU:$F96A PRG:396A 85 F4
LDA #$8A ; CPU:$F96C PRG:396C A9 8A
STA SQ1_SWEEP ; CPU:$F96E PRG:396E 8D 01 40
AudioPathLoop_F971:
LDY $F4 ; CPU:$F971 PRG:3971 A4 F4
LDA $F83A,Y ; CPU:$F973 PRG:3973 B9 3A F8
UpdatePulse1Dispatch_F976:
LDX $F83A,Y ; CPU:$F976 PRG:3976 BE 3A F8
STX SQ1_VOL ; CPU:$F979 PRG:3979 8E 00 40
BNE UpdatePulse1OnNonZero_F9C3 ; CPU:$F97C PRG:397C D0 45
AudioPathLoop_F97E:
STY $F0 ; CPU:$F97E PRG:397E 84 F0
LDA #$28 ; CPU:$F980 PRG:3980 A9 28
STA $F4 ; CPU:$F982 PRG:3982 85 F4
LDX #$82 ; CPU:$F984 PRG:3984 A2 82
LDY #$A7 ; CPU:$F986 PRG:3986 A0 A7
LDA #$30 ; CPU:$F988 PRG:3988 A9 30
JSR ProcessAudioStateRoutine_F7FD ; CPU:$F98A PRG:398A 20 FD F7
AudioPathLoop_F98D:
LDA $F4 ; CPU:$F98D PRG:398D A5 F4
CMP #$25 ; CPU:$F98F PRG:398F C9 25
BNE AudioPathOnNonZero_F999 ; CPU:$F991 PRG:3991 D0 06
LDX #$5F ; CPU:$F993 PRG:3993 A2 5F
LDY #$F6 ; CPU:$F995 PRG:3995 A0 F6
BNE AudioPathOnNonZero_F9A9 ; CPU:$F997 PRG:3997 D0 10
AudioPathOnNonZero_F999:
CMP #$20 ; CPU:$F999 PRG:3999 C9 20
BNE AudioPathOnNonZero_F9A1 ; CPU:$F99B PRG:399B D0 04
LDY #$BC ; CPU:$F99D PRG:399D A0 BC
BNE AudioPathOnNonZero_F9A7 ; CPU:$F99F PRG:399F D0 06
AudioPathOnNonZero_F9A1:
CMP #$10 ; CPU:$F9A1 PRG:39A1 C9 10
BNE ProcessAudioStateDispatch_F9CB ; CPU:$F9A3 PRG:39A3 D0 26
LDY #$9C ; CPU:$F9A5 PRG:39A5 A0 9C
AudioPathOnNonZero_F9A7:
LDX #$48 ; CPU:$F9A7 PRG:39A7 A2 48
AudioPathOnNonZero_F9A9:
JSR UpdatePulse1Routine_F7F6 ; CPU:$F9A9 PRG:39A9 20 F6 F7
BNE ProcessAudioStateDispatch_F9CB ; CPU:$F9AC PRG:39AC D0 1D
AudioPathLoop_F9AE:
STY $F0 ; CPU:$F9AE PRG:39AE 84 F0
LDA #$17 ; CPU:$F9B0 PRG:39B0 A9 17
STA $F4 ; CPU:$F9B2 PRG:39B2 85 F4
LDX #$5F ; CPU:$F9B4 PRG:39B4 A2 5F
LDY #$7F ; CPU:$F9B6 PRG:39B6 A0 7F
JSR UpdatePulse1Routine_F7F6 ; CPU:$F9B8 PRG:39B8 20 F6 F7
AudioPathLoop_F9BB:
LDA $F4 ; CPU:$F9BB PRG:39BB A5 F4
AND #$07 ; CPU:$F9BD PRG:39BD 29 07
TAY ; CPU:$F9BF PRG:39BF A8
LDA $FFC2,Y ; CPU:$F9C0 PRG:39C0 B9 C2 FF
UpdatePulse1OnNonZero_F9C3:
STA SQ1_LO ; CPU:$F9C3 PRG:39C3 8D 02 40
LDA #$08 ; CPU:$F9C6 PRG:39C6 A9 08
STA SQ1_HI ; CPU:$F9C8 PRG:39C8 8D 03 40
ProcessAudioStateDispatch_F9CB:
DEC $F4 ; CPU:$F9CB PRG:39CB C6 F4
BNE AudioPathOnNonZero_F9D8 ; CPU:$F9CD PRG:39CD D0 09
ProcessAudioStateDispatch_F9CF:
LDA #$00 ; CPU:$F9CF PRG:39CF A9 00
STA $F0 ; CPU:$F9D1 PRG:39D1 85 F0
;------------------------------------------------------------
; UpdatePulse1Routine_F9D3
;
; Global:
; First-pass audio-driver entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the audio naming pass.
;
; Parameters:
; Audio workspace and APU register state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
UpdatePulse1Routine_F9D3:
LDA #$90 ; CPU:$F9D3 PRG:39D3 A9 90
STA SQ1_VOL ; CPU:$F9D5 PRG:39D5 8D 00 40
AudioPathOnNonZero_F9D8:
RTS ; CPU:$F9D8 PRG:39D8 60
AudioPathOnNoCarry_F9D9:
LSR A ; CPU:$F9D9 PRG:39D9 4A
BCS AudioPathLoop_F971 ; CPU:$F9DA PRG:39DA B0 95
LSR $FF ; CPU:$F9DC PRG:39DC 46 FF
BCS AudioPathLoop_F97E ; CPU:$F9DE PRG:39DE B0 9E
LSR A ; CPU:$F9E0 PRG:39E0 4A
BCS AudioPathLoop_F98D ; CPU:$F9E1 PRG:39E1 B0 AA
LSR $FF ; CPU:$F9E3 PRG:39E3 46 FF
BCS AudioPathLoop_F9AE ; CPU:$F9E5 PRG:39E5 B0 C7
LSR A ; CPU:$F9E7 PRG:39E7 4A
BCS AudioPathLoop_F9BB ; CPU:$F9E8 PRG:39E8 B0 D1
LSR $FF ; CPU:$F9EA PRG:39EA 46 FF
BCS AudioPathOnCarry_F9F2 ; CPU:$F9EC PRG:39EC B0 04
LSR A ; CPU:$F9EE PRG:39EE 4A
BCS AudioPathOnCarry_F9FC ; CPU:$F9EF PRG:39EF B0 0B
RTS ; CPU:$F9F1 PRG:39F1 60
AudioPathOnCarry_F9F2:
STY $F0 ; CPU:$F9F2 PRG:39F2 84 F0
LDA #$20 ; CPU:$F9F4 PRG:39F4 A9 20
STA $F4 ; CPU:$F9F6 PRG:39F6 85 F4
LDA #$8A ; CPU:$F9F8 PRG:39F8 A9 8A
BNE UpdatePulse1OnNonZero_FA04 ; CPU:$F9FA PRG:39FA D0 08
AudioPathOnCarry_F9FC:
LDY $F4 ; CPU:$F9FC PRG:39FC A4 F4
CPY #$19 ; CPU:$F9FE PRG:39FE C0 19
BNE AudioPathOnNonZero_FA07 ; CPU:$FA00 PRG:3A00 D0 05
LDA #$82 ; CPU:$FA02 PRG:3A02 A9 82
UpdatePulse1OnNonZero_FA04:
STA SQ1_SWEEP ; CPU:$FA04 PRG:3A04 8D 01 40
AudioPathOnNonZero_FA07:
LDA #$47 ; CPU:$FA07 PRG:3A07 A9 47
JMP UpdatePulse1Dispatch_F976 ; CPU:$FA09 PRG:3A09 4C 76 F9
;------------------------------------------------------------
; UpdatePulse2Routine_FA0C
;
; Global:
; First-pass audio-driver entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the audio naming pass.
;
; Parameters:
; Audio workspace and APU register state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
UpdatePulse2Routine_FA0C:
STY $F1 ; CPU:$FA0C PRG:3A0C 84 F1
STX $07FF ; CPU:$FA0E PRG:3A0E 8E FF 07
LDA #$9F ; CPU:$FA11 PRG:3A11 A9 9F
STA SQ2_VOL ; CPU:$FA13 PRG:3A13 8D 04 40
LDA #$7F ; CPU:$FA16 PRG:3A16 A9 7F
STA SQ2_SWEEP ; CPU:$FA18 PRG:3A18 8D 05 40
LDA #$08 ; CPU:$FA1B PRG:3A1B A9 08
STA SQ2_HI ; CPU:$FA1D PRG:3A1D 8D 07 40
RTS ; CPU:$FA20 PRG:3A20 60
AudioPathLoop_FA21:
LDX #$08 ; CPU:$FA21 PRG:3A21 A2 08
JSR UpdatePulse2Routine_FA0C ; CPU:$FA23 PRG:3A23 20 0C FA
AudioPathLoop_FA26:
LDY $07FF ; CPU:$FA26 PRG:3A26 AC FF 07
LDA $FFB9,Y ; CPU:$FA29 PRG:3A29 B9 B9 FF
BNE UpdatePulse2OnNonZero_FA4E ; CPU:$FA2C PRG:3A2C D0 20
;------------------------------------------------------------
; ProcessAudioStateRoutine_FA2E
;
; Global:
; First-pass audio-driver entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the audio naming pass.
;
; Parameters:
; Audio workspace and APU register state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessAudioStateRoutine_FA2E:
LDY $FE ; CPU:$FA2E PRG:3A2E A4 FE
LDA $F1 ; CPU:$FA30 PRG:3A30 A5 F1
LSR $FE ; CPU:$FA32 PRG:3A32 46 FE
BCS AudioPathLoop_FA21 ; CPU:$FA34 PRG:3A34 B0 EB
LSR A ; CPU:$FA36 PRG:3A36 4A
BCS AudioPathLoop_FA26 ; CPU:$FA37 PRG:3A37 B0 ED
LSR $FE ; CPU:$FA39 PRG:3A39 46 FE
BCS AudioPathOnCarry_FA41 ; CPU:$FA3B PRG:3A3B B0 04
LSR A ; CPU:$FA3D PRG:3A3D 4A
BCS AudioPathOnCarry_FA46 ; CPU:$FA3E PRG:3A3E B0 06
RTS ; CPU:$FA40 PRG:3A40 60
AudioPathOnCarry_FA41:
LDX #$23 ; CPU:$FA41 PRG:3A41 A2 23
JSR UpdatePulse2Routine_FA0C ; CPU:$FA43 PRG:3A43 20 0C FA
AudioPathOnCarry_FA46:
LDA $07FF ; CPU:$FA46 PRG:3A46 AD FF 07
LSR A ; CPU:$FA49 PRG:3A49 4A
TAY ; CPU:$FA4A PRG:3A4A A8
LDA $FA5B,Y ; CPU:$FA4B PRG:3A4B B9 5B FA
UpdatePulse2OnNonZero_FA4E:
STA SQ2_LO ; CPU:$FA4E PRG:3A4E 8D 06 40
DEC $07FF ; CPU:$FA51 PRG:3A51 CE FF 07
BNE AudioPathOnNonZero_FA5A ; CPU:$FA54 PRG:3A54 D0 04
LDA #$00 ; CPU:$FA56 PRG:3A56 A9 00
STA $F1 ; CPU:$FA58 PRG:3A58 85 F1
AudioPathOnNonZero_FA5A:
RTS ; CPU:$FA5A PRG:3A5A 60
.byte $00, $54, $00, $5F, $00, $6A, $00, $71, $00, $6A, $00, $71, $00, $7E, $00, $86 ; CPU:$FA5B PRG:3A5B 0B
.byte $00, $7E, $10, $12, $12, $12, $15, $15, $15, $13, $13, $13, $13, $16, $16, $16 ; CPU:$FA6B PRG:3A6B 0B
.byte $16, $16, $14, $14, $14, $14, $17, $17, $17, $17, $15, $15, $15, $15, $18, $19 ; CPU:$FA7B PRG:3A7B 0B
.byte $19, $1A, $1A, $1A, $1B, $1B, $1C, $1D, $1E, $1F, $13, $15, $16, $16, $18, $18 ; CPU:$FA8B PRG:3A8B 0B
.byte $1A, $1A, $07, $05, $05, $05, $05, $05, $06, $06, $06, $04, $04, $04, $04, $05 ; CPU:$FA9B PRG:3A9B 0B
.byte $05, $05, $09, $09, $0A, $0A, $07, $07, $08, $08 ; CPU:$FAAB PRG:3AAB 0B
AudioPathLoop_FAB5:
STY $F2 ; CPU:$FAB5 PRG:3AB5 84 F2
LDA #$30 ; CPU:$FAB7 PRG:3AB7 A9 30
STA $07FB ; CPU:$FAB9 PRG:3AB9 8D FB 07
UpdateNoiseLoop_FABC:
LDY $07FB ; CPU:$FABC PRG:3ABC AC FB 07
LDA $FA6C,Y ; CPU:$FABF PRG:3ABF B9 6C FA
STA NOISE_VOL ; CPU:$FAC2 PRG:3AC2 8D 0C 40
LDA $07FB ; CPU:$FAC5 PRG:3AC5 AD FB 07
LSR A ; CPU:$FAC8 PRG:3AC8 4A
TAY ; CPU:$FAC9 PRG:3AC9 A8
LDA $FA9C,Y ; CPU:$FACA PRG:3ACA B9 9C FA
BNE UpdateNoiseOnNonZero_FB10 ; CPU:$FACD PRG:3ACD D0 41
;------------------------------------------------------------
; ProcessAudioStateRoutine_FACF
;
; Global:
; First-pass audio-driver entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the audio naming pass.
;
; Parameters:
; Audio workspace and APU register state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessAudioStateRoutine_FACF:
LDY $FC ; CPU:$FACF PRG:3ACF A4 FC
LDA $F2 ; CPU:$FAD1 PRG:3AD1 A5 F2
LSR $FC ; CPU:$FAD3 PRG:3AD3 46 FC
BCS AudioPathLoop_FAB5 ; CPU:$FAD5 PRG:3AD5 B0 DE
LSR A ; CPU:$FAD7 PRG:3AD7 4A
BCS UpdateNoiseLoop_FABC ; CPU:$FAD8 PRG:3AD8 B0 E2
LSR $FC ; CPU:$FADA PRG:3ADA 46 FC
BCS AudioPathOnCarry_FAE9 ; CPU:$FADC PRG:3ADC B0 0B
LSR A ; CPU:$FADE PRG:3ADE 4A
BCS UpdateNoiseOnCarry_FAF0 ; CPU:$FADF PRG:3ADF B0 0F
LSR $FC ; CPU:$FAE1 PRG:3AE1 46 FC
BCS AudioPathOnCarry_FAFE ; CPU:$FAE3 PRG:3AE3 B0 19
LSR A ; CPU:$FAE5 PRG:3AE5 4A
BCS UpdateNoiseOnCarry_FB05 ; CPU:$FAE6 PRG:3AE6 B0 1D
RTS ; CPU:$FAE8 PRG:3AE8 60
AudioPathOnCarry_FAE9:
STY $F2 ; CPU:$FAE9 PRG:3AE9 84 F2
LDA #$20 ; CPU:$FAEB PRG:3AEB A9 20
STA $07FB ; CPU:$FAED PRG:3AED 8D FB 07
UpdateNoiseOnCarry_FAF0:
LDY $07FB ; CPU:$FAF0 PRG:3AF0 AC FB 07
LDA $FF50,Y ; CPU:$FAF3 PRG:3AF3 B9 50 FF
STA NOISE_VOL ; CPU:$FAF6 PRG:3AF6 8D 0C 40
LDA $FF70,Y ; CPU:$FAF9 PRG:3AF9 B9 70 FF
BNE UpdateNoiseOnNonZero_FB10 ; CPU:$FAFC PRG:3AFC D0 12
AudioPathOnCarry_FAFE:
STY $F2 ; CPU:$FAFE PRG:3AFE 84 F2
LDA #$09 ; CPU:$FB00 PRG:3B00 A9 09
STA $07FB ; CPU:$FB02 PRG:3B02 8D FB 07
UpdateNoiseOnCarry_FB05:
LDY $07FB ; CPU:$FB05 PRG:3B05 AC FB 07
LDA $FF90,Y ; CPU:$FB08 PRG:3B08 B9 90 FF
STA NOISE_VOL ; CPU:$FB0B PRG:3B0B 8D 0C 40
LDA #$04 ; CPU:$FB0E PRG:3B0E A9 04
UpdateNoiseOnNonZero_FB10:
STA NOISE_LO ; CPU:$FB10 PRG:3B10 8D 0E 40
LDA #$08 ; CPU:$FB13 PRG:3B13 A9 08
STA NOISE_HI ; CPU:$FB15 PRG:3B15 8D 0F 40
DEC $07FB ; CPU:$FB18 PRG:3B18 CE FB 07
BNE AudioPathOnNonZero_FB21 ; CPU:$FB1B PRG:3B1B D0 04
LDA #$00 ; CPU:$FB1D PRG:3B1D A9 00
STA $F2 ; CPU:$FB1F PRG:3B1F 85 F2
AudioPathOnNonZero_FB21:
RTS ; CPU:$FB21 PRG:3B21 60
;------------------------------------------------------------
; ProcessAudioStateRoutine_FB22
;
; Global:
; First-pass audio-driver entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the audio naming pass.
;
; Parameters:
; Audio workspace and APU register state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessAudioStateRoutine_FB22:
LDA $FB ; CPU:$FB22 PRG:3B22 A5 FB
BNE AudioPathLoop_FB2B ; CPU:$FB24 PRG:3B24 D0 05
LDA $F3 ; CPU:$FB26 PRG:3B26 A5 F3
BNE AudioPathOnNonZero_FB6E ; CPU:$FB28 PRG:3B28 D0 44
RTS ; CPU:$FB2A PRG:3B2A 60
AudioPathLoop_FB2B:
STA $F3 ; CPU:$FB2B PRG:3B2B 85 F3
LDY #$00 ; CPU:$FB2D PRG:3B2D A0 00
STY $F8 ; CPU:$FB2F PRG:3B2F 84 F8
UpdatePulse1Loop_FB31:
INY ; CPU:$FB31 PRG:3B31 C8
LSR A ; CPU:$FB32 PRG:3B32 4A
BCC UpdatePulse1Loop_FB31 ; CPU:$FB33 PRG:3B33 90 FC
LDA $FC64,Y ; CPU:$FB35 PRG:3B35 B9 64 FC
TAY ; CPU:$FB38 PRG:3B38 A8
LDA $FC65,Y ; CPU:$FB39 PRG:3B39 B9 65 FC
STA $F5 ; CPU:$FB3C PRG:3B3C 85 F5
LDA $FC66,Y ; CPU:$FB3E PRG:3B3E B9 66 FC
STA $F6 ; CPU:$FB41 PRG:3B41 85 F6
LDA $FC67,Y ; CPU:$FB43 PRG:3B43 B9 67 FC
STA $F7 ; CPU:$FB46 PRG:3B46 85 F7
LDA $FC68,Y ; CPU:$FB48 PRG:3B48 B9 68 FC
STA $FA ; CPU:$FB4B PRG:3B4B 85 FA
LDA $FC69,Y ; CPU:$FB4D PRG:3B4D B9 69 FC
STA $F9 ; CPU:$FB50 PRG:3B50 85 F9
LDA $FC6A,Y ; CPU:$FB52 PRG:3B52 B9 6A FC
STA $07F2 ; CPU:$FB55 PRG:3B55 8D F2 07
LDA #$01 ; CPU:$FB58 PRG:3B58 A9 01
STA $07EE ; CPU:$FB5A PRG:3B5A 8D EE 07
STA $07F0 ; CPU:$FB5D PRG:3B5D 8D F0 07
STA $07F1 ; CPU:$FB60 PRG:3B60 8D F1 07
STA $07F3 ; CPU:$FB63 PRG:3B63 8D F3 07
LDA #$7F ; CPU:$FB66 PRG:3B66 A9 7F
STA SQ1_SWEEP ; CPU:$FB68 PRG:3B68 8D 01 40
STA SQ2_SWEEP ; CPU:$FB6B PRG:3B6B 8D 05 40
AudioPathOnNonZero_FB6E:
DEC $07EE ; CPU:$FB6E PRG:3B6E CE EE 07
BNE AudioPathOnNonZero_FBBD ; CPU:$FB71 PRG:3B71 D0 4A
AudioPathLoop_FB73:
LDY $F8 ; CPU:$FB73 PRG:3B73 A4 F8
INC $F8 ; CPU:$FB75 PRG:3B75 E6 F8
LDA ($F6),Y ; CPU:$FB77 PRG:3B77 B1 F6
BEQ UpdatePulse2OnZero_FB84 ; CPU:$FB79 PRG:3B79 F0 09
CMP #$01 ; CPU:$FB7B PRG:3B7B C9 01
BNE AudioPathOnNonZero_FB95 ; CPU:$FB7D PRG:3B7D D0 16
LDA $10 ; CPU:$FB7F PRG:3B7F A5 10
LSR A ; CPU:$FB81 PRG:3B81 4A
BCC AudioPathLoop_FB73 ; CPU:$FB82 PRG:3B82 90 EF
UpdatePulse2OnZero_FB84:
LDA $F3 ; CPU:$FB84 PRG:3B84 A5 F3
AND #$1C ; CPU:$FB86 PRG:3B86 29 1C
BNE AudioPathLoop_FB2B ; CPU:$FB88 PRG:3B88 D0 A1
LDA #$00 ; CPU:$FB8A PRG:3B8A A9 00
STA $F3 ; CPU:$FB8C PRG:3B8C 85 F3
JSR UpdatePulse1Routine_F9D3 ; CPU:$FB8E PRG:3B8E 20 D3 F9
STA SQ2_VOL ; CPU:$FB91 PRG:3B91 8D 04 40
RTS ; CPU:$FB94 PRG:3B94 60
AudioPathOnNonZero_FB95:
JSR ProcessAudioStateRoutine_FF41 ; CPU:$FB95 PRG:3B95 20 41 FF
STA $07EE ; CPU:$FB98 PRG:3B98 8D EE 07
TXA ; CPU:$FB9B PRG:3B9B 8A
AND #$3E ; CPU:$FB9C PRG:3B9C 29 3E
JSR ProcessAudioStateRoutine_F814 ; CPU:$FB9E PRG:3B9E 20 14 F8
BEQ AudioPathOnZero_FBAA ; CPU:$FBA1 PRG:3BA1 F0 07
LDY #$1F ; CPU:$FBA3 PRG:3BA3 A0 1F
STY $07EF ; CPU:$FBA5 PRG:3BA5 8C EF 07
BNE AudioPathOnNonZero_FBAF ; CPU:$FBA8 PRG:3BA8 D0 05
AudioPathOnZero_FBAA:
LDY #$00 ; CPU:$FBAA PRG:3BAA A0 00
STY $07EF ; CPU:$FBAC PRG:3BAC 8C EF 07
AudioPathOnNonZero_FBAF:
LDX #$84 ; CPU:$FBAF PRG:3BAF A2 84
LDA $07EE ; CPU:$FBB1 PRG:3BB1 AD EE 07
CMP #$10 ; CPU:$FBB4 PRG:3BB4 C9 10
BCS UpdatePulse2OnCarry_FBBA ; CPU:$FBB6 PRG:3BB6 B0 02
LDX #$82 ; CPU:$FBB8 PRG:3BB8 A2 82
UpdatePulse2OnCarry_FBBA:
STX SQ2_VOL ; CPU:$FBBA PRG:3BBA 8E 04 40
AudioPathOnNonZero_FBBD:
LDA $F3 ; CPU:$FBBD PRG:3BBD A5 F3
AND #$1C ; CPU:$FBBF PRG:3BBF 29 1C
BEQ AudioPathOnZero_FBD1 ; CPU:$FBC1 PRG:3BC1 F0 0E
LDY $07EF ; CPU:$FBC3 PRG:3BC3 AC EF 07
BEQ UpdatePulse2OnZero_FBCB ; CPU:$FBC6 PRG:3BC6 F0 03
DEC $07EF ; CPU:$FBC8 PRG:3BC8 CE EF 07
UpdatePulse2OnZero_FBCB:
LDA $FF9A,Y ; CPU:$FBCB PRG:3BCB B9 9A FF
STA SQ2_VOL ; CPU:$FBCE PRG:3BCE 8D 04 40
AudioPathOnZero_FBD1:
LDY $F9 ; CPU:$FBD1 PRG:3BD1 A4 F9
BEQ AudioPathContinue_FC04 ; CPU:$FBD3 PRG:3BD3 F0 2F
DEC $07F0 ; CPU:$FBD5 PRG:3BD5 CE F0 07
BNE AudioPathContinue_FC04 ; CPU:$FBD8 PRG:3BD8 D0 2A
UpdatePulse1Loop_FBDA:
LDY $F9 ; CPU:$FBDA PRG:3BDA A4 F9
INC $F9 ; CPU:$FBDC PRG:3BDC E6 F9
LDA ($F6),Y ; CPU:$FBDE PRG:3BDE B1 F6
BNE AudioPathOnNonZero_FBED ; CPU:$FBE0 PRG:3BE0 D0 0B
LDY $F9 ; CPU:$FBE2 PRG:3BE2 A4 F9
INC $F9 ; CPU:$FBE4 PRG:3BE4 E6 F9
LDA ($F6),Y ; CPU:$FBE6 PRG:3BE6 B1 F6
STA SQ1_SWEEP ; CPU:$FBE8 PRG:3BE8 8D 01 40
BNE UpdatePulse1Loop_FBDA ; CPU:$FBEB PRG:3BEB D0 ED
AudioPathOnNonZero_FBED:
JSR ProcessAudioStateRoutine_FF41 ; CPU:$FBED PRG:3BED 20 41 FF
STA $07F0 ; CPU:$FBF0 PRG:3BF0 8D F0 07
TXA ; CPU:$FBF3 PRG:3BF3 8A
AND #$3E ; CPU:$FBF4 PRG:3BF4 29 3E
JSR ProcessAudioStateRoutine_F800 ; CPU:$FBF6 PRG:3BF6 20 00 F8
BNE AudioPathOnNonZero_FBFF ; CPU:$FBF9 PRG:3BF9 D0 04
LDX #$10 ; CPU:$FBFB PRG:3BFB A2 10
BNE UpdatePulse1OnNonZero_FC01 ; CPU:$FBFD PRG:3BFD D0 02
AudioPathOnNonZero_FBFF:
LDX #$06 ; CPU:$FBFF PRG:3BFF A2 06
UpdatePulse1OnNonZero_FC01:
STX SQ1_VOL ; CPU:$FC01 PRG:3C01 8E 00 40
AudioPathContinue_FC04:
LDY $FA ; CPU:$FC04 PRG:3C04 A4 FA
BEQ AudioPathContinue_FC2B ; CPU:$FC06 PRG:3C06 F0 23
DEC $07F1 ; CPU:$FC08 PRG:3C08 CE F1 07
BNE AudioPathContinue_FC2B ; CPU:$FC0B PRG:3C0B D0 1E
INC $FA ; CPU:$FC0D PRG:3C0D E6 FA
LDA ($F6),Y ; CPU:$FC0F PRG:3C0F B1 F6
JSR ProcessAudioStateRoutine_FF41 ; CPU:$FC11 PRG:3C11 20 41 FF
STA $07F1 ; CPU:$FC14 PRG:3C14 8D F1 07
CLC ; CPU:$FC17 PRG:3C17 18
ADC #$FE ; CPU:$FC18 PRG:3C18 69 FE
CMP #$0E ; CPU:$FC1A PRG:3C1A C9 0E
BCC UpdateTriangleOnNoCarry_FC20 ; CPU:$FC1C PRG:3C1C 90 02
LDA #$0E ; CPU:$FC1E PRG:3C1E A9 0E
UpdateTriangleOnNoCarry_FC20:
ASL A ; CPU:$FC20 PRG:3C20 0A
ASL A ; CPU:$FC21 PRG:3C21 0A
STA TRI_LINEAR ; CPU:$FC22 PRG:3C22 8D 08 40
TXA ; CPU:$FC25 PRG:3C25 8A
AND #$3E ; CPU:$FC26 PRG:3C26 29 3E
JSR ProcessAudioStateRoutine_F818 ; CPU:$FC28 PRG:3C28 20 18 F8
AudioPathContinue_FC2B:
LDA $F3 ; CPU:$FC2B PRG:3C2B A5 F3
AND #$43 ; CPU:$FC2D PRG:3C2D 29 43
BEQ AudioPathContinue_FC64 ; CPU:$FC2F PRG:3C2F F0 33
DEC $07F3 ; CPU:$FC31 PRG:3C31 CE F3 07
BNE AudioPathContinue_FC64 ; CPU:$FC34 PRG:3C34 D0 2E
LDY $07F2 ; CPU:$FC36 PRG:3C36 AC F2 07
INC $07F2 ; CPU:$FC39 PRG:3C39 EE F2 07
LDA ($F6),Y ; CPU:$FC3C PRG:3C3C B1 F6
JSR ProcessAudioStateRoutine_FF41 ; CPU:$FC3E PRG:3C3E 20 41 FF
STA $07F3 ; CPU:$FC41 PRG:3C41 8D F3 07
TXA ; CPU:$FC44 PRG:3C44 8A
AND #$3E ; CPU:$FC45 PRG:3C45 29 3E
BEQ AudioPathContinue_FC64 ; CPU:$FC47 PRG:3C47 F0 1B
AND #$20 ; CPU:$FC49 PRG:3C49 29 20
BNE AudioPathOnNonZero_FC55 ; CPU:$FC4B PRG:3C4B D0 08
LDA #$02 ; CPU:$FC4D PRG:3C4D A9 02
LDX #$00 ; CPU:$FC4F PRG:3C4F A2 00
LDY #$28 ; CPU:$FC51 PRG:3C51 A0 28
BNE UpdateNoiseOnNonZero_FC5B ; CPU:$FC53 PRG:3C53 D0 06
AudioPathOnNonZero_FC55:
LDA #$00 ; CPU:$FC55 PRG:3C55 A9 00
LDX #$02 ; CPU:$FC57 PRG:3C57 A2 02
LDY #$08 ; CPU:$FC59 PRG:3C59 A0 08
UpdateNoiseOnNonZero_FC5B:
STA NOISE_VOL ; CPU:$FC5B PRG:3C5B 8D 0C 40
STX NOISE_LO ; CPU:$FC5E PRG:3C5E 8E 0E 40
STY NOISE_HI ; CPU:$FC61 PRG:3C61 8C 0F 40
AudioPathContinue_FC64:
RTS ; CPU:$FC64 PRG:3C64 60
.byte $0C, $16, $20, $1C, $24, $12, $28, $08, $07, $F7, $FF, $00, $00, $93, $FC, $3F ; CPU:$FC65 PRG:3C65 0B
.byte $1C, $60, $07 ; CPU:$FC75 PRG:3C75 0B
;------------------------------------------------------------
; Audio data with embedded sequence helper code
; CPU $FC78-$FFF9
; PRG $3C78-$3FF9
;
; Pass 1 recursively traced from verified entry roots in this region.
; Direct branches, jumps, and subroutine calls are decoded.
; Bytes not reached by that trace remain explicit .byte data.
;------------------------------------------------------------
AudioDataTables:
.byte $FB, $FE, $00, $00, $05, $FD, $3E, $1B, $4E, $07, $69, $FD, $3D, $00, $CA, $FD ; CPU:$FC78 PRG:3C78 0B
.byte $6E, $00, $AD, $FE, $27, $00, $CA, $FF, $15, $09, $1F, $42, $8C, $44, $4C, $84 ; CPU:$FC88 PRG:3C88 0B
.byte $44, $27, $42, $8C, $44, $4C, $84, $44, $2B, $43, $6A, $84, $AA, $92, $52, $02 ; CPU:$FC98 PRG:3C98 0B
.byte $16, $4A, $02, $88, $02, $05, $00, $42, $84, $66, $4C, $84, $84, $60, $66, $44 ; CPU:$FCA8 PRG:3CA8 0B
.byte $4C, $88, $84, $AA, $64, $6A, $A4, $A4, $64, $6A, $44, $4C, $88, $C4, $62, $AA ; CPU:$FCB8 PRG:3CB8 0B
.byte $A2, $88, $48, $02, $08, $62, $02, $A2, $02, $21, $5B, $5A, $5B, $9A, $5A, $60 ; CPU:$FCC8 PRG:3CC8 0B
.byte $66, $44, $AE, $6A, $65, $64, $65, $A4, $5C, $64, $6A, $44, $AE, $6A, $63, $62 ; CPU:$FCD8 PRG:3CD8 0B
.byte $A2, $A2, $AE, $6E, $02, $2E, $6A, $02, $AA, $02, $27, $80, $E0, $E0, $E0, $E0 ; CPU:$FCE8 PRG:3CE8 0B
.byte $E0, $E0, $E0, $E0, $E0, $E0, $E0, $A0, $10, $10, $10, $10, $11, $42, $A6, $60 ; CPU:$FCF8 PRG:3CF8 0B
.byte $AA, $AA, $6C, $AA, $A6, $5E, $60, $A6, $84, $6A, $88, $88, $AE, $52, $02, $10 ; CPU:$FD08 PRG:3D08 0B
.byte $4E, $02, $88, $02, $45, $45, $C4, $00, $42, $A0, $5A, $A0, $A0, $66, $A2, $A0 ; CPU:$FD18 PRG:3D18 0B
.byte $5A, $5A, $9A, $AA, $62, $AA, $AA, $A6, $48, $02, $08, $48, $02, $AE, $02, $00 ; CPU:$FD28 PRG:3D28 0B
.byte $95, $0C, $8C, $02, $2E, $AE, $02, $22, $A2, $02, $42, $9A, $A0, $A6, $AA, $AC ; CPU:$FD38 PRG:3D38 0B
.byte $AA, $A6, $A0, $A2, $AA, $84, $AA, $09, $53, $4F, $CC, $80, $E0, $E0, $E0, $E0 ; CPU:$FD48 PRG:3D48 0B
.byte $E0, $A0, $11, $10, $10, $10, $10, $42, $10, $10, $10, $10, $42, $10, $10, $10 ; CPU:$FD58 PRG:3D58 0B
.byte $11, $66, $0C, $04, $26, $0C, $04, $26, $0C, $04, $26, $0C, $04, $26, $0C, $04 ; CPU:$FD68 PRG:3D68 0B
.byte $6A, $10, $08, $2A, $10, $08, $2A, $10, $08, $2A, $10, $08, $2A, $10, $08, $6A ; CPU:$FD78 PRG:3D78 0B
.byte $0E, $04, $2A, $0E, $04, $2A, $0E, $04, $2A, $0E, $04, $2A, $0E, $04, $6E, $12 ; CPU:$FD88 PRG:3D88 0B
.byte $08, $2E, $12, $08, $2E, $12, $12, $0E, $0E, $0C, $0C, $08, $08, $00, $5A, $60 ; CPU:$FD98 PRG:3D98 0B
.byte $66, $6A, $44, $6A, $66, $60, $5C, $64, $6A, $6E, $48, $6E, $6A, $64, $62, $6A ; CPU:$FDA8 PRG:3DA8 0B
.byte $44, $48, $4E, $48, $44, $6A, $66, $6E, $48, $4E, $18, $18, $16, $16, $12, $12 ; CPU:$FDB8 PRG:3DB8 0B
.byte $0E, $0E, $60, $66, $88, $44, $A6, $60, $62, $64, $66, $6A, $A2, $6A, $8C, $4A ; CPU:$FDC8 PRG:3DC8 0B
.byte $89, $44, $6A, $8E, $4C, $88, $6E, $92, $50, $4E, $4C, $60, $62, $64, $66, $6A ; CPU:$FDD8 PRG:3DD8 0B
.byte $A7, $60, $66, $8C, $48, $84, $66, $A0, $62, $66, $6A, $68, $6A, $6E, $44, $48 ; CPU:$FDE8 PRG:3DE8 0B
.byte $D6, $42, $44, $44, $6E, $92, $4C, $44, $44, $6A, $8E, $4C, $48, $66, $68, $6A ; CPU:$FDF8 PRG:3DF8 0B
.byte $6C, $6E, $48, $85, $01, $44, $6E, $44, $6A, $6E, $44, $44, $6E, $44, $60, $62 ; CPU:$FE08 PRG:3E08 0B
.byte $66, $6A, $68, $6A, $64, $66, $6A, $AE, $44, $49, $44, $6A, $6A, $44, $6A, $6A ; CPU:$FE18 PRG:3E18 0B
.byte $44, $66, $66, $44, $66, $66, $6A, $64, $66, $6A, $6E, $44, $8C, $4A, $49, $00 ; CPU:$FE28 PRG:3E28 0B
.byte $9A, $66, $A0, $66, $9A, $66, $A0, $66, $5C, $48, $46, $44, $6A, $62, $9C, $6A ; CPU:$FE38 PRG:3E38 0B
.byte $A2, $6A, $A2, $44, $AA, $44, $A6, $48, $AE, $48, $9A, $66, $A0, $66, $9A, $66 ; CPU:$FE48 PRG:3E48 0B
.byte $A0, $66, $9A, $66, $A0, $66, $9A, $66, $A0, $66, $9C, $6A, $A2, $6A, $9C, $6A ; CPU:$FE58 PRG:3E58 0B
.byte $A2, $6A, $66, $6E, $48, $66, $44, $4C, $62, $6A, $48, $62, $6A, $48, $66, $64 ; CPU:$FE68 PRG:3E68 0B
.byte $66, $68, $6A, $6E, $44, $66, $62, $61, $62, $44, $6A, $62, $44, $6A, $60, $44 ; CPU:$FE78 PRG:3E78 0B
.byte $66, $60, $44, $66, $5C, $6A, $64, $5C, $6A, $64, $66, $48, $6E, $66, $48, $6E ; CPU:$FE88 PRG:3E88 0B
.byte $62, $44, $6A, $62, $44, $6A, $60, $44, $66, $60, $44, $66, $5C, $6A, $64, $5C ; CPU:$FE98 PRG:3E98 0B
.byte $6A, $64, $A2, $62, $27, $45, $67, $84, $AA, $60, $AE, $60, $84, $88, $62, $AA ; CPU:$FEA8 PRG:3EA8 0B
.byte $48, $84, $AE, $66, $84, $66, $88, $4D, $84, $44, $8C, $57, $8C, $4A, $48, $44 ; CPU:$FEB8 PRG:3EB8 0B
.byte $8E, $6A, $8C, $6A, $8E, $8C, $4A, $88, $6E, $44, $48, $00, $5B, $A0, $66, $44 ; CPU:$FEC8 PRG:3EC8 0B
.byte $6E, $6B, $84, $4C, $56, $54, $5D, $A2, $6A, $48, $6A, $67, $AE, $48, $8E, $5B ; CPU:$FED8 PRG:3ED8 0B
.byte $A0, $66, $44, $6E, $6B, $84, $4C, $56, $4C, $5D, $A2, $6A, $48, $44, $67, $AE ; CPU:$FEE8 PRG:3EE8 0B
.byte $48, $4C, $4E, $26, $2E, $08, $13, $00, $03, $57, $00, $00, $00, $D4, $00, $C8 ; CPU:$FEF8 PRG:3EF8 0B
.byte $00, $BD, $00, $B2, $00, $A8, $00, $9F, $00, $96, $00, $8D, $00, $85, $00, $7E ; CPU:$FF08 PRG:3F08 0B
.byte $00, $70, $01, $AB, $01, $7C, $01, $67, $01, $52, $01, $3F, $01, $2D, $01, $1C ; CPU:$FF18 PRG:3F18 0B
.byte $01, $0C, $00, $FD, $00, $EE, $00, $E1, $01, $FC, $01, $C4, $04, $08, $10, $20 ; CPU:$FF28 PRG:3F28 0B
.byte $40, $18, $30, $05, $0A, $14, $28, $50, $1E ; CPU:$FF38 PRG:3F38 0B
;------------------------------------------------------------
; ProcessAudioStateRoutine_FF41
;
; Global:
; First-pass AudioDataTables entry point or directly called helper.
;
; Local:
; Exact semantic role is deferred to the semantic naming pass.
;
; Parameters:
; Zero-page pointers, object state, or PPU state; exact contract unresolved.
;
; Returns:
; Register and flag effects are defined by the decoded instructions.
;------------------------------------------------------------
ProcessAudioStateRoutine_FF41:
TAX ; CPU:$FF41 PRG:3F41 AA
ROR A ; CPU:$FF42 PRG:3F42 6A
TXA ; CPU:$FF43 PRG:3F43 8A
ROL A ; CPU:$FF44 PRG:3F44 2A
ROL A ; CPU:$FF45 PRG:3F45 2A
ROL A ; CPU:$FF46 PRG:3F46 2A
AND #$07 ; CPU:$FF47 PRG:3F47 29 07
CLC ; CPU:$FF49 PRG:3F49 18
ADC $F5 ; CPU:$FF4A PRG:3F4A 65 F5
TAY ; CPU:$FF4C PRG:3F4C A8
LDA $FF34,Y ; CPU:$FF4D PRG:3F4D B9 34 FF
RTS ; CPU:$FF50 PRG:3F50 60
.byte $10, $15, $16, $16, $16, $15, $15, $17, $17, $17, $16, $16, $18, $18, $18, $16 ; CPU:$FF51 PRG:3F51 0B
.byte $16, $1A, $1A, $1A, $16, $16, $1C, $1C, $1C, $16, $16, $1E, $1E, $1E, $16, $16 ; CPU:$FF61 PRG:3F61 0B
.byte $0A, $0A, $0A, $0A, $08, $08, $08, $08, $08, $08, $08, $08, $09, $09, $09, $09 ; CPU:$FF71 PRG:3F71 0B
.byte $09, $09, $07, $07, $07, $07, $07, $07, $07, $07, $08, $08, $08, $08, $08, $08 ; CPU:$FF81 PRG:3F81 0B
.byte $10, $11, $1C, $1A, $18, $16, $14, $12, $11, $50, $51, $51, $51, $51, $51, $51 ; CPU:$FF91 PRG:3F91 0B
.byte $51, $51, $52, $52, $52, $52, $52, $52, $53, $53, $53, $53, $53, $54, $54, $54 ; CPU:$FFA1 PRG:3FA1 0B
.byte $54, $55, $55, $55, $56, $56, $56, $56, $57, $01, $01, $01, $BE, $01, $01, $01 ; CPU:$FFB1 PRG:3FB1 0B
.byte $8E, $00, $FE, $00, $00, $FE, $00, $00, $FE, $6B, $6B, $AA, $6F, $6F, $AE, $03 ; CPU:$FFC1 PRG:3FC1 0B
.byte $05, $00, $00, $95, $5D, $49, $9C, $63, $4F, $A2, $03, $00, $9D, $27, $A2, $84 ; CPU:$FFD1 PRG:3FD1 0B
.byte $A2, $84, $A6, $88, $A6, $88, $03, $0D, $01, $01, $A0, $60, $00, $20, $A0, $60 ; CPU:$FFE1 PRG:3FE1 0B
.byte $00, $20, $20, $20, $20, $21, $00, $4F, $0F ; CPU:$FFF1 PRG:3FF1 0B
;------------------------------------------------------------
; VectorTable
; CPU $FFFA-$FFFF
; PRG $3FFA-$3FFF
; NMI, RESET, IRQ/BRK vectors
; Pass 1 preserves this range exactly with .incbin.
;------------------------------------------------------------
VectorTable:
.word NMIHandler ; CPU:$FFFA PRG:3FFA 0B
.word ResetEntry ; CPU:$FFFC PRG:3FFC 0B
.word IRQHandler ; CPU:$FFFE PRG:3FFE 0B