Files
disasm/Donkey Kong (JU)/copilot/dk_label_map.tsv
T
tmerritt 71ada15de0 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.
2026-10-19 14:55:08 -04:00

482 lines
12 KiB
Plaintext

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