Promote Donkey Kong (JU): Pass 3 complete, whole-ROM byte-identical

Pass 3 named the 10 data regions in prg.s, then the project was promoted
out of _wip/ so `make` now proves header + PRG + CHR against the original
ROM instead of only the PRG bank.

Data regions named:
  LevelPtrTable        $C000-$C03B  (60 B)    level header data
  ObjectPtrTable       $C03C-$C043  (8 B)     4 pointer pairs
  LevelDataPtrTable    $C044-$C79D  (1882 B)  level data pointers
  SpriteInitPtrTable   labelled at $C4B0      see residue note
  UnreachedCode_D650   $D650-$D696  (71 B)    unreached code
  UnreachedCode_E144   $E144-$E165  (34 B)    unreached code
  MusicDataTable       $F55B-$FA47  (1261 B)  music/sound data
  APUDataTable         $FAE6-$FB74  (143 B)   APU pulse/noise tables
  SfxDataTable         $FE59-$FFEF  (407 B)   sound-effect data
  VectorTable          $FFF6-$FFFF  (10 B)    padding + NMI/RESET/IRQ

Promotion (per the AGENTS.md checklist):
  - git mv "_wip/Donkey Kong (JU)" "Donkey Kong (JU)"
  - add copilot/rom.nes -> ../Donkey Kong (JU).nes symlink
  - add header.s / chr.s (one-line .incbin of header.bin / chr.bin)
  - linker.cfg gains HEADER ($0000/16 B) and CHR ($0000/8 KB)
  - Makefile switched from `cmp reconstructed_prg.bin prg.bin` to
    `cmp reconstructed.nes rom.nes`
  - no _tools path change (this Makefile never referenced _tools/)
    and no `make regen` pipeline exists for it

Doc corrections:
  - project OVERVIEW.md said Mirroring Vertical; header byte 6 = $00
    means Horizontal (the root index was right) — fixed
  - root OVERVIEW.md: row 18 now BYTE-IDENTICAL, tier paragraph and
    summary table refreshed (they had drifted around the Lunar Pool and
    Urban Champion promotions), new per-project detail entry
  - counts corrected to 19 top-level / 17 _wip in OVERVIEW.md,
    TODO.md and AGENTS.md

Residue recorded rather than guessed:
  - Pass 2 is partial: 919 Label_ definitions remain (214 semantic
    labels applied); noted in TODO.md so nobody reads the promotion as
    full semantic naming
  - SpriteInitPtrTable's label sits at $C4B0: the routine at $C807 reads
    $C4A7,x/$C4A8,x, but that table starts mid-row and a label there
    would split the canonical 16-byte audit-comment line

Verification:
  make clean && make  -> "Byte-identical ROM verified."
  verify_pass1.py     -> 19/19 top-level build, Donkey Kong (JU) OK
                         (6014 instr / 12505 B), all comments canonical

Doc-drift sweep: build tiers, mirroring, and stale status tails

Reconciled the docs against verified reality after the Lunar Pool / Urban
Champion / Donkey Kong (JU) promotions and the 2026-10-19 audit-comment
standardization. No source behaviour changed except the two build fixes below.

Build tier (whole-ROM vs PRG-only)
  - AGENTS.md: the 17 `_wip/` projects are real disassemblies at the PRG-build
    tier, not "skeletons"; header.s/chr.s/rom.nes are promotion additions;
    verify_pass1.py covers the top-level projects.
  - Root OVERVIEW.md: `_wip` prose, audit-comment narrative and summary table
    refreshed (37.5% figure, SEEDED vs OK wording, re-trace false alarm).
  - Promoted projects whose build blocks still claimed `make` emits
    `reconstructed_prg.bin` compared to `prg.bin` (Balloon Fight, Baseball,
    CIRCUS, Clu Clu Land, Excitebike, NES PowerPad, Pac-Man (USA), Tennis):
    now describe the whole-ROM `reconstructed.nes` vs `rom.nes`.
  - Lunar Pool / Urban Champion / CIRCUS also had stale `cd "_wip/..."`
    build paths and "Promotion" items; retargeted to their top-level folders.

Mirroring (header byte 6 bit 0: 0 = Horizontal, 1 = Vertical)
  - Corrected DK Jr. prose "horizontal mirroring (flag 6 = $01)" -> vertical,
    and both `_wip/Pac-Man` variant notes "Both use vertical mirroring" ->
    horizontal (both are byte-6 = $00).
  - Re-audited every project OVERVIEW: 0 rows and 0 prose claims now disagree.

Stale status tails
  - Retitled/restatused the `_wip` OVERVIEWs to their real `prg.s` (Golf,
    Ice Climber (U), Lode Runner, Millipede, Pac-Man Tengen, Pac-Man (U),
    Popeye 0/1, Raid, Raid a2, Hogan's Alley, Mario Bros); Golf's
    skeleton-era contents rows and Next Steps corrected.
  - Dropped the skeleton-era "## Next Steps (per `PROMPTS.md`)" heading and
    the "(from the skeleton)" wording across all project OVERVIEWs.
  - Rewrote Lunar Pool / Urban Champion Next Steps (both already Pass 1-3
    complete and promoted; their tails still described pending Pass 2 and
    promotion); fixed root row 13 (Wild Gunman) and row 20 (Duck Hunt).

Also lands two code fixes carried with this sweep:
  - `_wip/Hogan's Alley (JU)`: $E9F1-$E9FD and $EA13-$EA14 reclassified as
    data with canonical audit comments (the seeded build had decoded a data
    table base as code, breaking the build since 2ae09f7). `make` ->
    BYTE-IDENTICAL again; reconstructed_prg.bin/.lbl refreshed.
  - `_wip/Pyramid (U)`: `Label_D72E` -> `NMI:` (byte-identical).

Verification:
  make (Hogan's Alley, Pyramid)      -> BYTE-IDENTICAL, BYTE-IDENTICAL
  _tools/verify_pass1.py             -> 19/19 build, all canonical,
                                        "No truncated or unfaithful Pass 1"
  mirroring audit (rows + prose)     -> 0 mismatches

Donkey Kong (JU): complete Pass 2 — all 919 Label_ definitions named

The last non-zero Label_ residue in the repo is now gone. Every one of the
919 address-derived definitions in copilot/prg.s is replaced:

* 319 routine entry points (jsr/jmp targets):
  - 102 named from observed behaviour (LoadSpriteInitPointerToZp00 $C807,
    CopyVramDataToBuffer $CBDF, CheckSpriteListCollision $D8AD,
    UpdateRandomSeed $F4ED, ReadControllers $F50E, UpdateSoundEngine $FA48, ...)
  - 217 left as SubC<addr> — honest residue where the body is too
    context-dependent to name without guessing (Golf: 108, Mario Bros: 223)
  - the 77 already-named entries untouched
* 600 internal branch targets named <Routine>_Block / <Routine>_Block_n in
  address order within their owning routine (DK Jr./Balloon Fight convention).
  Ownership is control-flow containment, so a loop that physically precedes
  its own entry lands correctly (FlushPpuBuffer_Block $F1EC under $F228).
* Two proposal collisions disambiguated by indexing zero-page slot:
  UpdateObjectListZp5D/DispatchObjectStateZp5E ($DA16/$DA4C) vs
  UpdateObjectListZpAE/DispatchObjectStateZpAF ($E1E9/$E250).

jsr/jmp operands stay numeric (Wild Gunman style); only branch operands are
symbolic. Applied with _tools/pass2.py apply (919 defs + 2,622 refs rewritten,
comments re-aligned); the ROM still rebuilds byte-identically and
verify_pass1.py reports 19/19 canonical with no truncated split.

Docs synced: project OVERVIEW.md gains a Pass 2 Details section, root
OVERVIEW.md rows + conventions, TODO.md section 4 closed. dk_full_map.tsv now
records the complete applied map (its zp rows remain unapplied proposals).

_wip status correction: five false "Pass 2 complete" claims + map audit

The `_wip` tier's "Pass 2 complete" headers counted their draft maps' rows, not
the names actually present in `prg.s`, and described the count of *neutral*
`ZpXX` slots in `locals.inc` as "zero-page semantic aliases". Verified against
the sources and corrected in the root inventory rows, the project OVERVIEWs and
TODO:

  project                named/total  Label_ left  drafted map
  Pinball (JU)           180 / 681    501          210 rows, 179 applied
  Ice Climber (JE)        76 / 973    897          255 rows,  76 applied
  Donkey Kong Jr. Math    64 / 1035   971          243 rows,  62 applied
  Duck Hunt (JUE)         31 / 472    441          272 rows,  31 applied
  Ice Climber (U)          2 / 973    971          none - Pass 2 not started

No `_wip` project is Pass 2 complete. Ice Climber (U) was the worst case: the
2026-10-19 sweep itself restated it "Pass 2 complete" while describing its 971
`Label_` definitions in the same paragraph - a copy-paste from (JE); (U) has no
map file at all.

Drafted maps audited row by row against the committed split: they are not
applicable. 100/243 (DK Jr. Math), 96/255 (Ice Climber (JE)) and 17/210
(Pinball) rows point at addresses that are not instruction boundaries - they
were built against an older code/data split - while most of the rest are
unlabelled boundaries that no operand references, or (Duck Hunt) competing
candidate names for one label (`Label_C2BF` alone carries 205). Rows that are
both insertable and corroborated by control flow: 0 in every map. Recorded as
stale and kept for provenance; Pass 2 here needs a fresh map derived from the
committed split.

Also corrected while verifying:
- Mario Bros entry counts (docs said 252 / 90 + 165 / 477 sites / 156 neutral
  slots; the file holds 262 distinct `jsr`/`jmp` targets = 39 semantic + 223
  `SubC<addr>`, 478 sites, 151 slots).
- root `_wip` prose line/label ranges (4,482-17,180 lines, 192-971 `Label_`,
  11,126 total) and the Ice Climber code figure (74.6% / 6,112 instr, not
  74.7% / 6,113).
- TODO §4 re-scoped to the promoted tier, with the `_wip` residue table added.

Verification: `make` across all 17 `_wip` projects -> BYTE-IDENTICAL (17/17);
`_tools/verify_pass1.py` -> 19/19 build, all canonical, "No truncated or
unfaithful Pass 1 found". No source bytes changed.

Balloon Fight (JU): apply locals.inc/symbols.inc names to prg.s (Pass 3)

Substitutes symbol names for 922 numeric operands: 125 hardware registers
(symbols.inc) and 797 of 813 zero-page/RAM operands (locals.inc). The 15
multi-alias addresses were resolved per routine; 16 operands stay numeric
because $13 is used there as a plain high-byte scratch beside Temp12 and
none of its three aliases fits.

- _tools/apply_symbols.py: the substitution tool (dry run by default;
  --sites supplies per-routine choices for multi-alias addresses, --report
  lists the residue). Only the operand token is rewritten, so the
  `; CPU:$.... PRG:....  XX XX` audit comments survive byte for byte.
- prg.s: operand tokens only. make prints "Byte-identical ROM verified."
- OVERVIEW.md (project): instruction quotes now match prg.s, new
  alias-reuse table, and section 10 rewritten from the stale "497 Label_"
  prose to the real naming state and the 16-site residue.
- OVERVIEW.md (root), TODO.md, AGENTS.md: status, counts, tool list.

verify_pass1.py: 19/19 OK, all audit comments canonical.

Bomberman (U): apply locals.inc/symbols.inc names to prg.s (Pass 3)

Substitutes 362 zero-page operands in copilot/prg.s with the names already
declared in copilot/locals.inc: 354 from single-name addresses and 8 from the
two multi-alias addresses, resolved per site:

  $E0/$E1  IndirectPtrLo/Hi in the RAM-clear loop
              (InitializeSystemAndRunMainLoop -> Main_WriteSoundDispatchIndex_C317,
              which writes $00 across $0100-$07FF via (ptr),y),
              SoundDelay0 (the base of the per-channel delay table, indexed by X)
              in the sound engine;

No symbols.inc substitution was needed: copilot/prg.s contains no numeric
hardware operands ($2000-$4017) at all. All 362 operands were already written
with two hex digits, so no ca65 `a:` prefix was required.

make -> Byte-identical ROM verified. Operand token only; mnemonics, spacing and
the trailing `; CPU:$.... PRG:....  XX XX` audit comments are untouched.

Remaining numeric operands (758) address bytes that no .inc file names:
505 zero-page (133 addresses), 171 RAM $0100-$07FF (46 addresses) and 82
table reads in $8000+ (54 addresses).

Bomberman (U): substitute 24 in-file table labels at ROM operand sites

Uses the new `--labels` option of `apply_symbols.py` with the
ld65 `-Ln` output (`reconstructed.lbl`). Only labels that prg.s
actually defines and that live in the PRG (+) are considered,
so CHR/header segment labels cannot leak in.

24 numeric operands (`lda ,x`, `adc ,y`, etc.) now read
`lda SystemPaletteData,x`, `adc GameplayObjectClassTable,y`, etc.
All 24 point at exact label addresses; the remaining 58 ROM-space
numeric operands point at interior bytes or unlabelled tables and
stay numeric.

make -> Byte-identical ROM verified.

Bomberman (U): update docs for Pass 3 symbol application

- Project OVERVIEW.md: corrected source file from main.s to prg.s/header.s/chr.s;
  output name from reconstructed_bomberman.nes to reconstructed.nes;
  rewritten §10 Zero-Page/RAM Symbols table to match locals.inc (with aliases
  and unnamed residue documented);
  fixed §4 step 1/4 to use IndirectPtrLo/Hi and SoundDelay0 names;
  fixed §11 InesHeader location (now header.s);
  added §2 Pass 3 summary table;
  added §13 notes on legacy main.s and Main_WriteSoundDispatchIndex_C317 misnomer.

- Root OVERVIEW.md §3: updated source line count (7,553), file list, and added
  Pass 3 summary.

Both builds verified byte-identical.

Pass 3 symbol application to all 19 top-level projects (2026-10-19)

Ran _tools/apply_symbols.py --write on all 19 promoted projects to substitute
symbolic names from symbols.inc (hardware registers) and locals.inc (zero-page
RAM aliases, forward references) into prg.s operands. The tool preserves the
canonical audit comments (; CPU:$XXXX PRG:XXXX AA BB) and preserves byte
identity — all projects still rebuild byte-identical to their original ROMs.

Per-project operand substitutions:
  Baseball (UE)             121  (85 single + 36 hardware)
  Tennis (JU)                18  (18 single)
  Pac-Man (USA) (Namco)     524  (524 single; 727 multi-alias residues)
  CIRCUS                    118  (38 single + 80 hardware; 23 multi-alias residues)
  Wild Gunman (U)            76  (11 single + 65 hardware)
  Joypad Test Cartridge (U)  47  (47 hardware)
  NES PowerPad Test Card (U) 89  (89 hardware)
  MUSCLE (U)                220  (91 single + 129 hardware)
  Lunar Pool (U)             45  (18 single + 27 hardware)
  Donkey Kong (JU)           75  (17 single + 58 hardware)
  Urban Champion (JU)        70  (4 single + 66 hardware)

Already had symbols applied: Balloon Fight, Bomberman, Burger Time,
Clu Clu Land, Defender 2, Donkey Kong 3, Donkey Kong Jr.

Skipped: Excitebike (JU) — inline prg.s definitions conflict with locals.inc
values and source operands don't match ROM byte encodings; automatic
substitution breaks byte identity.

Documentation updated:
  OVERVIEW.md — added Pass 3 symbol notes to all 19 project entries,
  added Urban Champion as section #36
  TODO.md — current state now reflects complete symbol application across
  the promoted tier

Verification: python3 _tools/verify_pass1.py reports all 19 projects OK/SEEDED,
all canonical comments, no truncated or unfaithful Pass 1.
This commit is contained in:
tmerritt committed 2026-10-19 14:55:08 -04:00
1 parent 53ad50ffb6
commit 71ada15de0
79 files changed
+9455 -7687

No files matched your search

+118 -118
View File
@@ -33,7 +33,7 @@ Reset:
; Clobbers: Undetermined in Pass 1.
; -----------------------------------------------------------------------------
WaitForFirstPpuWarmup:
lda $2002 ; CPU:$C002 PRG:0002 AD 02 20
lda PPUSTATUS ; CPU:$C002 PRG:0002 AD 02 20
bpl WaitForFirstPpuWarmup ; CPU:$C005 PRG:0005 10 FB
; -----------------------------------------------------------------------------
; Routine: WaitForSecondPpuWarmup
@@ -45,7 +45,7 @@ WaitForFirstPpuWarmup:
; Clobbers: Undetermined in Pass 1.
; -----------------------------------------------------------------------------
WaitForSecondPpuWarmup:
lda $2002 ; CPU:$C007 PRG:0007 AD 02 20
lda PPUSTATUS ; CPU:$C007 PRG:0007 AD 02 20
bpl WaitForSecondPpuWarmup ; CPU:$C00A PRG:000A 10 FB
jsr $C0B8 ; CPU:$C00C PRG:000C 20 B8 C0
ldx #$FF ; CPU:$C00F PRG:000F A2 FF
@@ -119,7 +119,7 @@ ClearUpperRamPages:
; Clobbers: Undetermined in Pass 1.
; -----------------------------------------------------------------------------
ClearUpperRamPageLoop:
sta ($E0),y ; CPU:$C037 PRG:0037 91 E0
sta (IndirectPointerLo),y ; CPU:$C037 PRG:0037 91 E0
dey ; CPU:$C039 PRG:0039 88
bne ClearUpperRamPageLoop ; CPU:$C03A PRG:003A D0 FB
dec IndirectPointerHi ; CPU:$C03C PRG:003C C6 E1
@@ -181,13 +181,13 @@ NmiHandler:
pha ; CPU:$C05C PRG:005C 48
tya ; CPU:$C05D PRG:005D 98
pha ; CPU:$C05E PRG:005E 48
lda $2002 ; CPU:$C05F PRG:005F AD 02 20
lda PPUSTATUS ; CPU:$C05F PRG:005F AD 02 20
lda Zp04 ; CPU:$C062 PRG:0062 A5 04
bne ResetPpuScroll ; CPU:$C064 PRG:0064 D0 23
lda #$00 ; CPU:$C066 PRG:0066 A9 00
sta $2003 ; CPU:$C068 PRG:0068 8D 03 20
sta OAMADDR ; CPU:$C068 PRG:0068 8D 03 20
lda #$02 ; CPU:$C06B PRG:006B A9 02
sta $4014 ; CPU:$C06D PRG:006D 8D 14 40
sta OAMDMA ; CPU:$C06D PRG:006D 8D 14 40
inc Zp04 ; CPU:$C070 PRG:0070 E6 04
jsr $C0B8 ; CPU:$C072 PRG:0072 20 B8 C0
jsr $C1B7 ; CPU:$C075 PRG:0075 20 B7 C1
@@ -217,7 +217,7 @@ ApplyPpuMaskShadow:
; Clobbers: Undetermined in Pass 1.
; -----------------------------------------------------------------------------
FinishNmiPpuUpdates:
sta $2001 ; CPU:$C084 PRG:0084 8D 01 20
sta PPUMASK ; CPU:$C084 PRG:0084 8D 01 20
dec Zp04 ; CPU:$C087 PRG:0087 C6 04
; -----------------------------------------------------------------------------
; Routine: ResetPpuScroll
@@ -229,10 +229,10 @@ FinishNmiPpuUpdates:
; Clobbers: Undetermined in Pass 1.
; -----------------------------------------------------------------------------
ResetPpuScroll:
lda $2002 ; CPU:$C089 PRG:0089 AD 02 20
lda PPUSTATUS ; CPU:$C089 PRG:0089 AD 02 20
lda #$00 ; CPU:$C08C PRG:008C A9 00
sta $2005 ; CPU:$C08E PRG:008E 8D 05 20
sta $2005 ; CPU:$C091 PRG:0091 8D 05 20
sta PPUSCROLL ; CPU:$C08E PRG:008E 8D 05 20
sta PPUSCROLL ; CPU:$C091 PRG:0091 8D 05 20
lda #$7E ; CPU:$C094 PRG:0094 A9 7E
jsr $C0C5 ; CPU:$C096 PRG:0096 20 C5 C0
jsr $F87C ; CPU:$C099 PRG:0099 20 7C F8
@@ -282,9 +282,9 @@ RestoreNmiRegisters:
; -----------------------------------------------------------------------------
InitializePpuControl:
lda #$08 ; CPU:$C0B8 PRG:00B8 A9 08
sta $2000 ; CPU:$C0BA PRG:00BA 8D 00 20
sta PPUCTRL ; CPU:$C0BA PRG:00BA 8D 00 20
lda #$00 ; CPU:$C0BD PRG:00BD A9 00
sta $2001 ; CPU:$C0BF PRG:00BF 8D 01 20
sta PPUMASK ; CPU:$C0BF PRG:00BF 8D 01 20
rts ; CPU:$C0C2 PRG:00C2 60
; -----------------------------------------------------------------------------
; Routine: WritePpuCtrlShadowMasked
@@ -308,7 +308,7 @@ WritePpuCtrlShadowMasked:
; -----------------------------------------------------------------------------
WriteMaskedPpuControl:
and PpuCtrlShadow ; CPU:$C0C5 PRG:00C5 25 53
sta $2000 ; CPU:$C0C7 PRG:00C7 8D 00 20
sta PPUCTRL ; CPU:$C0C7 PRG:00C7 8D 00 20
rts ; CPU:$C0CA PRG:00CA 60
; -----------------------------------------------------------------------------
; Routine: SetVisiblePpuMask
@@ -423,7 +423,7 @@ SecondaryStateEligibilityTable:
DispatchStateHandler:
jsr $C4CD ; CPU:$C1D5 PRG:01D5 20 CD C4
nop ; CPU:$C1D8 PRG:01D8 EA
cmp ($12,x) ; CPU:$C1D9 PRG:01D9 C1 12
cmp (Zp12,x) ; CPU:$C1D9 PRG:01D9 C1 12
SecondaryStateHandlerPointerTable:
.byte $C2, $3A, $C2, $5D, $C2, $7D, $C2, $F5, $C2, $03, $C3, $60, $C3, $8B, $C3 ; CPU:$C1DB PRG:01DB C2 3A C2 5D C2 7D C2 F5 C2 03 C3 60 C3 8B C3
@@ -999,13 +999,13 @@ InitializeApuAndPpu:
; -----------------------------------------------------------------------------
InitializeApuAndPpu_LoadAndContinue_C3C1:
lda #$1F ; CPU:$C3C1 PRG:03C1 A9 1F
sta $4015 ; CPU:$C3C3 PRG:03C3 8D 15 40
sta APUSTATUS ; CPU:$C3C3 PRG:03C3 8D 15 40
lda #$C0 ; CPU:$C3C6 PRG:03C6 A9 C0
sta $4017 ; CPU:$C3C8 PRG:03C8 8D 17 40
sta JOY2 ; CPU:$C3C8 PRG:03C8 8D 17 40
jsr $C0CB ; CPU:$C3CB PRG:03CB 20 CB C0
lda #$88 ; CPU:$C3CE PRG:03CE A9 88
sta PpuCtrlShadow ; CPU:$C3D0 PRG:03D0 85 53
sta $2000 ; CPU:$C3D2 PRG:03D2 8D 00 20
sta PPUCTRL ; CPU:$C3D2 PRG:03D2 8D 00 20
rts ; CPU:$C3D5 PRG:03D5 60
; -----------------------------------------------------------------------------
; Routine: InitializeNametablePages
@@ -1084,7 +1084,7 @@ ClearPpuPage:
; Clobbers: Undetermined in Pass 1.
; -----------------------------------------------------------------------------
ClearPpuPage_OnNonzero_C3FA:
sta $2007 ; CPU:$C3FA PRG:03FA 8D 07 20
sta PPUDATA ; CPU:$C3FA PRG:03FA 8D 07 20
dec TransferByteCount ; CPU:$C3FD PRG:03FD C6 E2
bne ClearPpuPage_OnNonzero_C3FA ; CPU:$C3FF PRG:03FF D0 F9
rts ; CPU:$C401 PRG:0401 60
@@ -1099,9 +1099,9 @@ ClearPpuPage_OnNonzero_C3FA:
; -----------------------------------------------------------------------------
ReadControllers:
ldx #$01 ; CPU:$C402 PRG:0402 A2 01
stx $4016 ; CPU:$C404 PRG:0404 8E 16 40
stx JOY1 ; CPU:$C404 PRG:0404 8E 16 40
dex ; CPU:$C407 PRG:0407 CA
stx $4016 ; CPU:$C408 PRG:0408 8E 16 40
stx JOY1 ; CPU:$C408 PRG:0408 8E 16 40
ldy #$08 ; CPU:$C40B PRG:040B A0 08
; -----------------------------------------------------------------------------
; Routine: ReadControllers_OnNonzero_C40D
@@ -1113,13 +1113,13 @@ ReadControllers:
; Clobbers: Undetermined in Pass 1.
; -----------------------------------------------------------------------------
ReadControllers_OnNonzero_C40D:
lda $4016 ; CPU:$C40D PRG:040D AD 16 40
lda JOY1 ; CPU:$C40D PRG:040D AD 16 40
sta ControllerReadScratch ; CPU:$C410 PRG:0410 85 E7
lsr a ; CPU:$C412 PRG:0412 4A
ora ControllerReadScratch ; CPU:$C413 PRG:0413 05 E7
lsr a ; CPU:$C415 PRG:0415 4A
rol Controller1Shift ; CPU:$C416 PRG:0416 26 E4
lda $4017 ; CPU:$C418 PRG:0418 AD 17 40
lda JOY2 ; CPU:$C418 PRG:0418 AD 17 40
sta ControllerReadScratch ; CPU:$C41B PRG:041B 85 E7
lsr a ; CPU:$C41D PRG:041D 4A
ora ControllerReadScratch ; CPU:$C41E PRG:041E 05 E7
@@ -1315,7 +1315,7 @@ ReadControllers_CallNext_C4AA:
; -----------------------------------------------------------------------------
ReadControllers_OnNonzero_C4AF:
lda ($E4),y ; CPU:$C4AF PRG:04AF B1 E4
sta $2007 ; CPU:$C4B1 PRG:04B1 8D 07 20
sta PPUDATA ; CPU:$C4B1 PRG:04B1 8D 07 20
iny ; CPU:$C4B4 PRG:04B4 C8
dec TransferByteCount ; CPU:$C4B5 PRG:04B5 C6 E2
bne ReadControllers_OnNonzero_C4AF ; CPU:$C4B7 PRG:04B7 D0 F6
@@ -1330,11 +1330,11 @@ ReadControllers_OnNonzero_C4AF:
; Clobbers: Undetermined in Pass 1.
; -----------------------------------------------------------------------------
ReadControllers_LoadIndexAndContinue_C4BA:
ldx $2002 ; CPU:$C4BA PRG:04BA AE 02 20
ldx PPUSTATUS ; CPU:$C4BA PRG:04BA AE 02 20
ldx IndirectPointerHi ; CPU:$C4BD PRG:04BD A6 E1
stx $2006 ; CPU:$C4BF PRG:04BF 8E 06 20
stx PPUADDR ; CPU:$C4BF PRG:04BF 8E 06 20
ldx IndirectPointerLo ; CPU:$C4C2 PRG:04C2 A6 E0
stx $2006 ; CPU:$C4C4 PRG:04C4 8E 06 20
stx PPUADDR ; CPU:$C4C4 PRG:04C4 8E 06 20
rts ; CPU:$C4C7 PRG:04C7 60
; -----------------------------------------------------------------------------
; Routine: ReadControllers_LoadAndContinue_C4C8
@@ -1366,13 +1366,13 @@ ReadControllers_StoreAndContinue_C4CD:
sta IndirectPointerLo ; CPU:$C4D1 PRG:04D1 85 E0
pla ; CPU:$C4D3 PRG:04D3 68
sta IndirectPointerHi ; CPU:$C4D4 PRG:04D4 85 E1
lda ($E0),y ; CPU:$C4D6 PRG:04D6 B1 E0
lda (IndirectPointerLo),y ; CPU:$C4D6 PRG:04D6 B1 E0
tax ; CPU:$C4D8 PRG:04D8 AA
iny ; CPU:$C4D9 PRG:04D9 C8
lda ($E0),y ; CPU:$C4DA PRG:04DA B1 E0
lda (IndirectPointerLo),y ; CPU:$C4DA PRG:04DA B1 E0
sta IndirectPointerHi ; CPU:$C4DC PRG:04DC 85 E1
stx IndirectPointerLo ; CPU:$C4DE PRG:04DE 86 E0
jmp ($00E0) ; CPU:$C4E0 PRG:04E0 6C E0 00
jmp (IndirectPointerLo) ; CPU:$C4E0 PRG:04E0 6C E0 00
; -----------------------------------------------------------------------------
; Routine: ReadControllers_LoadIndexAndContinue_C4E3
; Global: Contextual control-flow entry identified from its parent routine and incoming branch usage.
@@ -1435,10 +1435,10 @@ ReadControllers_StoreAndContinue_C505:
; Clobbers: Undetermined in Pass 1.
; -----------------------------------------------------------------------------
ReadControllers_OnEqualFE_C509:
lda ($E2),y ; CPU:$C509 PRG:0509 B1 E2
lda (TransferByteCount),y ; CPU:$C509 PRG:0509 B1 E2
sta IndirectPointerLo ; CPU:$C50B PRG:050B 85 E0
iny ; CPU:$C50D PRG:050D C8
lda ($E2),y ; CPU:$C50E PRG:050E B1 E2
lda (TransferByteCount),y ; CPU:$C50E PRG:050E B1 E2
sta IndirectPointerHi ; CPU:$C510 PRG:0510 85 E1
iny ; CPU:$C512 PRG:0512 C8
jsr $C4BA ; CPU:$C513 PRG:0513 20 BA C4
@@ -1452,7 +1452,7 @@ ReadControllers_OnEqualFE_C509:
; Clobbers: Undetermined in Pass 1.
; -----------------------------------------------------------------------------
ReadControllers_OnZero_C516:
lda ($E2),y ; CPU:$C516 PRG:0516 B1 E2
lda (TransferByteCount),y ; CPU:$C516 PRG:0516 B1 E2
iny ; CPU:$C518 PRG:0518 C8
cmp #$FD ; CPU:$C519 PRG:0519 C9 FD
bcc ReadControllers_OnBelowFD_C527 ; CPU:$C51B PRG:051B 90 0A
@@ -1472,7 +1472,7 @@ ReadControllers_OnZero_C516:
; -----------------------------------------------------------------------------
ReadControllers_OnBelowFD_C527:
and Controller1Shift ; CPU:$C527 PRG:0527 25 E4
sta $2007 ; CPU:$C529 PRG:0529 8D 07 20
sta PPUDATA ; CPU:$C529 PRG:0529 8D 07 20
jmp $C516 ; CPU:$C52C PRG:052C 4C 16 C5
; -----------------------------------------------------------------------------
; Routine: ReadControllers_OnEqualFF_C52F
@@ -1495,10 +1495,10 @@ ReadControllers_OnEqualFF_C52F:
; Clobbers: Undetermined in Pass 1.
; -----------------------------------------------------------------------------
ReadControllers_OnEqualFD_C530:
lda ($E2),y ; CPU:$C530 PRG:0530 B1 E2
lda (TransferByteCount),y ; CPU:$C530 PRG:0530 B1 E2
tax ; CPU:$C532 PRG:0532 AA
iny ; CPU:$C533 PRG:0533 C8
lda ($E2),y ; CPU:$C534 PRG:0534 B1 E2
lda (TransferByteCount),y ; CPU:$C534 PRG:0534 B1 E2
iny ; CPU:$C536 PRG:0536 C8
; -----------------------------------------------------------------------------
; Routine: ReadControllers_OnNonzero_C537
@@ -1510,7 +1510,7 @@ ReadControllers_OnEqualFD_C530:
; Clobbers: Undetermined in Pass 1.
; -----------------------------------------------------------------------------
ReadControllers_OnNonzero_C537:
sta $2007 ; CPU:$C537 PRG:0537 8D 07 20
sta PPUDATA ; CPU:$C537 PRG:0537 8D 07 20
dex ; CPU:$C53A PRG:053A CA
bne ReadControllers_OnNonzero_C537 ; CPU:$C53B PRG:053B D0 FA
beq ReadControllers_OnZero_C516 ; CPU:$C53D PRG:053D F0 D7
@@ -1835,7 +1835,7 @@ ReadControllers_CallNext_C63A:
ReadControllers_StoreAndContinue_C643:
and #$0F ; CPU:$C643 PRG:0643 29 0F
ora #$30 ; CPU:$C645 PRG:0645 09 30
sta $2007 ; CPU:$C647 PRG:0647 8D 07 20
sta PPUDATA ; CPU:$C647 PRG:0647 8D 07 20
; -----------------------------------------------------------------------------
; Routine: ReadControllers_OnCarrySet_C64A
; Global: Contextual control-flow entry identified from its parent routine and incoming branch usage.
@@ -1914,7 +1914,7 @@ ReadControllers_OnNonnegative_C68D:
; -----------------------------------------------------------------------------
ReadControllers_OnNonnegative_C693:
jsr $C4BA ; CPU:$C693 PRG:0693 20 BA C4
sty $2007 ; CPU:$C696 PRG:0696 8C 07 20
sty PPUDATA ; CPU:$C696 PRG:0696 8C 07 20
ldx #$E0 ; CPU:$C699 PRG:0699 A2 E0
lda #$01 ; CPU:$C69B PRG:069B A9 01
eor #$FF ; CPU:$C69D PRG:069D 49 FF
@@ -1954,7 +1954,7 @@ ReadControllers_CallNext_C6AD:
ldx #$E0 ; CPU:$C6B8 PRG:06B8 A2 E0
jsr $C53F ; CPU:$C6BA PRG:06BA 20 3F C5
jsr $C4BA ; CPU:$C6BD PRG:06BD 20 BA C4
sty $2007 ; CPU:$C6C0 PRG:06C0 8C 07 20
sty PPUDATA ; CPU:$C6C0 PRG:06C0 8C 07 20
; -----------------------------------------------------------------------------
; Routine: ReadControllers_OnNonnegative_C6C3
; Global: Contextual control-flow entry identified from its parent routine and incoming branch usage.
@@ -2398,13 +2398,13 @@ ObjectSlotOffsetTable:
; Clobbers: Undetermined in Pass 1.
; -----------------------------------------------------------------------------
SetPaletteRamAddress:
lda $2002 ; CPU:$CA11 PRG:0A11 AD 02 20
lda PPUSTATUS ; CPU:$CA11 PRG:0A11 AD 02 20
lda #$3F ; CPU:$CA14 PRG:0A14 A9 3F
sta $2006 ; CPU:$CA16 PRG:0A16 8D 06 20
sta PPUADDR ; CPU:$CA16 PRG:0A16 8D 06 20
lda #$00 ; CPU:$CA19 PRG:0A19 A9 00
sta $2006 ; CPU:$CA1B PRG:0A1B 8D 06 20
sta $2006 ; CPU:$CA1E PRG:0A1E 8D 06 20
sta $2006 ; CPU:$CA21 PRG:0A21 8D 06 20
sta PPUADDR ; CPU:$CA1B PRG:0A1B 8D 06 20
sta PPUADDR ; CPU:$CA1E PRG:0A1E 8D 06 20
sta PPUADDR ; CPU:$CA21 PRG:0A21 8D 06 20
rts ; CPU:$CA24 PRG:0A24 60
; -----------------------------------------------------------------------------
; Routine: SetPaletteRamAddress_LoadAndContinue_CA25
@@ -2512,7 +2512,7 @@ SetPaletteRamAddress_LoadAndContinue_CA4B:
; -----------------------------------------------------------------------------
SetPaletteRamAddress_StoreAndContinue_CA4F:
sta PpuCtrlShadow ; CPU:$CA4F PRG:0A4F 85 53
sta $2000 ; CPU:$CA51 PRG:0A51 8D 00 20
sta PPUCTRL ; CPU:$CA51 PRG:0A51 8D 00 20
rts ; CPU:$CA54 PRG:0A54 60
; -----------------------------------------------------------------------------
; Routine: SetPaletteRamAddress_LoadAndContinue_CA55
@@ -3086,11 +3086,11 @@ SetupScreenPaletteTransfer_LoadIndexAndContinue_CEE3:
; Clobbers: Undetermined in Pass 1.
; -----------------------------------------------------------------------------
SetupScreenPaletteTransfer_LoadAndContinue_CEE5:
lda $2002 ; CPU:$CEE5 PRG:0EE5 AD 02 20
lda PPUSTATUS ; CPU:$CEE5 PRG:0EE5 AD 02 20
lda Zp78 ; CPU:$CEE8 PRG:0EE8 A5 78
sta $2006 ; CPU:$CEEA PRG:0EEA 8D 06 20
sta PPUADDR ; CPU:$CEEA PRG:0EEA 8D 06 20
lda Zp77 ; CPU:$CEED PRG:0EED A5 77
sta $2006 ; CPU:$CEEF PRG:0EEF 8D 06 20
sta PPUADDR ; CPU:$CEEF PRG:0EEF 8D 06 20
; -----------------------------------------------------------------------------
; Routine: SetupScreenPaletteTransfer_LoadAndContinue_CEF2
; Global: Contextual control-flow entry identified from its parent routine and incoming branch usage.
@@ -3119,7 +3119,7 @@ SetupScreenPaletteTransfer_LoadAndContinue_CEF2:
SetupScreenPaletteTransfer_OnNonzero_CEFA:
inx ; CPU:$CEFA PRG:0EFA E8
beq SetupScreenPaletteTransfer_OnZero_CF03 ; CPU:$CEFB PRG:0EFB F0 06
sta $2007 ; CPU:$CEFD PRG:0EFD 8D 07 20
sta PPUDATA ; CPU:$CEFD PRG:0EFD 8D 07 20
jmp $CEF2 ; CPU:$CF00 PRG:0F00 4C F2 CE
; -----------------------------------------------------------------------------
; Routine: SetupScreenPaletteTransfer_OnZero_CF03
@@ -3585,14 +3585,14 @@ ProcessQueuedVramUpdates_OnEqual01_D291:
; Clobbers: Undetermined in Pass 1.
; -----------------------------------------------------------------------------
ProcessQueuedVramUpdates_OnNonzero_D295:
sta $2000 ; CPU:$D295 PRG:1295 8D 00 20
lda $2002 ; CPU:$D298 PRG:1298 AD 02 20
sta PPUCTRL ; CPU:$D295 PRG:1295 8D 00 20
lda PPUSTATUS ; CPU:$D298 PRG:1298 AD 02 20
inx ; CPU:$D29B PRG:129B E8
lda $0700,x ; CPU:$D29C PRG:129C BD 00 07
sta $2006 ; CPU:$D29F PRG:129F 8D 06 20
sta PPUADDR ; CPU:$D29F PRG:129F 8D 06 20
inx ; CPU:$D2A2 PRG:12A2 E8
lda $0700,x ; CPU:$D2A3 PRG:12A3 BD 00 07
sta $2006 ; CPU:$D2A6 PRG:12A6 8D 06 20
sta PPUADDR ; CPU:$D2A6 PRG:12A6 8D 06 20
inx ; CPU:$D2A9 PRG:12A9 E8
lda $0700,x ; CPU:$D2AA PRG:12AA BD 00 07
tay ; CPU:$D2AD PRG:12AD A8
@@ -3612,7 +3612,7 @@ ProcessQueuedVramUpdates_OnNonzero_D295:
ProcessQueuedVramUpdates_OnNonzero_D2B6:
inx ; CPU:$D2B6 PRG:12B6 E8
lda $0700,x ; CPU:$D2B7 PRG:12B7 BD 00 07
sta $2007 ; CPU:$D2BA PRG:12BA 8D 07 20
sta PPUDATA ; CPU:$D2BA PRG:12BA 8D 07 20
dey ; CPU:$D2BD PRG:12BD 88
bne ProcessQueuedVramUpdates_OnNonzero_D2B6 ; CPU:$D2BE PRG:12BE D0 F6
beq ProcessQueuedVramUpdates_OnZero_D2C9 ; CPU:$D2C0 PRG:12C0 F0 07
@@ -3627,7 +3627,7 @@ ProcessQueuedVramUpdates_OnNonzero_D2B6:
; -----------------------------------------------------------------------------
ProcessQueuedVramUpdates_JoinBranchPaths_D2C2:
inx ; CPU:$D2C2 PRG:12C2 E8
sta $2007 ; CPU:$D2C3 PRG:12C3 8D 07 20
sta PPUDATA ; CPU:$D2C3 PRG:12C3 8D 07 20
dey ; CPU:$D2C6 PRG:12C6 88
bne ProcessQueuedVramUpdates_JoinBranchPaths_D2C2 ; CPU:$D2C7 PRG:12C7 D0 F9
; -----------------------------------------------------------------------------
@@ -3657,7 +3657,7 @@ ProcessQueuedVramUpdates_OnZero_D2CD:
sta $0700 ; CPU:$D2D1 PRG:12D1 8D 00 07
lda PpuCtrlShadow ; CPU:$D2D4 PRG:12D4 A5 53
and #$7B ; CPU:$D2D6 PRG:12D6 29 7B
sta $2000 ; CPU:$D2D8 PRG:12D8 8D 00 20
sta PPUCTRL ; CPU:$D2D8 PRG:12D8 8D 00 20
clc ; CPU:$D2DB PRG:12DB 18
rts ; CPU:$D2DC PRG:12DC 60
@@ -3676,7 +3676,7 @@ VramDescriptorPointerTable:
; -----------------------------------------------------------------------------
ProcessQueuedVramUpdates_LoadAndContinue_D2FD:
lda #$00 ; CPU:$D2FD PRG:12FD A9 00
sta $2001 ; CPU:$D2FF PRG:12FF 8D 01 20
sta PPUMASK ; CPU:$D2FF PRG:12FF 8D 01 20
lda Zp64 ; CPU:$D302 PRG:1302 A5 64
asl a ; CPU:$D304 PRG:1304 0A
asl a ; CPU:$D305 PRG:1305 0A
@@ -3687,8 +3687,8 @@ ProcessQueuedVramUpdates_LoadAndContinue_D2FD:
jsr $CEB7 ; CPU:$D30F PRG:130F 20 B7 CE
jsr $D575 ; CPU:$D312 PRG:1312 20 75 D5
lda #$00 ; CPU:$D315 PRG:1315 A9 00
sta $2000 ; CPU:$D317 PRG:1317 8D 00 20
lda $2002 ; CPU:$D31A PRG:131A AD 02 20
sta PPUCTRL ; CPU:$D317 PRG:1317 8D 00 20
lda PPUSTATUS ; CPU:$D31A PRG:131A AD 02 20
rts ; CPU:$D31D PRG:131D 60
; -----------------------------------------------------------------------------
; Routine: ConfigurePpuForScreenTransfer
@@ -3706,7 +3706,7 @@ ConfigurePpuForScreenTransfer:
and PpuCtrlShadow ; CPU:$D324 PRG:1324 25 53
ora #$08 ; CPU:$D326 PRG:1326 09 08
sta PpuCtrlShadow ; CPU:$D328 PRG:1328 85 53
sta $2000 ; CPU:$D32A PRG:132A 8D 00 20
sta PPUCTRL ; CPU:$D32A PRG:132A 8D 00 20
rts ; CPU:$D32D PRG:132D 60
VramDescriptorDispatchTable:
@@ -3761,13 +3761,13 @@ ExecuteVramDescriptorStream_OnNonzero_D35F:
; Clobbers: Undetermined in Pass 1.
; -----------------------------------------------------------------------------
ExecuteVramDescriptorStream_OnNonzero_D365:
lda $2002 ; CPU:$D365 PRG:1365 AD 02 20
lda PPUSTATUS ; CPU:$D365 PRG:1365 AD 02 20
lda ($7C),y ; CPU:$D368 PRG:1368 B1 7C
tax ; CPU:$D36A PRG:136A AA
iny ; CPU:$D36B PRG:136B C8
lda ($7C),y ; CPU:$D36C PRG:136C B1 7C
sta $2006 ; CPU:$D36E PRG:136E 8D 06 20
stx $2006 ; CPU:$D371 PRG:1371 8E 06 20
sta PPUADDR ; CPU:$D36E PRG:136E 8D 06 20
stx PPUADDR ; CPU:$D371 PRG:1371 8E 06 20
iny ; CPU:$D374 PRG:1374 C8
; -----------------------------------------------------------------------------
; Routine: ExecuteVramDescriptorStream_OnNegative_D375
@@ -3826,7 +3826,7 @@ WriteVramDescriptorPayload_OnNonzero_D38B:
beq ExecuteVramDescriptorStream_OnEqual5A_D388 ; CPU:$D38F PRG:138F F0 F7
cmp #$57 ; CPU:$D391 PRG:1391 C9 57
beq WriteVramDescriptorPayload_OnEqual57_D39B ; CPU:$D393 PRG:1393 F0 06
sta $2007 ; CPU:$D395 PRG:1395 8D 07 20
sta PPUDATA ; CPU:$D395 PRG:1395 8D 07 20
; -----------------------------------------------------------------------------
; Routine: WriteVramDescriptorPayload_OnZero_D398
; Global: Contextual control-flow entry identified from its parent routine and incoming branch usage.
@@ -3864,7 +3864,7 @@ WriteVramDescriptorPayload_OnEqual57_D39B:
; Clobbers: Undetermined in Pass 1.
; -----------------------------------------------------------------------------
WriteVramDescriptorPayload_OnNonzero_D3A2:
sta $2007 ; CPU:$D3A2 PRG:13A2 8D 07 20
sta PPUDATA ; CPU:$D3A2 PRG:13A2 8D 07 20
dex ; CPU:$D3A5 PRG:13A5 CA
bne WriteVramDescriptorPayload_OnNonzero_D3A2 ; CPU:$D3A6 PRG:13A6 D0 FA
beq WriteVramDescriptorPayload_OnZero_D398 ; CPU:$D3A8 PRG:13A8 F0 EE
@@ -3916,11 +3916,11 @@ WriteVramDescriptorPayload_LoadAndContinue_D575:
sta WorkPointer1Lo ; CPU:$D577 PRG:1577 85 7E
lda #$03 ; CPU:$D579 PRG:1579 A9 03
sta WorkPointer1Hi ; CPU:$D57B PRG:157B 85 7F
lda $2002 ; CPU:$D57D PRG:157D AD 02 20
lda PPUSTATUS ; CPU:$D57D PRG:157D AD 02 20
lda #$20 ; CPU:$D580 PRG:1580 A9 20
sta $2006 ; CPU:$D582 PRG:1582 8D 06 20
sta PPUADDR ; CPU:$D582 PRG:1582 8D 06 20
lda #$92 ; CPU:$D585 PRG:1585 A9 92
sta $2006 ; CPU:$D587 PRG:1587 8D 06 20
sta PPUADDR ; CPU:$D587 PRG:1587 8D 06 20
ldy #$03 ; CPU:$D58A PRG:158A A0 03
; -----------------------------------------------------------------------------
; Routine: WriteVramDescriptorPayload_OnNonnegative_D58C
@@ -3934,7 +3934,7 @@ WriteVramDescriptorPayload_LoadAndContinue_D575:
WriteVramDescriptorPayload_OnNonnegative_D58C:
lda ($7E),y ; CPU:$D58C PRG:158C B1 7E
ora #$30 ; CPU:$D58E PRG:158E 09 30
sta $2007 ; CPU:$D590 PRG:1590 8D 07 20
sta PPUDATA ; CPU:$D590 PRG:1590 8D 07 20
dey ; CPU:$D593 PRG:1593 88
bpl WriteVramDescriptorPayload_OnNonnegative_D58C ; CPU:$D594 PRG:1594 10 F6
rts ; CPU:$D596 PRG:1596 60
@@ -3951,11 +3951,11 @@ UpdateMenuSelection:
lda ControllerEdgeFlags ; CPU:$D597 PRG:1597 A5 09
and #$07 ; CPU:$D599 PRG:1599 29 07
bne UpdateMenuSelection_JoinBranchPaths_D5F1 ; CPU:$D59B PRG:159B D0 54
inc $0302 ; CPU:$D59D PRG:159D EE 02 03
lda $0302 ; CPU:$D5A0 PRG:15A0 AD 02 03
inc MenuSelectionIndex ; CPU:$D59D PRG:159D EE 02 03
lda MenuSelectionIndex ; CPU:$D5A0 PRG:15A0 AD 02 03
eor #$03 ; CPU:$D5A3 PRG:15A3 49 03
bne UpdateMenuSelection_OnNonzero_D5AA ; CPU:$D5A5 PRG:15A5 D0 03
sta $0302 ; CPU:$D5A7 PRG:15A7 8D 02 03
sta MenuSelectionIndex ; CPU:$D5A7 PRG:15A7 8D 02 03
; -----------------------------------------------------------------------------
; Routine: UpdateMenuSelection_OnNonzero_D5AA
; Global: Contextual control-flow entry identified from its parent routine and incoming branch usage.
@@ -3990,7 +3990,7 @@ UpdateMenuSelection_OnNonzero_D5AA:
; -----------------------------------------------------------------------------
UpdateMenuSelection_OnNonzero_D5C7:
lda ($7E),y ; CPU:$D5C7 PRG:15C7 B1 7E
sta $2007 ; CPU:$D5C9 PRG:15C9 8D 07 20
sta PPUDATA ; CPU:$D5C9 PRG:15C9 8D 07 20
iny ; CPU:$D5CC PRG:15CC C8
dex ; CPU:$D5CD PRG:15CD CA
bne UpdateMenuSelection_OnNonzero_D5C7 ; CPU:$D5CE PRG:15CE D0 F7
@@ -4007,7 +4007,7 @@ UpdateMenuSelection_OnNonzero_D5C7:
; -----------------------------------------------------------------------------
UpdateMenuSelection_OnNonzero_D5D4:
lda ($7C),y ; CPU:$D5D4 PRG:15D4 B1 7C
sta $2007 ; CPU:$D5D6 PRG:15D6 8D 07 20
sta PPUDATA ; CPU:$D5D6 PRG:15D6 8D 07 20
iny ; CPU:$D5D9 PRG:15D9 C8
dex ; CPU:$D5DA PRG:15DA CA
bne UpdateMenuSelection_OnNonzero_D5D4 ; CPU:$D5DB PRG:15DB D0 F7
@@ -4099,7 +4099,7 @@ UpdateMenuSelection_OnNonzero_D5FE:
; -----------------------------------------------------------------------------
UpdateMenuSelection_OnNonzero_D616:
lda ($7E),y ; CPU:$D616 PRG:1616 B1 7E
sta $2007 ; CPU:$D618 PRG:1618 8D 07 20
sta PPUDATA ; CPU:$D618 PRG:1618 8D 07 20
iny ; CPU:$D61B PRG:161B C8
dex ; CPU:$D61C PRG:161C CA
cpx Zp77 ; CPU:$D61D PRG:161D E4 77
@@ -4150,7 +4150,7 @@ UpdateMenuSelection_OnZero_D627:
; -----------------------------------------------------------------------------
UpdateMenuSelection_OnNonzero_D62B:
lda ($7C),y ; CPU:$D62B PRG:162B B1 7C
sta $2007 ; CPU:$D62D PRG:162D 8D 07 20
sta PPUDATA ; CPU:$D62D PRG:162D 8D 07 20
iny ; CPU:$D630 PRG:1630 C8
dex ; CPU:$D631 PRG:1631 CA
cpx Zp78 ; CPU:$D632 PRG:1632 E4 78
@@ -4172,11 +4172,11 @@ MenuItemPointerTable:
; Clobbers: Undetermined in Pass 1.
; -----------------------------------------------------------------------------
SetPaletteAddress:
lda $2002 ; CPU:$D657 PRG:1657 AD 02 20
lda PPUSTATUS ; CPU:$D657 PRG:1657 AD 02 20
lda #$3F ; CPU:$D65A PRG:165A A9 3F
sta $2006 ; CPU:$D65C PRG:165C 8D 06 20
sta PPUADDR ; CPU:$D65C PRG:165C 8D 06 20
lda #$00 ; CPU:$D65F PRG:165F A9 00
sta $2006 ; CPU:$D661 PRG:1661 8D 06 20
sta PPUADDR ; CPU:$D661 PRG:1661 8D 06 20
rts ; CPU:$D664 PRG:1664 60
; -----------------------------------------------------------------------------
; Routine: LoadMenuDescriptorPointer
@@ -4249,7 +4249,7 @@ InitializeRoundParameters:
stx Zp6B ; CPU:$D753 PRG:1753 86 6B
stx Zp66 ; CPU:$D755 PRG:1755 86 66
ldx #$02 ; CPU:$D757 PRG:1757 A2 02
lda $03B0 ; CPU:$D759 PRG:1759 AD B0 03
lda VariantSequenceCounter ; CPU:$D759 PRG:1759 AD B0 03
lsr a ; CPU:$D75C PRG:175C 4A
bcc InitializeRoundParameters_OnCarryClear_D761 ; CPU:$D75D PRG:175D 90 02
ldx #$04 ; CPU:$D75F PRG:175F A2 04
@@ -4266,7 +4266,7 @@ InitializeRoundParameters_OnCarryClear_D761:
stx CurrentGameVariant ; CPU:$D761 PRG:1761 86 63
lda #$00 ; CPU:$D763 PRG:1763 A9 00
sta Zp61 ; CPU:$D765 PRG:1765 85 61
inc $03B0 ; CPU:$D767 PRG:1767 EE B0 03
inc VariantSequenceCounter ; CPU:$D767 PRG:1767 EE B0 03
jmp $C835 ; CPU:$D76A PRG:176A 4C 35 C8
RoundParameterTable:
@@ -11846,7 +11846,7 @@ RequestAudioSequence_OnNonzero_F835:
sty Zp00,x ; CPU:$F84D PRG:384D 94 00
dey ; CPU:$F84F PRG:384F 88
sty Zp08,x ; CPU:$F850 PRG:3850 94 08
lda ($F2),y ; CPU:$F852 PRG:3852 B1 F2
lda (ZpF2),y ; CPU:$F852 PRG:3852 B1 F2
and #$F0 ; CPU:$F854 PRG:3854 29 F0
cmp #$20 ; CPU:$F856 PRG:3856 C9 20
beq RequestAudioSequence_OnEqual20_F85B ; CPU:$F858 PRG:3858 F0 01
@@ -11887,8 +11887,8 @@ RequestAudioSequence_OnZero_F85D:
; Clobbers: Undetermined in Pass 1.
; -----------------------------------------------------------------------------
RequestAudioSequence_OnEqual08_F867:
sta $4000,y ; CPU:$F867 PRG:3867 99 00 40
sta $4001,y ; CPU:$F86A PRG:386A 99 01 40
sta APUPULSE1CTRL,y ; CPU:$F867 PRG:3867 99 00 40
sta APUPULSE1SWEEP,y ; CPU:$F86A PRG:386A 99 01 40
lda Zp2F ; CPU:$F86D PRG:386D A5 2F
and #$3F ; CPU:$F86F PRG:386F 29 3F
sta Zp02,x ; CPU:$F871 PRG:3871 95 02
@@ -11994,7 +11994,7 @@ ProcessAudioFrame_OnNonnegative_F89E:
; Clobbers: Undetermined in Pass 1.
; -----------------------------------------------------------------------------
ProcessAudioFrame_OnEqual08_F8A9:
sta $4000,x ; CPU:$F8A9 PRG:38A9 9D 00 40
sta APUPULSE1CTRL,x ; CPU:$F8A9 PRG:38A9 9D 00 40
rts ; CPU:$F8AC PRG:38AC 60
; -----------------------------------------------------------------------------
; Routine: ProcessAudioFrame_JoinBranchPaths_F8AD
@@ -12007,10 +12007,10 @@ ProcessAudioFrame_OnEqual08_F8A9:
; -----------------------------------------------------------------------------
ProcessAudioFrame_JoinBranchPaths_F8AD:
iny ; CPU:$F8AD PRG:38AD C8
lda ($F6),y ; CPU:$F8AE PRG:38AE B1 F6
lda (AudioSequencePointerLo),y ; CPU:$F8AE PRG:38AE B1 F6
sta Zp03,x ; CPU:$F8B0 PRG:38B0 95 03
iny ; CPU:$F8B2 PRG:38B2 C8
lda ($F6),y ; CPU:$F8B3 PRG:38B3 B1 F6
lda (AudioSequencePointerLo),y ; CPU:$F8B3 PRG:38B3 B1 F6
sta Zp04,x ; CPU:$F8B5 PRG:38B5 95 04
iny ; CPU:$F8B7 PRG:38B7 C8
tya ; CPU:$F8B8 PRG:38B8 98
@@ -12068,8 +12068,8 @@ DecodeAudioStream_IncrementAndContinue_F8E1:
tya ; CPU:$F8E3 PRG:38E3 98
sta Zp08,x ; CPU:$F8E4 PRG:38E4 95 08
ldx AudioApuRegisterOffset ; CPU:$F8E6 PRG:38E6 A6 F5
sta $4002,x ; CPU:$F8E8 PRG:38E8 9D 02 40
sta $4003,x ; CPU:$F8EB PRG:38EB 9D 03 40
sta APUPULSE1TIMERLO,x ; CPU:$F8E8 PRG:38E8 9D 02 40
sta APUPULSE1TIMERHI,x ; CPU:$F8EB PRG:38EB 9D 03 40
; -----------------------------------------------------------------------------
; Routine: DecodeAudioStream_OnEqual16_F8EE
; Global: Contextual control-flow entry identified from its parent routine and incoming branch usage.
@@ -12102,7 +12102,7 @@ DecodeAudioStream_OnZero_F8EF:
; Clobbers: Undetermined in Pass 1.
; -----------------------------------------------------------------------------
DecodeAudioStream_OnZero_F8F2:
lda ($F6),y ; CPU:$F8F2 PRG:38F2 B1 F6
lda (AudioSequencePointerLo),y ; CPU:$F8F2 PRG:38F2 B1 F6
cmp #$FD ; CPU:$F8F4 PRG:38F4 C9 FD
bcc DecodeAudioStream_OnBelowFD_F918 ; CPU:$F8F6 PRG:38F6 90 20
bne DecodeAudioStream_OnNotEqualFD_F902 ; CPU:$F8F8 PRG:38F8 D0 08
@@ -12155,17 +12155,17 @@ DecodeAudioStream_OnBelowFD_F918:
; Clobbers: Undetermined in Pass 1.
; -----------------------------------------------------------------------------
DecodeAudioStream_OnZero_F921:
lda ($F6),y ; CPU:$F921 PRG:3921 B1 F6
lda (AudioSequencePointerLo),y ; CPU:$F921 PRG:3921 B1 F6
and #$F0 ; CPU:$F923 PRG:3923 29 F0
cmp #$20 ; CPU:$F925 PRG:3925 C9 20
bne DecodeAudioStream_OnNotEqual20_F93C ; CPU:$F927 PRG:3927 D0 13
lda ($F6),y ; CPU:$F929 PRG:3929 B1 F6
lda (AudioSequencePointerLo),y ; CPU:$F929 PRG:3929 B1 F6
and #$0F ; CPU:$F92B PRG:392B 29 0F
sta Zp01,x ; CPU:$F92D PRG:392D 95 01
iny ; CPU:$F92F PRG:392F C8
lda ($F6),y ; CPU:$F930 PRG:3930 B1 F6
lda (AudioSequencePointerLo),y ; CPU:$F930 PRG:3930 B1 F6
ldx AudioApuRegisterOffset ; CPU:$F932 PRG:3932 A6 F5
sta $4000,x ; CPU:$F934 PRG:3934 9D 00 40
sta APUPULSE1CTRL,x ; CPU:$F934 PRG:3934 9D 00 40
ldx AudioChannelStructOffset ; CPU:$F937 PRG:3937 A6 F4
sta Zp09,x ; CPU:$F939 PRG:3939 95 09
iny ; CPU:$F93B PRG:393B C8
@@ -12187,11 +12187,11 @@ DecodeAudioStream_OnNotEqual20_F93C:
lda Zp09,x ; CPU:$F946 PRG:3946 B5 09
and #$F0 ; CPU:$F948 PRG:3948 29 F0
sta Zp09,x ; CPU:$F94A PRG:394A 95 09
lda ($F6),y ; CPU:$F94C PRG:394C B1 F6
lda (AudioSequencePointerLo),y ; CPU:$F94C PRG:394C B1 F6
cmp #$F8 ; CPU:$F94E PRG:394E C9 F8
bne DecodeAudioStream_OnNotEqualF8_F955 ; CPU:$F950 PRG:3950 D0 03
iny ; CPU:$F952 PRG:3952 C8
lda ($F6),y ; CPU:$F953 PRG:3953 B1 F6
lda (AudioSequencePointerLo),y ; CPU:$F953 PRG:3953 B1 F6
; -----------------------------------------------------------------------------
; Routine: DecodeAudioStream_OnNotEqualF8_F955
; Global: Contextual control-flow entry identified from its parent routine and incoming branch usage.
@@ -12209,7 +12209,7 @@ DecodeAudioStream_OnNotEqualF8_F955:
ora Zp09,x ; CPU:$F959 PRG:3959 15 09
sta Zp09,x ; CPU:$F95B PRG:395B 95 09
ldx AudioApuRegisterOffset ; CPU:$F95D PRG:395D A6 F5
sta $4000,x ; CPU:$F95F PRG:395F 9D 00 40
sta APUPULSE1CTRL,x ; CPU:$F95F PRG:395F 9D 00 40
; -----------------------------------------------------------------------------
; Routine: DecodeAudioStream_OnZero_F962
; Global: Contextual control-flow entry identified from its parent routine and incoming branch usage.
@@ -12220,11 +12220,11 @@ DecodeAudioStream_OnNotEqualF8_F955:
; Clobbers: Undetermined in Pass 1.
; -----------------------------------------------------------------------------
DecodeAudioStream_OnZero_F962:
lda ($F6),y ; CPU:$F962 PRG:3962 B1 F6
lda (AudioSequencePointerLo),y ; CPU:$F962 PRG:3962 B1 F6
and #$07 ; CPU:$F964 PRG:3964 29 07
sta ZpF0 ; CPU:$F966 PRG:3966 85 F0
iny ; CPU:$F968 PRG:3968 C8
lda ($F6),y ; CPU:$F969 PRG:3969 B1 F6
lda (AudioSequencePointerLo),y ; CPU:$F969 PRG:3969 B1 F6
sta ZpF1 ; CPU:$F96B PRG:396B 85 F1
ldx AudioChannelStructOffset ; CPU:$F96D PRG:396D A6 F4
jsr $FA80 ; CPU:$F96F PRG:396F 20 80 FA
@@ -12281,7 +12281,7 @@ ExecuteAudioCommand_OnNotEqual08_F981:
ExecuteAudioCommand_OnNonzero_F987:
dec AudioSequencePointerLo ; CPU:$F987 PRG:3987 C6 F6
ldy #$00 ; CPU:$F989 PRG:3989 A0 00
lda ($F6),y ; CPU:$F98B PRG:398B B1 F6
lda (AudioSequencePointerLo),y ; CPU:$F98B PRG:398B B1 F6
and #$F0 ; CPU:$F98D PRG:398D 29 F0
cmp #$C0 ; CPU:$F98F PRG:398F C9 C0
bne ExecuteAudioCommand_OnNotEqualC0_F994 ; CPU:$F991 PRG:3991 D0 01
@@ -12364,7 +12364,7 @@ ExecuteAudioCommand_OnNonnegative_F9BD:
sbc #$01 ; CPU:$F9BF PRG:39BF E9 01
sta Zp09,x ; CPU:$F9C1 PRG:39C1 95 09
ldx AudioApuRegisterOffset ; CPU:$F9C3 PRG:39C3 A6 F5
sta $4000,x ; CPU:$F9C5 PRG:39C5 9D 00 40
sta APUPULSE1CTRL,x ; CPU:$F9C5 PRG:39C5 9D 00 40
rts ; CPU:$F9C8 PRG:39C8 60
; -----------------------------------------------------------------------------
; Routine: ExecuteAudioCommand_LoadAndContinue_F9C9
@@ -12389,29 +12389,29 @@ ExecuteAudioCommand_LoadAndContinue_F9C9:
; Clobbers: Undetermined in Pass 1.
; -----------------------------------------------------------------------------
ExecuteAudioCommand_OnZero_F9D1:
lda ($F6),y ; CPU:$F9D1 PRG:39D1 B1 F6
lda (AudioSequencePointerLo),y ; CPU:$F9D1 PRG:39D1 B1 F6
and #$F0 ; CPU:$F9D3 PRG:39D3 29 F0
cmp #$D0 ; CPU:$F9D5 PRG:39D5 C9 D0
bne ExecuteAudioCommand_OnNotEqualD0_F9FF ; CPU:$F9D7 PRG:39D7 D0 26
lda ($F6),y ; CPU:$F9D9 PRG:39D9 B1 F6
lda (AudioSequencePointerLo),y ; CPU:$F9D9 PRG:39D9 B1 F6
and #$0F ; CPU:$F9DB PRG:39DB 29 0F
sta Zp0D,x ; CPU:$F9DD PRG:39DD 95 0D
iny ; CPU:$F9DF PRG:39DF C8
lda ($F6),y ; CPU:$F9E0 PRG:39E0 B1 F6
lda (AudioSequencePointerLo),y ; CPU:$F9E0 PRG:39E0 B1 F6
sta Zp05,x ; CPU:$F9E2 PRG:39E2 95 05
ldx AudioApuRegisterOffset ; CPU:$F9E4 PRG:39E4 A6 F5
sta $4000,x ; CPU:$F9E6 PRG:39E6 9D 00 40
sta APUPULSE1CTRL,x ; CPU:$F9E6 PRG:39E6 9D 00 40
iny ; CPU:$F9E9 PRG:39E9 C8
cpx #$08 ; CPU:$F9EA PRG:39EA E0 08
beq ExecuteAudioCommand_JoinBranchPaths_FA12 ; CPU:$F9EC PRG:39EC F0 24
lda ($F6),y ; CPU:$F9EE PRG:39EE B1 F6
lda (AudioSequencePointerLo),y ; CPU:$F9EE PRG:39EE B1 F6
lsr a ; CPU:$F9F0 PRG:39F0 4A
lsr a ; CPU:$F9F1 PRG:39F1 4A
lsr a ; CPU:$F9F2 PRG:39F2 4A
lsr a ; CPU:$F9F3 PRG:39F3 4A
ldx AudioChannelStructOffset ; CPU:$F9F4 PRG:39F4 A6 F4
sta Zp0F,x ; CPU:$F9F6 PRG:39F6 95 0F
lda ($F6),y ; CPU:$F9F8 PRG:39F8 B1 F6
lda (AudioSequencePointerLo),y ; CPU:$F9F8 PRG:39F8 B1 F6
and #$0F ; CPU:$F9FA PRG:39FA 29 0F
sta Zp10,x ; CPU:$F9FC PRG:39FC 95 10
iny ; CPU:$F9FE PRG:39FE C8
@@ -12428,12 +12428,12 @@ ExecuteAudioCommand_OnNotEqualD0_F9FF:
ldx AudioApuRegisterOffset ; CPU:$F9FF PRG:39FF A6 F5
cpx #$08 ; CPU:$FA01 PRG:3A01 E0 08
beq ExecuteAudioCommand_JoinBranchPaths_FA12 ; CPU:$FA03 PRG:3A03 F0 0D
lda ($F6),y ; CPU:$FA05 PRG:3A05 B1 F6
lda (AudioSequencePointerLo),y ; CPU:$FA05 PRG:3A05 B1 F6
cmp #$F0 ; CPU:$FA07 PRG:3A07 C9 F0
bne ExecuteAudioCommand_JoinBranchPaths_FA12 ; CPU:$FA09 PRG:3A09 D0 07
iny ; CPU:$FA0B PRG:3A0B C8
lda ($F6),y ; CPU:$FA0C PRG:3A0C B1 F6
sta $4001,x ; CPU:$FA0E PRG:3A0E 9D 01 40
lda (AudioSequencePointerLo),y ; CPU:$FA0C PRG:3A0C B1 F6
sta APUPULSE1SWEEP,x ; CPU:$FA0E PRG:3A0E 9D 01 40
iny ; CPU:$FA11 PRG:3A11 C8
; -----------------------------------------------------------------------------
; Routine: ExecuteAudioCommand_JoinBranchPaths_FA12
@@ -12445,11 +12445,11 @@ ExecuteAudioCommand_OnNotEqualD0_F9FF:
; Clobbers: Undetermined in Pass 1.
; -----------------------------------------------------------------------------
ExecuteAudioCommand_JoinBranchPaths_FA12:
lda ($F6),y ; CPU:$FA12 PRG:3A12 B1 F6
lda (AudioSequencePointerLo),y ; CPU:$FA12 PRG:3A12 B1 F6
and #$F0 ; CPU:$FA14 PRG:3A14 29 F0
cmp #$E0 ; CPU:$FA16 PRG:3A16 C9 E0
bne ExecuteAudioCommand_OnNotEqualE0_FA23 ; CPU:$FA18 PRG:3A18 D0 09
lda ($F6),y ; CPU:$FA1A PRG:3A1A B1 F6
lda (AudioSequencePointerLo),y ; CPU:$FA1A PRG:3A1A B1 F6
and #$0F ; CPU:$FA1C PRG:3A1C 29 0F
ldx AudioChannelStructOffset ; CPU:$FA1E PRG:3A1E A6 F4
sta Zp0B,x ; CPU:$FA20 PRG:3A20 95 0B
@@ -12466,7 +12466,7 @@ ExecuteAudioCommand_JoinBranchPaths_FA12:
ExecuteAudioCommand_OnNotEqualE0_FA23:
jsr $FAA9 ; CPU:$FA23 PRG:3A23 20 A9 FA
dey ; CPU:$FA26 PRG:3A26 88
lda ($F6),y ; CPU:$FA27 PRG:3A27 B1 F6
lda (AudioSequencePointerLo),y ; CPU:$FA27 PRG:3A27 B1 F6
and #$0F ; CPU:$FA29 PRG:3A29 29 0F
sta ZpF0 ; CPU:$FA2B PRG:3A2B 85 F0
beq ExecuteAudioCommand_OnZero_FA3A ; CPU:$FA2D PRG:3A2D F0 0B
@@ -12514,8 +12514,8 @@ ExecuteAudioCommand_OnZero_FA3C:
lda Zp05,x ; CPU:$FA43 PRG:3A43 B5 05
sta Zp09,x ; CPU:$FA45 PRG:3A45 95 09
ldx AudioApuRegisterOffset ; CPU:$FA47 PRG:3A47 A6 F5
sta $4000,x ; CPU:$FA49 PRG:3A49 9D 00 40
lda ($F6),y ; CPU:$FA4C PRG:3A4C B1 F6
sta APUPULSE1CTRL,x ; CPU:$FA49 PRG:3A49 9D 00 40
lda (AudioSequencePointerLo),y ; CPU:$FA4C PRG:3A4C B1 F6
lsr a ; CPU:$FA4E PRG:3A4E 4A
lsr a ; CPU:$FA4F PRG:3A4F 4A
lsr a ; CPU:$FA50 PRG:3A50 4A
@@ -12536,7 +12536,7 @@ ExecuteAudioCommand_OnZero_FA3C:
; Clobbers: Undetermined in Pass 1.
; -----------------------------------------------------------------------------
ExecuteAudioCommand_OnEqual08_FA5E:
sta $4000,x ; CPU:$FA5E PRG:3A5E 9D 00 40
sta APUPULSE1CTRL,x ; CPU:$FA5E PRG:3A5E 9D 00 40
rts ; CPU:$FA61 PRG:3A61 60
; -----------------------------------------------------------------------------
; Routine: ExecuteAudioCommand_OnNotEqual0C_FA62
@@ -12619,7 +12619,7 @@ ExecuteAudioCommand_OnNonzero_FA98:
ExecuteAudioCommand_JoinBranchPaths_FA9A:
lda ZpF0 ; CPU:$FA9A PRG:3A9A A5 F0
ldx AudioApuRegisterOffset ; CPU:$FA9C PRG:3A9C A6 F5
sta $4003,x ; CPU:$FA9E PRG:3A9E 9D 03 40
sta APUPULSE1TIMERHI,x ; CPU:$FA9E PRG:3A9E 9D 03 40
; -----------------------------------------------------------------------------
; Routine: ExecuteAudioCommand_OnNotEqual08_FAA1
; Global: Contextual control-flow entry identified from its parent routine and incoming branch usage.
@@ -12632,7 +12632,7 @@ ExecuteAudioCommand_JoinBranchPaths_FA9A:
ExecuteAudioCommand_OnNotEqual08_FAA1:
ldx AudioApuRegisterOffset ; CPU:$FAA1 PRG:3AA1 A6 F5
lda ZpF1 ; CPU:$FAA3 PRG:3AA3 A5 F1
sta $4002,x ; CPU:$FAA5 PRG:3AA5 9D 02 40
sta APUPULSE1TIMERLO,x ; CPU:$FAA5 PRG:3AA5 9D 02 40
rts ; CPU:$FAA8 PRG:3AA8 60
; -----------------------------------------------------------------------------
; Routine: ExecuteAudioCommand_LoadIndexAndContinue_FAA9