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

+25
View File
@@ -0,0 +1,25 @@
CA65 ?= ca65
LD65 ?= ld65
all: reconstructed.nes verify
prg.o: prg.s symbols.inc locals.inc
$(CA65) -g -o $@ $<
header.o: header.s
$(CA65) -g -o $@ $<
chr.o: chr.s
$(CA65) -g -o $@ $<
reconstructed.nes: header.o prg.o chr.o linker.cfg
$(LD65) -C linker.cfg -m reconstructed.map -Ln reconstructed.lbl -o $@ header.o prg.o chr.o
verify: reconstructed.nes
cmp reconstructed.nes rom.nes
@echo "Byte-identical ROM verified."
clean:
rm -f *.o reconstructed.nes reconstructed.map reconstructed.lbl
.PHONY: all verify clean
Binary file not shown.
+2
View File
@@ -0,0 +1,2 @@
.segment "CHR"
.incbin "chr.bin"
File diff suppressed because it is too large. Load diff
+482
View File
@@ -0,0 +1,482 @@
label Label_C79E Reset
label Label_C7E1 MainGameLoop
label Label_C7E7 InitPPU_1
label Label_C7E1 GameLoopEntry
label Label_C7E7 InitPPURegisters
label Label_C85F NmiHandler
label Label_C8C1 NmiFrameUpdate
label Label_C8CB NmiFrameUpdate2
label Label_C8D4 NmiFrameUpdate3
label Label_C8D7 NmiFrameUpdate4
label Label_C8E8 NmiFrameEnd
label Label_C8F3 InitAPURegisters
label Label_C8F3 InitAPU
label Label_C8FE InitSound_1
label Label_C914 InitLevel
label Label_C940 UpdateGameState
label Label_C95D UpdateGameState2
label Label_C98A UpdateGameState3
label Label_CA30 UpdateSprites
label Label_CA53 UpdateSprites2
label Label_CA56 CallCBAE
label Label_CA5C CallCBB7
label Label_CAA9 CopyToOAM
label Label_CAB9 CopyFromOAM
label Label_CAC9 UpdateSpriteData
label Label_CB1B HandleController
label Label_CBAE ClearZeropage
label Label_CBB7 WaitVBlank_1
label Label_CBBD UpdateScroll
label Label_CBCA UpdateScroll2
label Label_CBF4 UpdateScroll3
label Label_CBF5 UpdateOAM
label Label_CBF7 UpdateOAM2
label Label_CC03 UpdateOAM3
label Label_CC04 UpdateScroll4
label Label_CC23 UpdateScroll5
label Label_CC34 UpdateScroll6
label Label_CC47 InitScroll
label Label_CCC1 UpdateScroll7
label Label_CCD6 UpdateScroll8
label Label_CCF4 CheckGameState_1
label Label_CD22 UpdateGameTimer
label Label_CD6F UpdateSpritePosition
label Label_CD76 UpdateSpritePosition2
label Label_CD7F UpdateSpritePosition3
label Label_CD89 UpdateSpritePosition4
label Label_CD9D UpdateSpritePosition5
label Label_CDB1 UpdateSpritePosition6
label Label_CDCA UpdateSpritePosition7
label Label_CE0E UpdateSpritePosition8
label Label_CE24 UpdateSpritePosition9
label Label_CE7C UpdateSpritePosition10
label Label_CED6 UpdateSpritePosition11
label Label_CF13 UpdateSpritePosition12
label Label_CF19 UpdateSpritePosition13_1
label Label_CF1C UpdateSpritePosition13_3
label Label_CF2B UpdateSpritePosition14
label Label_CF42 UpdateSpritePosition15
label Label_CF87 UpdateSpritePosition16
label Label_CFA8 UpdateSpritePosition17
label Label_CFC6 UpdateSpritePosition18
label Label_D008 UpdateSpritePosition19
label Label_D032 UpdateSpritePosition20
label Label_D041 UpdateSpritePosition21_1
label Label_D04C UpdateSpritePosition21_3
label Label_D086 UpdateSpritePosition22_1
label Label_D0B5 UpdateSpritePosition22_3
label Label_D0C0 UpdateSpritePosition23
label Label_D11F UpdateSpritePosition24
label Label_D169 UpdateSpritePosition25
label Label_D175 UpdateSpritePosition26
label Label_D19A UpdateSpritePosition27
label Label_D1A4 UpdateSpritePosition28
label Label_D1AA UpdateSpritePosition29
label Label_D1CF UpdateSpritePosition30
label Label_D208 UpdateSpritePosition31
label Label_D25D UpdateSpritePosition32
label Label_D275 UpdateSpritePosition33
label Label_D28B UpdateSpritePosition34
label Label_D2CB UpdateSpritePosition35
label Label_D2DF UpdateSpritePosition36
label Label_D2FD UpdateSpritePosition37
label Label_D323 UpdateSpritePosition38
label Label_D326 UpdateSpritePosition39
label Label_D32F UpdateSpritePosition40
label Label_D360 UpdateSpritePosition41
label Label_D36A UpdateSpritePosition42_1
label Label_D37B UpdateSpritePosition42_3
label Label_D37E UpdateSpritePosition43
label Label_D38E UpdateSpritePosition44
label Label_D3AA UpdateSpritePosition45
label Label_D3CC UpdateSpritePosition46
label Label_D4A1 UpdateSpritePosition47
label Label_D4B9 UpdateSpritePosition48
label Label_D4CF UpdateSpritePosition49
label Label_D4F0 UpdateSpritePosition50
label Label_D5C1 UpdateSpritePosition51
label Label_D5D1 UpdateSpritePosition52
label Label_D5F5 UpdateSpritePosition53
label Label_D6A8 UpdateSpritePosition54
label Label_D730 UpdateSpritePosition55
label Label_D739 UpdateSpritePosition56
label Label_DBB6 UpdateSpritePosition57
label Label_DBC8 UpdateSpritePosition58
label Label_DBE3 UpdateSpritePosition59
label Label_DBFA UpdateSpritePosition60
label Label_DC0D UpdateSpritePosition61
label Label_DC11 UpdateSpritePosition62
label Label_DC3E UpdateSpritePosition63
label Label_DCAA UpdateSpritePosition64
label Label_DCDD UpdateSpritePosition65
label Label_DCE3 UpdateSpritePosition66
label Label_DCEC UpdateSpritePosition67
label Label_DD32 UpdateSpritePosition68
label Label_DD5D UpdateSpritePosition69
label Label_DD75 UpdateSpritePosition70
label Label_DD78 UpdateSpritePosition71
label Label_DD8F UpdateSpritePosition72
label Label_DD92 UpdateSpritePosition73
label Label_DDA3 UpdateSpritePosition74
label Label_DDAC UpdateSpritePosition75
label Label_DDBE UpdateSpritePosition76
label Label_DDBE UpdateSpritePosition77
label Label_DDC7 UpdateSpritePosition78
label Label_DDF1 UpdateSpritePosition79
label Label_DE30 UpdateSpritePosition80
label Label_DE41 UpdateSpritePosition81
label Label_DE63 UpdateSpritePosition82
label Label_DE75 UpdateSpritePosition83
label Label_DE7E UpdateSpritePosition84
label Label_DE30 UpdateSoundEngine
label Label_E023 WaitVBlank_3
label Label_E025 WaitVBlank2
label Label_E02C WaitVBlank3
label Label_E035 WaitPPUReady
label Label_E046 WaitFrame
label Label_E049 InitPPU_3
label Label_E09B InitSprites
label Label_E0E3 DrawSprite
label Label_E0EF WritePPU
label Label_E0F6 WritePPU2
label Label_E0FD InitGame
label Label_E278 UpdateBallTrajectory
label Label_E28A InitSound_3
label Label_E293 InitSprites2
label Label_E2A6 UpdateBallPhysics
label Label_E3E2 UpdateGameMode
label Label_E403 CheckGameState_3
label Label_E40E UpdateDisplay
label Label_E459 UpdateDisplay2
label Label_E48C UpdateSprites3
label Label_E497 UpdateDisplay3
label Label_E4E2 UpdateDisplay4
label Label_E506 PlaySound
label Label_E535 PlaySoundEffect
label Label_E54A PlayMusic
label Label_E5B2 UpdateMusic
label Label_E609 UpdateMusicEngine
label Label_E68F UpdateMusicChannel
label Label_E7AC UpdateMusicChannel2
label Label_E94D UpdateSoundEffects
label Label_E96A UpdateSoundChannel2
label Label_E9ED UpdateSoundChannel3
label Label_EA2F UpdateSoundChannels
label Label_EA50 UpdateSoundEffect
label Label_EA58 UpdateSoundEffect2
label Label_EAD1 UpdateSoundChannel4
label Label_EAE5 UpdateSoundChannel5
label Label_EB0D UpdateSoundChannel6
label Label_EB27 UpdateSoundChannel7
label Label_EB9D UpdateSoundChannel8
label Label_EBF9 UpdateSoundChannel9
label Label_EC80 UpdateMusic2
label Label_EC8D UpdateMusicChannel10
label Label_ED06 UpdateMusicChannel11
label Label_EDB0 UpdateMusicChannel12
label Label_EDED UpdateMusicChannel13
label Label_EDF2 UpdateMusicChannel14
label Label_EE3D UpdateMusicChannel15
label Label_EE4D UpdateMusicChannel16
label Label_EF28 UpdateMusicChannel17
label Label_EF79 UpdateMusicChannel18
label Label_EFD3 UpdateMusicChannel19
label Label_EFDC UpdateMusicChannel20
label Label_F03F UpdateMusicChannel21
label Label_F06F UpdateMusicChannel22
label Label_F0C4 UpdateMusicChannel23
label Label_F0DF UpdateMusicChannel24_1
label Label_F0E7 UpdateMusicChannel24_3
label Label_F138 UpdateMusicChannel25
label Label_F140 UpdateMusicChannel26_1
label Label_F1FB UpdateMusicChannel26_3
label Label_F226 UpdateMusicChannel27
label Label_F2F0 UpdateMusicChannel28
label Label_F321 UpdateMusicChannel29
label Label_F3B9 UpdateMusicChannel30
label Label_F3E8 UpdateMusicChannel31
label Label_F41E UpdateMusicChannel32
label Label_F44B UpdateMusicChannel33
label Label_FB2C UpdateAPU
label Label_FB40 UpdateAPU2
label Label_FB43 UpdateAPU3
label Label_FB46 UpdateAPU4
label Label_FB49 UpdateAPU5
label Label_FB5D UpdateAPU6
label Label_FB6E UpdateAPU7
label Label_FBDD UpdateAPU8
label Label_FC0F UpdateAPU9
label Label_FC2B UpdateAPU10
label Label_FC72 UpdateAPU11
label Label_FCE2 UpdateAPU12
label Label_FD0D UpdateAPU13
label Label_FD55 UpdateAPU14
label Label_FD91 UpdateAPU15
label Label_FFDC UpdateAPU16
label Label_FFE3 UpdateAPU17
label Label_FFE9 UpdateAPU18
label Label_FFF0 UpdateAPU19
label Label_FFF7 ResetVector
zp Zp00 TempPtrLo
zp Zp01 TempPtrHi
zp Zp02 TempReg
zp Zp03 TempReg2
zp Zp04 TempReg3
zp Zp05 TempReg3
zp Zp06 TempReg4
zp Zp07 TempReg5
zp Zp08 TempReg6
zp Zp09 TempReg7
zp Zp0A TempReg8
zp Zp0B TempReg9
zp Zp0C TempReg10
zp Zp0D TempReg11
zp Zp0E TempReg12
zp Zp0F TempReg13
zp Zp10 PPUCtrlShadow
zp Zp11 PPUMaskShadow
zp Zp12 PPUScrollX
zp Zp13 PPUScrollY
zp Zp10 PPUCtrlShadow
zp Zp11 PPUMaskShadow
zp Zp12 PPUScrollX
zp Zp13 PPUScrollY
zp Zp14 TempReg14
zp Zp15 TempReg15
zp Zp16 TempReg16
zp Zp17 TempReg17
zp Zp18 TempReg18
zp Zp19 TempReg19
zp Zp1A TempReg20
zp Zp1B TempReg21
zp Zp1C TempReg22
zp Zp1D TempReg23
zp Zp1E TempReg24
zp Zp1F TempReg25
zp Zp20 TempReg26
zp Zp21 TempReg27
zp Zp22 TempReg28
zp Zp23 TempReg29
zp Zp24 TempReg30
zp Zp25 TempReg31
zp Zp26 TempReg32
zp Zp27 TempReg33
zp Zp28 TempReg34
zp Zp29 TempReg35
zp Zp2A TempReg36
zp Zp2B TempReg37
zp Zp2C TempReg38
zp Zp2D TempReg39
zp Zp2E TempReg40
zp Zp2F TempReg41
zp Zp2F TempReg42
zp Zp30 TempReg43
zp Zp31 TempReg44
zp Zp32 TempReg45
zp Zp33 TempReg46
zp Zp34 TempReg47
zp Zp35 TempReg48
zp Zp36 TempReg49
zp Zp37 TempReg50
zp Zp38 TempReg51
zp Zp39 TempReg52
zp Zp3A TempReg53
zp Zp3B TempReg54
zp Zp3C TempReg55
zp Zp3D TempReg56
zp Zp3E TempReg57
zp Zp3F TempReg58
zp Zp40 TempReg59
zp Zp41 TempReg60
zp Zp42 TempReg61
zp Zp43 TempReg62
zp Zp44 TempReg63
zp Zp45 TempReg64
zp Zp46 TempReg65
zp Zp47 TempReg66
zp Zp48 TempReg67
zp Zp49 TempReg68
zp Zp4A TempReg69
zp Zp4B TempReg70
zp Zp4C TempReg71
zp Zp4D TempReg72
zp Zp4E TempReg73
zp Zp4F TempReg74
zp Zp50 TempReg75
zp Zp51 TempReg76
zp Zp52 TempReg77
zp Zp53 TempReg78
zp Zp54 TempReg79
zp Zp55 TempReg80
zp Zp56 TempReg81
zp Zp57 TempReg82
zp Zp58 TempReg83
zp Zp59 TempReg84
zp Zp5A TempReg85
zp Zp5B TempReg86
zp Zp5C TempReg87
zp Zp5D TempReg88
zp Zp5E TempReg89
zp Zp5F TempReg90
zp Zp5F TempReg91
zp Zp60 TempReg92
zp Zp61 TempReg93
zp Zp62 TempReg94
zp Zp63 TempReg95
zp Zp64 TempReg96
zp Zp65 TempReg96
zp Zp66 TempReg97
zp Zp67 TempReg98
zp Zp68 TempReg99
zp Zp69 TempReg100
zp Zp6A TempReg101
zp Zp6B TempReg102
zp Zp6C TempReg103
zp Zp6D TempReg104
zp Zp6E TempReg105
zp Zp6F TempReg106
zp Zp70 TempReg107
zp Zp71 TempReg108
zp Zp72 TempReg109
zp Zp73 TempReg110
zp Zp74 TempReg111
zp Zp75 TempReg111
zp Zp76 TempReg112
zp Zp77 TempReg113
zp Zp78 TempReg114
zp Zp79 TempReg115
zp Zp7A TempReg116
zp Zp7B TempReg117
zp Zp7C TempReg118
zp Zp7D TempReg119
zp Zp7E TempReg120
zp Zp7F TempReg121
zp Zp80 TempReg122
zp Zp81 TempReg123
zp Zp82 TempReg124
zp Zp83 TempReg125
zp Zp84 TempReg126
zp Zp85 TempReg127
zp Zp86 TempReg128
zp Zp87 TempReg129
zp Zp88 TempReg130
zp Zp89 TempReg131
zp Zp8A TempReg132
zp Zp8B TempReg133
zp Zp8C TempReg134
zp Zp8D TempReg135
zp Zp8E TempReg136
zp Zp8F TempReg137
zp Zp90 TempReg138
zp Zp91 TempReg139
zp Zp92 TempReg140
zp Zp93 TempReg141
zp Zp94 TempReg141
zp Zp95 TempReg142
zp Zp96 TempReg143
zp Zp97 TempReg144
zp Zp98 TempReg145
zp Zp99 TempReg146
zp Zp9A TempReg147
zp Zp9B TempReg148
zp Zp9C TempReg149
zp Zp9D TempReg150
zp Zp9E TempReg151
zp Zp9F TempReg152
zp ZpA0 TempReg153
zp ZpA1 TempReg154
zp ZpA2 TempReg155
zp ZpA3 TempReg156
zp ZpA4 TempReg157
zp ZpA5 TempReg158
zp ZpA6 TempReg159
zp ZpA7 TempReg160
zp ZpA8 TempReg161
zp ZpA9 TempReg162
zp ZpAA TempReg163
zp ZpAB TempReg164
zp ZpAC TempReg165
zp ZpAD TempReg166
zp ZpAE TempReg167
zp ZpAF TempReg168
zp ZpB0 TempReg169
zp ZpB1 TempReg170
zp ZpB2 TempReg171
zp ZpB3 TempReg172
zp ZpB4 TempReg173
zp ZpB5 TempReg174
zp ZpB6 TempReg175
zp ZpB7 TempReg176
zp ZpB8 TempReg177
zp ZpB9 TempReg177
zp ZpBA TempReg178
zp ZpBB TempReg179
zp ZpBC TempReg180
zp ZpBD TempReg181
zp ZpBE TempReg182
zp ZpBF TempReg183
zp ZpC0 TempReg184
zp ZpC1 TempReg185
zp ZpC2 TempReg186
zp ZpC3 TempReg187
zp ZpC4 TempReg188
zp ZpC5 TempReg189
zp ZpC6 TempReg190
zp ZpC7 TempReg191
zp ZpC8 TempReg192
zp ZpC9 TempReg193
zp ZpCA TempReg194
zp ZpCB TempReg195
zp ZpCC TempReg196
zp ZpCD TempReg197
zp ZpCE TempReg198
zp ZpCF TempReg199
zp ZpD0 TempReg185
zp ZpD1 TempReg186
zp ZpD2 TempReg187
zp ZpD3 TempReg188
zp ZpD4 TempReg189
zp ZpD5 TempReg190
zp ZpD6 TempReg191
zp ZpD7 TempReg192
zp ZpD8 TempReg193
zp ZpD9 TempReg194
zp ZpDA TempReg195
zp ZpDB TempReg196
zp ZpDC TempReg197
zp ZpDD TempReg198
zp ZpDE TempReg199
zp ZpDF TempReg200
zp ZpE0 TempReg201
zp ZpE1 TempReg202
zp ZpE2 TempReg203
zp ZpE3 TempReg204
zp ZpE4 TempReg205
zp ZpE5 TempReg206
zp ZpE6 TempReg207
zp ZpE7 TempReg208
zp ZpE8 TempReg209
zp ZpE9 TempReg210
zp ZpEA TempReg211
zp ZpEB TempReg212
zp ZpEC TempReg213
zp ZpED TempReg214
zp ZpEE TempReg215
zp ZpEF TempReg216
zp ZpF0 TempReg217
zp ZpF1 TempReg218
zp ZpF2 TempReg219
zp ZpF3 TempReg220
zp ZpF4 TempReg221
zp ZpF5 TempReg222
zp ZpF6 TempReg223
zp ZpF7 TempReg224
zp ZpF8 TempReg225
zp ZpF9 TempReg226
zp ZpFA TempReg227
zp ZpFB TempReg228
zp ZpFC TempReg229
zp ZpFD TempReg230
zp ZpFE TempReg231
zp ZpFF TempReg232
1 label Label_C79E Reset
2 label Label_C7E1 MainGameLoop
3 label Label_C7E7 InitPPU_1
4 label Label_C7E1 GameLoopEntry
5 label Label_C7E7 InitPPURegisters
6 label Label_C85F NmiHandler
7 label Label_C8C1 NmiFrameUpdate
8 label Label_C8CB NmiFrameUpdate2
9 label Label_C8D4 NmiFrameUpdate3
10 label Label_C8D7 NmiFrameUpdate4
11 label Label_C8E8 NmiFrameEnd
12 label Label_C8F3 InitAPURegisters
13 label Label_C8F3 InitAPU
14 label Label_C8FE InitSound_1
15 label Label_C914 InitLevel
16 label Label_C940 UpdateGameState
17 label Label_C95D UpdateGameState2
18 label Label_C98A UpdateGameState3
19 label Label_CA30 UpdateSprites
20 label Label_CA53 UpdateSprites2
21 label Label_CA56 CallCBAE
22 label Label_CA5C CallCBB7
23 label Label_CAA9 CopyToOAM
24 label Label_CAB9 CopyFromOAM
25 label Label_CAC9 UpdateSpriteData
26 label Label_CB1B HandleController
27 label Label_CBAE ClearZeropage
28 label Label_CBB7 WaitVBlank_1
29 label Label_CBBD UpdateScroll
30 label Label_CBCA UpdateScroll2
31 label Label_CBF4 UpdateScroll3
32 label Label_CBF5 UpdateOAM
33 label Label_CBF7 UpdateOAM2
34 label Label_CC03 UpdateOAM3
35 label Label_CC04 UpdateScroll4
36 label Label_CC23 UpdateScroll5
37 label Label_CC34 UpdateScroll6
38 label Label_CC47 InitScroll
39 label Label_CCC1 UpdateScroll7
40 label Label_CCD6 UpdateScroll8
41 label Label_CCF4 CheckGameState_1
42 label Label_CD22 UpdateGameTimer
43 label Label_CD6F UpdateSpritePosition
44 label Label_CD76 UpdateSpritePosition2
45 label Label_CD7F UpdateSpritePosition3
46 label Label_CD89 UpdateSpritePosition4
47 label Label_CD9D UpdateSpritePosition5
48 label Label_CDB1 UpdateSpritePosition6
49 label Label_CDCA UpdateSpritePosition7
50 label Label_CE0E UpdateSpritePosition8
51 label Label_CE24 UpdateSpritePosition9
52 label Label_CE7C UpdateSpritePosition10
53 label Label_CED6 UpdateSpritePosition11
54 label Label_CF13 UpdateSpritePosition12
55 label Label_CF19 UpdateSpritePosition13_1
56 label Label_CF1C UpdateSpritePosition13_3
57 label Label_CF2B UpdateSpritePosition14
58 label Label_CF42 UpdateSpritePosition15
59 label Label_CF87 UpdateSpritePosition16
60 label Label_CFA8 UpdateSpritePosition17
61 label Label_CFC6 UpdateSpritePosition18
62 label Label_D008 UpdateSpritePosition19
63 label Label_D032 UpdateSpritePosition20
64 label Label_D041 UpdateSpritePosition21_1
65 label Label_D04C UpdateSpritePosition21_3
66 label Label_D086 UpdateSpritePosition22_1
67 label Label_D0B5 UpdateSpritePosition22_3
68 label Label_D0C0 UpdateSpritePosition23
69 label Label_D11F UpdateSpritePosition24
70 label Label_D169 UpdateSpritePosition25
71 label Label_D175 UpdateSpritePosition26
72 label Label_D19A UpdateSpritePosition27
73 label Label_D1A4 UpdateSpritePosition28
74 label Label_D1AA UpdateSpritePosition29
75 label Label_D1CF UpdateSpritePosition30
76 label Label_D208 UpdateSpritePosition31
77 label Label_D25D UpdateSpritePosition32
78 label Label_D275 UpdateSpritePosition33
79 label Label_D28B UpdateSpritePosition34
80 label Label_D2CB UpdateSpritePosition35
81 label Label_D2DF UpdateSpritePosition36
82 label Label_D2FD UpdateSpritePosition37
83 label Label_D323 UpdateSpritePosition38
84 label Label_D326 UpdateSpritePosition39
85 label Label_D32F UpdateSpritePosition40
86 label Label_D360 UpdateSpritePosition41
87 label Label_D36A UpdateSpritePosition42_1
88 label Label_D37B UpdateSpritePosition42_3
89 label Label_D37E UpdateSpritePosition43
90 label Label_D38E UpdateSpritePosition44
91 label Label_D3AA UpdateSpritePosition45
92 label Label_D3CC UpdateSpritePosition46
93 label Label_D4A1 UpdateSpritePosition47
94 label Label_D4B9 UpdateSpritePosition48
95 label Label_D4CF UpdateSpritePosition49
96 label Label_D4F0 UpdateSpritePosition50
97 label Label_D5C1 UpdateSpritePosition51
98 label Label_D5D1 UpdateSpritePosition52
99 label Label_D5F5 UpdateSpritePosition53
100 label Label_D6A8 UpdateSpritePosition54
101 label Label_D730 UpdateSpritePosition55
102 label Label_D739 UpdateSpritePosition56
103 label Label_DBB6 UpdateSpritePosition57
104 label Label_DBC8 UpdateSpritePosition58
105 label Label_DBE3 UpdateSpritePosition59
106 label Label_DBFA UpdateSpritePosition60
107 label Label_DC0D UpdateSpritePosition61
108 label Label_DC11 UpdateSpritePosition62
109 label Label_DC3E UpdateSpritePosition63
110 label Label_DCAA UpdateSpritePosition64
111 label Label_DCDD UpdateSpritePosition65
112 label Label_DCE3 UpdateSpritePosition66
113 label Label_DCEC UpdateSpritePosition67
114 label Label_DD32 UpdateSpritePosition68
115 label Label_DD5D UpdateSpritePosition69
116 label Label_DD75 UpdateSpritePosition70
117 label Label_DD78 UpdateSpritePosition71
118 label Label_DD8F UpdateSpritePosition72
119 label Label_DD92 UpdateSpritePosition73
120 label Label_DDA3 UpdateSpritePosition74
121 label Label_DDAC UpdateSpritePosition75
122 label Label_DDBE UpdateSpritePosition76
123 label Label_DDBE UpdateSpritePosition77
124 label Label_DDC7 UpdateSpritePosition78
125 label Label_DDF1 UpdateSpritePosition79
126 label Label_DE30 UpdateSpritePosition80
127 label Label_DE41 UpdateSpritePosition81
128 label Label_DE63 UpdateSpritePosition82
129 label Label_DE75 UpdateSpritePosition83
130 label Label_DE7E UpdateSpritePosition84
131 label Label_DE30 UpdateSoundEngine
132 label Label_E023 WaitVBlank_3
133 label Label_E025 WaitVBlank2
134 label Label_E02C WaitVBlank3
135 label Label_E035 WaitPPUReady
136 label Label_E046 WaitFrame
137 label Label_E049 InitPPU_3
138 label Label_E09B InitSprites
139 label Label_E0E3 DrawSprite
140 label Label_E0EF WritePPU
141 label Label_E0F6 WritePPU2
142 label Label_E0FD InitGame
143 label Label_E278 UpdateBallTrajectory
144 label Label_E28A InitSound_3
145 label Label_E293 InitSprites2
146 label Label_E2A6 UpdateBallPhysics
147 label Label_E3E2 UpdateGameMode
148 label Label_E403 CheckGameState_3
149 label Label_E40E UpdateDisplay
150 label Label_E459 UpdateDisplay2
151 label Label_E48C UpdateSprites3
152 label Label_E497 UpdateDisplay3
153 label Label_E4E2 UpdateDisplay4
154 label Label_E506 PlaySound
155 label Label_E535 PlaySoundEffect
156 label Label_E54A PlayMusic
157 label Label_E5B2 UpdateMusic
158 label Label_E609 UpdateMusicEngine
159 label Label_E68F UpdateMusicChannel
160 label Label_E7AC UpdateMusicChannel2
161 label Label_E94D UpdateSoundEffects
162 label Label_E96A UpdateSoundChannel2
163 label Label_E9ED UpdateSoundChannel3
164 label Label_EA2F UpdateSoundChannels
165 label Label_EA50 UpdateSoundEffect
166 label Label_EA58 UpdateSoundEffect2
167 label Label_EAD1 UpdateSoundChannel4
168 label Label_EAE5 UpdateSoundChannel5
169 label Label_EB0D UpdateSoundChannel6
170 label Label_EB27 UpdateSoundChannel7
171 label Label_EB9D UpdateSoundChannel8
172 label Label_EBF9 UpdateSoundChannel9
173 label Label_EC80 UpdateMusic2
174 label Label_EC8D UpdateMusicChannel10
175 label Label_ED06 UpdateMusicChannel11
176 label Label_EDB0 UpdateMusicChannel12
177 label Label_EDED UpdateMusicChannel13
178 label Label_EDF2 UpdateMusicChannel14
179 label Label_EE3D UpdateMusicChannel15
180 label Label_EE4D UpdateMusicChannel16
181 label Label_EF28 UpdateMusicChannel17
182 label Label_EF79 UpdateMusicChannel18
183 label Label_EFD3 UpdateMusicChannel19
184 label Label_EFDC UpdateMusicChannel20
185 label Label_F03F UpdateMusicChannel21
186 label Label_F06F UpdateMusicChannel22
187 label Label_F0C4 UpdateMusicChannel23
188 label Label_F0DF UpdateMusicChannel24_1
189 label Label_F0E7 UpdateMusicChannel24_3
190 label Label_F138 UpdateMusicChannel25
191 label Label_F140 UpdateMusicChannel26_1
192 label Label_F1FB UpdateMusicChannel26_3
193 label Label_F226 UpdateMusicChannel27
194 label Label_F2F0 UpdateMusicChannel28
195 label Label_F321 UpdateMusicChannel29
196 label Label_F3B9 UpdateMusicChannel30
197 label Label_F3E8 UpdateMusicChannel31
198 label Label_F41E UpdateMusicChannel32
199 label Label_F44B UpdateMusicChannel33
200 label Label_FB2C UpdateAPU
201 label Label_FB40 UpdateAPU2
202 label Label_FB43 UpdateAPU3
203 label Label_FB46 UpdateAPU4
204 label Label_FB49 UpdateAPU5
205 label Label_FB5D UpdateAPU6
206 label Label_FB6E UpdateAPU7
207 label Label_FBDD UpdateAPU8
208 label Label_FC0F UpdateAPU9
209 label Label_FC2B UpdateAPU10
210 label Label_FC72 UpdateAPU11
211 label Label_FCE2 UpdateAPU12
212 label Label_FD0D UpdateAPU13
213 label Label_FD55 UpdateAPU14
214 label Label_FD91 UpdateAPU15
215 label Label_FFDC UpdateAPU16
216 label Label_FFE3 UpdateAPU17
217 label Label_FFE9 UpdateAPU18
218 label Label_FFF0 UpdateAPU19
219 label Label_FFF7 ResetVector
220 zp Zp00 TempPtrLo
221 zp Zp01 TempPtrHi
222 zp Zp02 TempReg
223 zp Zp03 TempReg2
224 zp Zp04 TempReg3
225 zp Zp05 TempReg3
226 zp Zp06 TempReg4
227 zp Zp07 TempReg5
228 zp Zp08 TempReg6
229 zp Zp09 TempReg7
230 zp Zp0A TempReg8
231 zp Zp0B TempReg9
232 zp Zp0C TempReg10
233 zp Zp0D TempReg11
234 zp Zp0E TempReg12
235 zp Zp0F TempReg13
236 zp Zp10 PPUCtrlShadow
237 zp Zp11 PPUMaskShadow
238 zp Zp12 PPUScrollX
239 zp Zp13 PPUScrollY
240 zp Zp10 PPUCtrlShadow
241 zp Zp11 PPUMaskShadow
242 zp Zp12 PPUScrollX
243 zp Zp13 PPUScrollY
244 zp Zp14 TempReg14
245 zp Zp15 TempReg15
246 zp Zp16 TempReg16
247 zp Zp17 TempReg17
248 zp Zp18 TempReg18
249 zp Zp19 TempReg19
250 zp Zp1A TempReg20
251 zp Zp1B TempReg21
252 zp Zp1C TempReg22
253 zp Zp1D TempReg23
254 zp Zp1E TempReg24
255 zp Zp1F TempReg25
256 zp Zp20 TempReg26
257 zp Zp21 TempReg27
258 zp Zp22 TempReg28
259 zp Zp23 TempReg29
260 zp Zp24 TempReg30
261 zp Zp25 TempReg31
262 zp Zp26 TempReg32
263 zp Zp27 TempReg33
264 zp Zp28 TempReg34
265 zp Zp29 TempReg35
266 zp Zp2A TempReg36
267 zp Zp2B TempReg37
268 zp Zp2C TempReg38
269 zp Zp2D TempReg39
270 zp Zp2E TempReg40
271 zp Zp2F TempReg41
272 zp Zp2F TempReg42
273 zp Zp30 TempReg43
274 zp Zp31 TempReg44
275 zp Zp32 TempReg45
276 zp Zp33 TempReg46
277 zp Zp34 TempReg47
278 zp Zp35 TempReg48
279 zp Zp36 TempReg49
280 zp Zp37 TempReg50
281 zp Zp38 TempReg51
282 zp Zp39 TempReg52
283 zp Zp3A TempReg53
284 zp Zp3B TempReg54
285 zp Zp3C TempReg55
286 zp Zp3D TempReg56
287 zp Zp3E TempReg57
288 zp Zp3F TempReg58
289 zp Zp40 TempReg59
290 zp Zp41 TempReg60
291 zp Zp42 TempReg61
292 zp Zp43 TempReg62
293 zp Zp44 TempReg63
294 zp Zp45 TempReg64
295 zp Zp46 TempReg65
296 zp Zp47 TempReg66
297 zp Zp48 TempReg67
298 zp Zp49 TempReg68
299 zp Zp4A TempReg69
300 zp Zp4B TempReg70
301 zp Zp4C TempReg71
302 zp Zp4D TempReg72
303 zp Zp4E TempReg73
304 zp Zp4F TempReg74
305 zp Zp50 TempReg75
306 zp Zp51 TempReg76
307 zp Zp52 TempReg77
308 zp Zp53 TempReg78
309 zp Zp54 TempReg79
310 zp Zp55 TempReg80
311 zp Zp56 TempReg81
312 zp Zp57 TempReg82
313 zp Zp58 TempReg83
314 zp Zp59 TempReg84
315 zp Zp5A TempReg85
316 zp Zp5B TempReg86
317 zp Zp5C TempReg87
318 zp Zp5D TempReg88
319 zp Zp5E TempReg89
320 zp Zp5F TempReg90
321 zp Zp5F TempReg91
322 zp Zp60 TempReg92
323 zp Zp61 TempReg93
324 zp Zp62 TempReg94
325 zp Zp63 TempReg95
326 zp Zp64 TempReg96
327 zp Zp65 TempReg96
328 zp Zp66 TempReg97
329 zp Zp67 TempReg98
330 zp Zp68 TempReg99
331 zp Zp69 TempReg100
332 zp Zp6A TempReg101
333 zp Zp6B TempReg102
334 zp Zp6C TempReg103
335 zp Zp6D TempReg104
336 zp Zp6E TempReg105
337 zp Zp6F TempReg106
338 zp Zp70 TempReg107
339 zp Zp71 TempReg108
340 zp Zp72 TempReg109
341 zp Zp73 TempReg110
342 zp Zp74 TempReg111
343 zp Zp75 TempReg111
344 zp Zp76 TempReg112
345 zp Zp77 TempReg113
346 zp Zp78 TempReg114
347 zp Zp79 TempReg115
348 zp Zp7A TempReg116
349 zp Zp7B TempReg117
350 zp Zp7C TempReg118
351 zp Zp7D TempReg119
352 zp Zp7E TempReg120
353 zp Zp7F TempReg121
354 zp Zp80 TempReg122
355 zp Zp81 TempReg123
356 zp Zp82 TempReg124
357 zp Zp83 TempReg125
358 zp Zp84 TempReg126
359 zp Zp85 TempReg127
360 zp Zp86 TempReg128
361 zp Zp87 TempReg129
362 zp Zp88 TempReg130
363 zp Zp89 TempReg131
364 zp Zp8A TempReg132
365 zp Zp8B TempReg133
366 zp Zp8C TempReg134
367 zp Zp8D TempReg135
368 zp Zp8E TempReg136
369 zp Zp8F TempReg137
370 zp Zp90 TempReg138
371 zp Zp91 TempReg139
372 zp Zp92 TempReg140
373 zp Zp93 TempReg141
374 zp Zp94 TempReg141
375 zp Zp95 TempReg142
376 zp Zp96 TempReg143
377 zp Zp97 TempReg144
378 zp Zp98 TempReg145
379 zp Zp99 TempReg146
380 zp Zp9A TempReg147
381 zp Zp9B TempReg148
382 zp Zp9C TempReg149
383 zp Zp9D TempReg150
384 zp Zp9E TempReg151
385 zp Zp9F TempReg152
386 zp ZpA0 TempReg153
387 zp ZpA1 TempReg154
388 zp ZpA2 TempReg155
389 zp ZpA3 TempReg156
390 zp ZpA4 TempReg157
391 zp ZpA5 TempReg158
392 zp ZpA6 TempReg159
393 zp ZpA7 TempReg160
394 zp ZpA8 TempReg161
395 zp ZpA9 TempReg162
396 zp ZpAA TempReg163
397 zp ZpAB TempReg164
398 zp ZpAC TempReg165
399 zp ZpAD TempReg166
400 zp ZpAE TempReg167
401 zp ZpAF TempReg168
402 zp ZpB0 TempReg169
403 zp ZpB1 TempReg170
404 zp ZpB2 TempReg171
405 zp ZpB3 TempReg172
406 zp ZpB4 TempReg173
407 zp ZpB5 TempReg174
408 zp ZpB6 TempReg175
409 zp ZpB7 TempReg176
410 zp ZpB8 TempReg177
411 zp ZpB9 TempReg177
412 zp ZpBA TempReg178
413 zp ZpBB TempReg179
414 zp ZpBC TempReg180
415 zp ZpBD TempReg181
416 zp ZpBE TempReg182
417 zp ZpBF TempReg183
418 zp ZpC0 TempReg184
419 zp ZpC1 TempReg185
420 zp ZpC2 TempReg186
421 zp ZpC3 TempReg187
422 zp ZpC4 TempReg188
423 zp ZpC5 TempReg189
424 zp ZpC6 TempReg190
425 zp ZpC7 TempReg191
426 zp ZpC8 TempReg192
427 zp ZpC9 TempReg193
428 zp ZpCA TempReg194
429 zp ZpCB TempReg195
430 zp ZpCC TempReg196
431 zp ZpCD TempReg197
432 zp ZpCE TempReg198
433 zp ZpCF TempReg199
434 zp ZpD0 TempReg185
435 zp ZpD1 TempReg186
436 zp ZpD2 TempReg187
437 zp ZpD3 TempReg188
438 zp ZpD4 TempReg189
439 zp ZpD5 TempReg190
440 zp ZpD6 TempReg191
441 zp ZpD7 TempReg192
442 zp ZpD8 TempReg193
443 zp ZpD9 TempReg194
444 zp ZpDA TempReg195
445 zp ZpDB TempReg196
446 zp ZpDC TempReg197
447 zp ZpDD TempReg198
448 zp ZpDE TempReg199
449 zp ZpDF TempReg200
450 zp ZpE0 TempReg201
451 zp ZpE1 TempReg202
452 zp ZpE2 TempReg203
453 zp ZpE3 TempReg204
454 zp ZpE4 TempReg205
455 zp ZpE5 TempReg206
456 zp ZpE6 TempReg207
457 zp ZpE7 TempReg208
458 zp ZpE8 TempReg209
459 zp ZpE9 TempReg210
460 zp ZpEA TempReg211
461 zp ZpEB TempReg212
462 zp ZpEC TempReg213
463 zp ZpED TempReg214
464 zp ZpEE TempReg215
465 zp ZpEF TempReg216
466 zp ZpF0 TempReg217
467 zp ZpF1 TempReg218
468 zp ZpF2 TempReg219
469 zp ZpF3 TempReg220
470 zp ZpF4 TempReg221
471 zp ZpF5 TempReg222
472 zp ZpF6 TempReg223
473 zp ZpF7 TempReg224
474 zp ZpF8 TempReg225
475 zp ZpF9 TempReg226
476 zp ZpFA TempReg227
477 zp ZpFB TempReg228
478 zp ZpFC TempReg229
479 zp ZpFD TempReg230
480 zp ZpFE TempReg231
481 zp ZpFF TempReg232
Binary file not shown.
+2
View File
@@ -0,0 +1,2 @@
.segment "HEADER"
.incbin "header.bin"
+10
View File
@@ -0,0 +1,10 @@
MEMORY {
HEADER: start = $0000, size = $0010, fill = yes;
PRG: start = $C000, size = $4000, fill = yes;
CHR: start = $0000, size = $2000, fill = yes;
}
SEGMENTS {
HEADER: load = HEADER, type = ro;
PRG: load = PRG, type = ro;
CHR: load = CHR, type = ro;
}
+151
View File
@@ -0,0 +1,151 @@
; Donkey Kong (JU) application-specific RAM aliases - Pass 1
; Generated from every direct zero-page operand in reachable code:
; ref counts are reads/writes, `where` lists the referencing addresses.
; ZpXX names indicate storage with a role not yet unique enough for a behavioral name;
; Pass 2 replaces them with names derived from observed usage.
Zp00 = $00 ; 156 refs; reads=75 writes=81; used at $C7B5, C7B9, C80B, C827, +137 more
Zp01 = $01 ; 164 refs; reads=75 writes=89; used at $C7B1, C7BE, C810, C82C, +132 more
Zp02 = $02 ; 63 refs; reads=17 writes=46; used at $C819, C84B, CD92, CDCC, +57 more
Zp03 = $03 ; 36 refs; reads=8 writes=28; used at $C81E, C850, CD96, CDD0, +32 more
Zp04 = $04 ; 58 refs; reads=16 writes=42; used at $C835, CBB0, D2A3, D300, +54 more
Zp05 = $05 ; 20 refs; reads=6 writes=14; used at $C83A, CFD4, D01B, D028, +15 more
Zp06 = $06 ; 28 refs; reads=13 writes=15; used at $C83F, CFDF, D01E, D025, +23 more
Zp07 = $07 ; 29 refs; reads=17 writes=12; used at $C844, D2B2, D30F, D529, +23 more
Zp08 = $08 ; 16 refs; reads=7 writes=9; used at $C857, D52E, D542, D544, +12 more
Zp09 = $09 ; 18 refs; reads=8 writes=10; used at $C85C, CCCB, CCD6, CCE6, +14 more
Zp0A = $0A ; 30 refs; reads=10 writes=20; used at $CCD0, D1E7, D39E, D447, +26 more
Zp0B = $0B ; 24 refs; reads=8 writes=16; used at $D44B, D8AF, D9E8, DA0D, +19 more
Zp0C = $0C ; 23 refs; reads=10 writes=13; used at $D2F8, D314, D321, D323, +19 more
Zp0F = $0F ; 11 refs; reads=6 writes=5; used at $CF6C, CF81, CFC8, CFF2, +6 more
Zp10 = $10 ; 10 refs; reads=5 writes=5; used at $C7D8, C7DF, C7EC, C860, +6 more
Zp11 = $11 ; 8 refs; reads=4 writes=4; used at $C7F3, C889, CF70, CF74, +4 more
Zp12 = $12 ; 2 refs; reads=1 writes=1; used at $C7FA, F231
Zp13 = $13 ; 2 refs; reads=1 writes=1; used at $C7FF, F236
Zp14 = $14 ; 2 refs; reads=1 writes=1; used at $F539, F53D
Zp15 = $15 ; 13 refs; reads=11 writes=2; used at $C940, C946, CE8B, CF42, +9 more
Zp18 = $18 ; 6 refs; reads=3 writes=3; used at $C9C3, CC77, F4ED, F4FD, +1 more
Zp19 = $19 ; 10 refs; reads=8 writes=2; used at $C9C7, DB7B, DCB3, E278, +5 more
Zp1A = $1A ; 2 refs; reads=1 writes=1; used at $F501
Zp1B = $1B ; 2 refs; reads=1 writes=1; used at $F503
Zp1C = $1C ; 2 refs; reads=1 writes=1; used at $F505
Zp1D = $1D ; 2 refs; reads=1 writes=1; used at $F507
Zp1E = $1E ; 2 refs; reads=1 writes=1; used at $F509
Zp1F = $1F ; 2 refs; reads=1 writes=1; used at $F50B
Zp20 = $20 ; 1 refs; reads=0 writes=1; used at $F485
Zp21 = $21 ; 3 refs; reads=1 writes=2; used at $C9BA, CA6C, F489
Zp22 = $22 ; 3 refs; reads=1 writes=2; used at $C9BF, CA71, F48D
Zp23 = $23 ; 1 refs; reads=0 writes=1; used at $F491
Zp24 = $24 ; 8 refs; reads=6 writes=2; used at $C991, F367, F38E, F3C2, +4 more
Zp25 = $25 ; 10 refs; reads=7 writes=3; used at $CC15, F382, F38B, F3A9, +6 more
Zp26 = $26 ; 9 refs; reads=6 writes=3; used at $F377, F380, F39E, F3A7, +5 more
Zp27 = $27 ; 9 refs; reads=6 writes=3; used at $F36C, F375, F393, F39C, +5 more
Zp2C = $2C ; 1 refs; reads=0 writes=1; used at $CB92
Zp2E = $2E ; 4 refs; reads=3 writes=1; used at $CB9E, CC24, D041, EBBB
Zp34 = $34 ; 5 refs; reads=1 writes=4; used at $CC7B, CD00, F4AE, F4B4
Zp35 = $35 ; 5 refs; reads=3 writes=2; used at $C968, C985, F4B8, F4BC
Zp36 = $36 ; 7 refs; reads=3 writes=4; used at $CC9B, CCA8, DA27, DA3B, +3 more
Zp37 = $37 ; 2 refs; reads=1 writes=1; used at $DA33, DAAE
Zp38 = $38 ; 2 refs; reads=1 writes=1; used at $E1BF, E1E2
Zp39 = $39 ; 3 refs; reads=1 writes=2; used at $CC84, EA5F, EA9E
Zp3A = $3A ; 7 refs; reads=3 writes=4; used at $D090, D092, D0DF, D0E4, +3 more
Zp3B = $3B ; 2 refs; reads=1 writes=1; used at $E23D, E24D
Zp3F = $3F ; 2 refs; reads=1 writes=1; used at $D637, D6C6
Zp40 = $40 ; 5 refs; reads=2 writes=3; used at $E200, E20E, E213, E21D, +1 more
Zp41 = $41 ; 2 refs; reads=1 writes=1; used at $CFAC, CFF6
Zp43 = $43 ; 50 refs; reads=24 writes=26; used at $C8AF, C8BC, CA17, CA2B, +31 more
Zp44 = $44 ; 13 refs; reads=4 writes=9; used at $C93D, C951, C95F, CC88, +8 more
Zp45 = $45 ; 3 refs; reads=1 writes=2; used at $CBA2, EBB6, EBC6
Zp46 = $46 ; 3 refs; reads=2 writes=1; used at $F004, F02F, F048
Zp47 = $47 ; 3 refs; reads=2 writes=1; used at $F009, F036, F042
Zp48 = $48 ; 2 refs; reads=1 writes=1; used at $F00E, F04C
Zp49 = $49 ; 2 refs; reads=1 writes=1; used at $F013, F03A
Zp4A = $4A ; 3 refs; reads=2 writes=1; used at $F01B, F02C, F04E
Zp4B = $4B ; 4 refs; reads=3 writes=1; used at $D5D3, F020, F033, F03C
Zp4C = $4C ; 2 refs; reads=1 writes=1; used at $F025, F046
Zp4D = $4D ; 2 refs; reads=1 writes=1; used at $F02A, F040
Zp4E = $4E ; 7 refs; reads=1 writes=6; used at $C7D0, C893, C9CB, CA80, +3 more
Zp4F = $4F ; 8 refs; reads=1 writes=7; used at $C7D6, C897, C8B8, C9D3, +4 more
Zp50 = $50 ; 5 refs; reads=4 writes=1; used at $C9A0, C9B1, CA66, E436, +1 more
Zp51 = $51 ; 8 refs; reads=5 writes=3; used at $C7CC, C8DE, C9A8, C9AF, +4 more
Zp52 = $52 ; 16 refs; reads=12 writes=4; used at $C9F4, CA79, CA88, CAA4, +12 more
Zp53 = $53 ; 62 refs; reads=58 writes=4; used at $C9E0, CACC, CB04, CB49, +56 more
Zp54 = $54 ; 6 refs; reads=4 writes=2; used at $C9EA, CB8A, D0AE, E43B, +1 more
Zp55 = $55 ; 12 refs; reads=5 writes=7; used at $C7D2, C8C1, CA06, CA4A, +6 more
Zp56 = $56 ; 15 refs; reads=12 writes=3; used at $D17D, D185, D1CF, D1F9, +11 more
Zp57 = $57 ; 8 refs; reads=5 writes=3; used at $D187, D56E, D600, D6A5, +4 more
Zp58 = $58 ; 18 refs; reads=13 writes=5; used at $C931, C957, CA00, CA11, +14 more
Zp59 = $59 ; 16 refs; reads=9 writes=7; used at $CC4A, CC56, D05E, D213, +12 more
Zp5A = $5A ; 12 refs; reads=4 writes=8; used at $D056, D20B, D38E, D3DD, +8 more
Zp5B = $5B ; 8 refs; reads=2 writes=6; used at $D2C6, D3BB, D3D2, D408, +4 more
Zp5C = $5C ; 8 refs; reads=2 writes=6; used at $D2C8, D3DF, D3E7, D3FB, +4 more
Zp5D = $5D ; 64 refs; reads=57 writes=7; used at $DA1B, DA2D, DA40, DA45, +59 more
Zp5E = $5E ; 23 refs; reads=6 writes=17; used at $DA2F, DA4E, DAB6, DACB, +19 more
Zp68 = $68 ; 21 refs; reads=14 writes=7; used at $DB81, DBA9, DBBB, DBE0, +15 more
Zp72 = $72 ; 12 refs; reads=7 writes=5; used at $DB29, DB64, DC06, DC1B, +8 more
Zp7D = $7D ; 2 refs; reads=1 writes=1; used at $DB55, E050
Zp7E = $7E ; 10 refs; reads=7 writes=3; used at $DB85, DCC2, DF57, DF74, +4 more
Zp85 = $85 ; 4 refs; reads=1 writes=3; used at $D252, D268, D273, D4EB
Zp86 = $86 ; 9 refs; reads=4 writes=5; used at $CCE4, CCEB, D8B3, D8CE, +4 more
Zp88 = $88 ; 4 refs; reads=2 writes=2; used at $D9EA, D9EC, D9F7
Zp8A = $8A ; 6 refs; reads=2 writes=4; used at $DABA, DDD1, DFEA, DFEC, +1 more
Zp94 = $94 ; 9 refs; reads=4 writes=5; used at $D551, D5BB, D5E8, D60A, +4 more
Zp95 = $95 ; 6 refs; reads=2 writes=4; used at $D5C4, D5CA, D5EC, D615, +2 more
Zp96 = $96 ; 33 refs; reads=16 writes=17; used at $CC58, CEB8, D189, D197, +29 more
Zp97 = $97 ; 7 refs; reads=2 writes=5; used at $CC6A, D246, D250, D25D, +3 more
Zp98 = $98 ; 9 refs; reads=6 writes=3; used at $D0CB, D0D1, D0E1, D108, +3 more
Zp99 = $99 ; 9 refs; reads=8 writes=1; used at $E29C, E37C, E39B, E3C0, +5 more
Zp9A = $9A ; 6 refs; reads=3 writes=3; used at $C89B, CD1D, CEA8, D04C, +2 more
Zp9B = $9B ; 3 refs; reads=1 writes=2; used at $D233, D239, D244
Zp9C = $9C ; 3 refs; reads=2 writes=1; used at $EC6F, EC76, F031
Zp9D = $9D ; 2 refs; reads=1 writes=1; used at $EC80, F038
Zp9E = $9E ; 7 refs; reads=3 writes=4; used at $D58C, D595, D59C, D5A1, +3 more
Zp9F = $9F ; 12 refs; reads=6 writes=6; used at $CC63, D633, D6F6, D705, +7 more
ZpA0 = $A0 ; 10 refs; reads=6 writes=4; used at $D62D, D7AD, D7C3, D7E8, +6 more
ZpA1 = $A1 ; 3 refs; reads=2 writes=1; used at $D2BE, D40D, D4B1
ZpA2 = $A2 ; 4 refs; reads=1 writes=3; used at $CC73, D6E8, D6EB, D6F4
ZpA3 = $A3 ; 2 refs; reads=1 writes=1; used at $DC5E, E10B
ZpAD = $AD ; 6 refs; reads=3 writes=3; used at $DABC, DBDA, E19A, E1BA, +2 more
ZpAE = $AE ; 70 refs; reads=64 writes=6; used at $E1E7, E221, E22B, E22D, +63 more
ZpAF = $AF ; 35 refs; reads=10 writes=25; used at $E223, E252, E27E, E280, +31 more
ZpB3 = $B3 ; 2 refs; reads=1 writes=1; used at $E28A, E350
ZpB7 = $B7 ; 4 refs; reads=2 writes=2; used at $EA81, EA92, EA9A
ZpB8 = $B8 ; 4 refs; reads=2 writes=2; used at $EAA1, EAA3, EAB0
ZpB9 = $B9 ; 11 refs; reads=3 writes=8; used at $E4C7, E4EA, E4FD, E653, +7 more
ZpBE = $BE ; 2 refs; reads=1 writes=1; used at $DA13, EE80
ZpBF = $BF ; 7 refs; reads=4 writes=3; used at $CEB1, ED87, EE2E, EE3C, +2 more
ZpC0 = $C0 ; 4 refs; reads=2 writes=2; used at $DF2C, DF3D, DF40, DFC0
ZpC1 = $C1 ; 2 refs; reads=2 writes=0; used at $D065, E783
ZpC2 = $C2 ; 1 refs; reads=1 writes=0; used at $E790
ZpCC = $CC ; 2 refs; reads=0 writes=2; used at $EEB8, EF0E
ZpCD = $CD ; 1 refs; reads=0 writes=1; used at $EF3A
ZpCE = $CE ; 1 refs; reads=0 writes=1; used at $EF3C
ZpCF = $CF ; 1 refs; reads=0 writes=1; used at $EF3E
ZpD0 = $D0 ; 1 refs; reads=0 writes=1; used at $EF40
ZpD2 = $D2 ; 24 refs; reads=12 writes=12; used at $D32D, D32F, D34E, D353, +14 more
ZpD3 = $D3 ; 1 refs; reads=0 writes=1; used at $E245
ZpD4 = $D4 ; 1 refs; reads=0 writes=1; used at $E247
ZpD5 = $D5 ; 1 refs; reads=0 writes=1; used at $E249
ZpD8 = $D8 ; 3 refs; reads=1 writes=2; used at $E899, E90E, E938
ZpD9 = $D9 ; 3 refs; reads=1 writes=2; used at $E8F3, E93B, E965
ZpDA = $DA ; 4 refs; reads=2 writes=2; used at $D360, D367, E858, E8B2
ZpDB = $DB ; 6 refs; reads=3 writes=3; used at $E494, E4A1, E4B0, E7A5, +2 more
ZpE0 = $E0 ; 11 refs; reads=9 writes=2; used at $E4E0, E5EC, E637, E6B1, +7 more
ZpE4 = $E4 ; 4 refs; reads=2 writes=2; used at $E808, E80A, E817
ZpE8 = $E8 ; 4 refs; reads=2 writes=2; used at $E45B, E468, E475
ZpEC = $EC ; 3 refs; reads=1 writes=2; used at $E2D4, E2DB, E2EB
ZpF0 = $F0 ; 7 refs; reads=1 writes=6; used at $FB75, FB7E, FBB7, FBF4, +3 more
ZpF1 = $F1 ; 12 refs; reads=7 writes=5; used at $FA8F, FB8E, FB90, FBC4, +6 more
ZpF2 = $F2 ; 12 refs; reads=6 writes=6; used at $FA91, FB89, FBA4, FBC2, +6 more
ZpF3 = $F3 ; 6 refs; reads=3 writes=3; used at $FC90, FD95, FDE1, FDE3, +1 more
ZpF5 = $F5 ; 8 refs; reads=5 writes=3; used at $FCBE, FCE2, FCF2, FD05, +3 more
ZpF6 = $F6 ; 5 refs; reads=3 writes=2; used at $FCC6, FCCD, FCFA, FD00, +1 more
ZpF7 = $F7 ; 5 refs; reads=4 writes=1; used at $FD74, FDA6, FDB6, FDE5, +1 more
ZpF8 = $F8 ; 1 refs; reads=0 writes=1; used at $FD79
ZpF9 = $F9 ; 7 refs; reads=4 writes=3; used at $FCA1, FD7E, FDC9, FDF2, +2 more
ZpFA = $FA ; 10 refs; reads=6 writes=4; used at $FBFD, FD0B, FD83, FD9B, +4 more
ZpFB = $FB ; 7 refs; reads=5 writes=2; used at $FB77, FD65, FD97, FDC3, +3 more
ZpFC = $FC ; 15 refs; reads=5 writes=10; used at $C9FC, CC96, CCA3, CF6E, +11 more
ZpFD = $FD ; 12 refs; reads=1 writes=11; used at $C905, CA1B, CB44, CD04, +8 more
ZpFE = $FE ; 17 refs; reads=5 writes=12; used at $CDC0, CDF1, D0DB, DBE4, +10 more
ZpFF = $FF ; 17 refs; reads=5 writes=12; used at $D0F2, D240, D507, D5E4, +9 more
Binary file not shown.
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,32 @@
Modules list:
-------------
header.o:
HEADER Offs=000000 Size=000010 Align=00001 Fill=0000
prg.o:
PRG Offs=000000 Size=004000 Align=00001 Fill=0000
chr.o:
CHR Offs=000000 Size=002000 Align=00001 Fill=0000
Segment list:
-------------
Name Start End Size Align
----------------------------------------------------
CHR 000000 001FFF 002000 00001
HEADER 000000 00000F 000010 00001
PRG 00C000 00FFFF 004000 00001
Exports list by name:
---------------------
Exports list by value:
----------------------
Imports list:
-------------
Binary file not shown.
+1
View File
@@ -0,0 +1 @@
../Donkey Kong (JU).nes
+108
View File
@@ -0,0 +1,108 @@
; =============================================================================
; Nintendo Entertainment System hardware symbols
; =============================================================================
; -----------------------------------------------------------------------------
; PPU registers
; -----------------------------------------------------------------------------
PPUCTRL = $2000
PPUMASK = $2001
PPUSTATUS = $2002
OAMADDR = $2003
OAMDATA = $2004
PPUSCROLL = $2005
PPUADDR = $2006
PPUDATA = $2007
OAMDMA = $4014
; -----------------------------------------------------------------------------
; Controller ports
;
; $4016:
; Write: controller strobe
; Read: controller port 1
;
; $4017:
; Read: controller port 2
; Write: APU frame counter
; -----------------------------------------------------------------------------
JOY1 = $4016
JOY2 = $4017
; -----------------------------------------------------------------------------
; APU pulse channel 1
; -----------------------------------------------------------------------------
APUPULSE1CTRL = $4000
APUPULSE1SWEEP = $4001
APUPULSE1TIMERLO = $4002
APUPULSE1TIMERHI = $4003
; -----------------------------------------------------------------------------
; APU pulse channel 2
; -----------------------------------------------------------------------------
APUPULSE2CTRL = $4004
APUPULSE2SWEEP = $4005
APUPULSE2TIMERLO = $4006
APUPULSE2TIMERHI = $4007
; -----------------------------------------------------------------------------
; APU triangle channel
; -----------------------------------------------------------------------------
APUTRIANGLECTRL = $4008
APUTRIANGLETIMERLO = $400A
APUTRIANGLETIMERHI = $400B
; -----------------------------------------------------------------------------
; APU noise channel
; -----------------------------------------------------------------------------
APUNOISECTRL = $400C
APUNOISEPERIOD = $400E
APUNOISELENGTH = $400F
; -----------------------------------------------------------------------------
; APU DMC channel
; -----------------------------------------------------------------------------
APUDMCCTRL = $4010
APUDMCDIRECT = $4011
APUDMCADDR = $4012
APUDMCLENGTH = $4013
; -----------------------------------------------------------------------------
; APU status and frame counter
;
; $4015:
; Write: enable or disable the five APU channels
; Read: channel and interrupt status
;
; $4017:
; Write: APU frame-counter mode and IRQ inhibit
; Read: controller port 2
; -----------------------------------------------------------------------------
APUSTATUS = $4015
APUFRAMECOUNTER = $4017
; -----------------------------------------------------------------------------
; Controller masks
; -----------------------------------------------------------------------------
PAD_RIGHT = $01
PAD_LEFT = $02
PAD_DOWN = $04
PAD_UP = $08
PAD_START = $10
PAD_SELECT = $20
PAD_B = $40
PAD_A = $80
PAD_HORIZONTAL = PAD_LEFT | PAD_RIGHT
PAD_VERTICAL = PAD_UP | PAD_DOWN
PAD_DPAD = PAD_HORIZONTAL | PAD_VERTICAL