Files
disasm/NROM/Pac-Man (Tengen) (U)/locals.inc
T
tmerritt df11857075 Promote Xevious (U) and Zanac (U) from _wip/ to NROM/
- Xevious (U): Promoted from _wip/NROM/Xevious (U)/ to NROM/Xevious (U)/
  - Pass 3 complete: 34.5% code coverage, 143 semantic entry points,
    4 named data tables, ~20 semantic ZP aliases
  - NROM mapper 0, 32 KB PRG, 8 KB CHR, horizontal mirroring

- Zanac (U): Promoted from _wip/UNROM/Zanac (U)/ to NROM/Zanac (U)/
  - Pass 3 complete: 34.5% code coverage (bank 7 only), 133 semantic
    entry points, 26 named data tables, 14 semantic ZP aliases
  - UNROM mapper 2, 128 KB PRG (8 banks), no CHR
  - Bank 7 fixed at CPU -; banks 0-6 switchable at 000-
  - Bank 7 assembled separately as prg.07.s with .org

Both projects build byte-identical. Updated root README.md inventory,
per-project details, and WIP.md accordingly.

Move Zanac (U) to UNROM/ mapper directory

Zanac (U) is a UNROM (mapper 2) game, not NROM (mapper 0). Move it to
the correct mapper directory and update README.md and WIP.md references
accordingly. Update project counts in WIP.md (857->856 total, UNROM
98->97 projects).

Promote Mermaids of Atlantis (U) from _wip/ to MAPPER8/

Additional cleanup of Mermaids of Atlantis
2026-10-21 07:20:59 -04:00

151 lines
12 KiB
PHP

; Pac-Man (Tengen) (U) 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 ; 58 refs; reads=26 writes=32; used at $C054, C0B5, C0BD, C27F, +51 more
Zp01 = $01 ; 33 refs; reads=13 writes=20; used at $C059, C05B, C283, C293, +25 more
Zp02 = $02 ; 45 refs; reads=18 writes=27; used at $C287, C2B4, C920, C93E, +39 more
Zp03 = $03 ; 18 refs; reads=6 writes=12; used at $C29A, C2A3, C925, C943, +12 more
Zp04 = $04 ; 18 refs; reads=11 writes=7; used at $D803, D8E7, D8FA, DAC2, +12 more
Zp05 = $05 ; 40 refs; reads=22 writes=18; used at $D761, D771, D773, D775, +24 more
Zp06 = $06 ; 13 refs; reads=6 writes=7; used at $D779, D791, D7A0, D7B5, +8 more
Zp07 = $07 ; 2 refs; reads=1 writes=1; used at $D78F, D793
Zp08 = $08 ; 4 refs; reads=2 writes=2; used at $D76A, D76F, D784, D789
Zp0A = $0A ; 2 refs; reads=1 writes=1; used at $D740, E47D
Zp0B = $0B ; 5 refs; reads=2 writes=3; used at $D745, E485, E4A1, E4BC
Zp0C = $0C ; 3 refs; reads=2 writes=1; used at $D74A, D75A, E472
Zp0D = $0D ; 2 refs; reads=1 writes=1; used at $D754, E474
Zp0E = $0E ; 1 refs; reads=0 writes=1; used at $E476
Zp0F = $0F ; 1 refs; reads=0 writes=1; used at $E478
Zp10 = $10 ; 4 refs; reads=0 writes=4; used at $C249, D3C3, D908, D9AF
Zp11 = $11 ; 4 refs; reads=0 writes=4; used at $C24E, D3C8, D90D, D9B4
Zp12 = $12 ; 4 refs; reads=2 writes=2; used at $E286, E28A, E294, E298
Zp13 = $13 ; 4 refs; reads=2 writes=2; used at $E28C, E290, E29A, E29E
Zp14 = $14 ; 2 refs; reads=2 writes=0; used at $E288, E296
Zp15 = $15 ; 2 refs; reads=2 writes=0; used at $E28E, E29C
Zp1A = $1A ; 5 refs; reads=5 writes=0; used at $C8AA, C9BB, D370, D723, +1 more
Zp1C = $1C ; 3 refs; reads=3 writes=0; used at $D372, D72D, D733
Zp1E = $1E ; 2 refs; reads=2 writes=0; used at $C8ED, D726
Zp1F = $1F ; 1 refs; reads=1 writes=0; used at $C8F1
Zp20 = $20 ; 1 refs; reads=1 writes=0; used at $D730
Zp2A = $2A ; 1 refs; reads=0 writes=1; used at $C90D
Zp2B = $2B ; 1 refs; reads=0 writes=1; used at $C911
Zp3F = $3F ; 3 refs; reads=2 writes=1; used at $C0A2, C22D, C244
Zp40 = $40 ; 5 refs; reads=2 writes=3; used at $C109, C1D5, C1D7, C23E, +1 more
Zp41 = $41 ; 3 refs; reads=1 writes=2; used at $C06C, C119, C225
Zp42 = $42 ; 3 refs; reads=1 writes=2; used at $C06E, C11E, C223
Zp43 = $43 ; 4 refs; reads=1 writes=3; used at $C0D9, C12A, C1E0, C23A
Zp45 = $45 ; 2 refs; reads=1 writes=1; used at $C0A6, C10B
Zp46 = $46 ; 9 refs; reads=7 writes=2; used at $C0AE, C125, C152, C1F1, +5 more
Zp47 = $47 ; 10 refs; reads=8 writes=2; used at $C0AA, C123, C154, C21F, +6 more
Zp48 = $48 ; 4 refs; reads=2 writes=2; used at $C0E0, C15E, C21B, DE3D
Zp4B = $4B ; 12 refs; reads=11 writes=1; used at $C15C, C977, C982, C9D3, +7 more
Zp4C = $4C ; 1 refs; reads=0 writes=1; used at $C227
Zp4D = $4D ; 3 refs; reads=2 writes=1; used at $C142, C150
Zp4E = $4E ; 3 refs; reads=2 writes=1; used at $C14B, C158
Zp4F = $4F ; 1 refs; reads=0 writes=1; used at $C15A
Zp50 = $50 ; 5 refs; reads=3 writes=2; used at $D365, D378, D381, D388, +1 more
Zp51 = $51 ; 4 refs; reads=3 writes=1; used at $D36C, D383, D391, D3BC
Zp64 = $64 ; 1 refs; reads=0 writes=1; used at $C09E
Zp6C = $6C ; 2 refs; reads=1 writes=1; used at $C20E, DEF5
Zp6D = $6D ; 1 refs; reads=0 writes=1; used at $C210
Zp6E = $6E ; 1 refs; reads=0 writes=1; used at $C212
Zp6F = $6F ; 1 refs; reads=0 writes=1; used at $C214
Zp87 = $87 ; 7 refs; reads=4 writes=3; used at $C229, C565, C567, C589, +1 more
Zp88 = $88 ; 4 refs; reads=2 writes=2; used at $C22B, C560, D397, D805
Zp89 = $89 ; 3 refs; reads=2 writes=1; used at $C8CF, C8D1
Zp8A = $8A ; 1 refs; reads=0 writes=1; used at $C8D5
Zp9F = $9F ; 1 refs; reads=1 writes=0; used at $D3B4
ZpA0 = $A0 ; 1 refs; reads=1 writes=0; used at $D3B8
ZpAF = $AF ; 1 refs; reads=1 writes=0; used at $D815
ZpB0 = $B0 ; 1 refs; reads=1 writes=0; used at $D819
ZpB1 = $B1 ; 1 refs; reads=1 writes=0; used at $D81E
ZpB2 = $B2 ; 1 refs; reads=1 writes=0; used at $D822
ZpB3 = $B3 ; 1 refs; reads=1 writes=0; used at $D7FA
ZpB4 = $B4 ; 1 refs; reads=1 writes=0; used at $D7FE
ZpB5 = $B5 ; 1 refs; reads=0 writes=1; used at $D3B6
ZpB6 = $B6 ; 1 refs; reads=0 writes=1; used at $D3BA
ZpB7 = $B7 ; 3 refs; reads=2 writes=1; used at $C9C3, C9C5
ZpB8 = $B8 ; 4 refs; reads=4 writes=0; used at $D737, D7E0, D903, D9AA
ZpB9 = $B9 ; 4 refs; reads=3 writes=1; used at $D75C, D7B9, D7CC, E492
ZpBA = $BA ; 2 refs; reads=1 writes=1; used at $D24B, D251
ZpC2 = $C2 ; 5 refs; reads=0 writes=5; used at $D7FC, D80E, D817, D820, +1 more
ZpC3 = $C3 ; 5 refs; reads=0 writes=5; used at $D800, D812, D81B, D824, +1 more
ZpCA = $CA ; 1 refs; reads=1 writes=0; used at $D80C
ZpCB = $CB ; 1 refs; reads=1 writes=0; used at $D810
ZpCD = $CD ; 2 refs; reads=1 writes=1; used at $D72B, D763
ZpCE = $CE ; 2 refs; reads=1 writes=1; used at $D735, D77B
ZpE3 = $E3 ; 3 refs; reads=1 writes=2; used at $D4C7, D4D4
ZpE4 = $E4 ; 6 refs; reads=4 writes=2; used at $D4C5, D4CB, D4CD, D4CF
ZpEF = $EF ; 2 refs; reads=2 writes=0; used at $F020, F050
ZpF0 = $F0 ; 4 refs; reads=1 writes=3; used at $EE4D, EE77, EEF4, F001
ZpF1 = $F1 ; 1 refs; reads=0 writes=1; used at $EE51
ZpF2 = $F2 ; 30 refs; reads=10 writes=20; used at $EE55, EE84, EEA3, EEC8, +26 more
ZpF3 = $F3 ; 1 refs; reads=0 writes=1; used at $EE59
ZpF4 = $F4 ; 3 refs; reads=2 writes=1; used at $EE5E, EF05, EF16
ZpF5 = $F5 ; 1 refs; reads=0 writes=1; used at $EE63
ZpF6 = $F6 ; 4 refs; reads=1 writes=3; used at $EECD, EED7, EED9
ZpF7 = $F7 ; 1 refs; reads=0 writes=1; used at $EE67
ZpF8 = $F8 ; 1 refs; reads=0 writes=1; used at $EE91
ZpF9 = $F9 ; 1 refs; reads=0 writes=1; used at $EE93
ZpFA = $FA ; 1 refs; reads=0 writes=1; used at $EE95
ZpFB = $FB ; 1 refs; reads=0 writes=1; used at $EE97
ZpFC = $FC ; 6 refs; reads=4 writes=2; used at $EEEE, EEF2, EF01, EF10, +2 more
ZpFD = $FD ; 23 refs; reads=19 writes=4; used at $EE99, EEA1, EEC6, EEE1, +19 more
ZpFE = $FE ; 12 refs; reads=5 writes=7; used at $EE9F, EEB1, EEBA, EEC0, +7 more
ZpFF = $FF ; 8 refs; reads=3 writes=5; used at $EE9B, EF7B, EF85, EF98, +3 more
; ---------------------------------------------------------------------------
; ---------------------------------------------------------------------------
; ---------------------------------------------------------------------------
; ---------------------------------------------------------------------------
; ---------------------------------------------------------------------------
; Semantic zero-page aliases (Pass 3)
;
; Every alias below was read out of this dump's own code. An address whose
; role is the same at every reference is renamed everywhere; an address that
; is reused for several roles keeps the neutral ZpXX name outside the
; routines where the role is proven, and the per-site choice is recorded in
; sites.tsv.
; ---------------------------------------------------------------------------
DispatchPtrLo = $10 ; semantic alias for Zp10 (low byte of the pointer the computed dispatch jumps through)
DispatchPtrHi = $11 ; semantic alias for Zp11 (high byte of that pointer)
ScoreLo = $12 ; semantic alias for Zp12 (low byte of the 16-bit score accumulator (AddScore/SubScore))
ScoreHi = $13 ; semantic alias for Zp13 (high byte of the score accumulator)
ScoreAddendLo = $14 ; semantic alias for Zp14 (low byte of the value added to the score)
ScoreAddendHi = $15 ; semantic alias for Zp15 (high byte of the value added to the score)
GameState = $3F ; semantic alias for Zp3F (index into the game-state dispatch table at $C253)
NmiFlag = $40 ; semantic alias for Zp40 (set to 1 by the game, waited on until the NMI clears it)
ScrollX = $41 ; semantic alias for Zp41 (written to PPUSCROLL)
ScrollY = $42 ; semantic alias for Zp42 (written to PPUSCROLL)
PpuCtrlShadow = $43 ; semantic alias for Zp43 (PPUCTRL shadow - always stored together with $2000)
OamDmaPage = $45 ; semantic alias for Zp45 (the page written to $4014 (OAMDMA))
CocktailModeFlag = $46 ; semantic alias for Zp46 (ANDed with $47 to form the PPUCTRL nametable bit)
ActivePlayerFlag = $47 ; semantic alias for Zp47 (selects which controller the NMI reads)
GameplaySuspended = $48 ; semantic alias for Zp48 ($FF while the game is running; gates the level script)
FrameCounter = $4B ; semantic alias for Zp4B (incremented every NMI; masked to pick the behaviour)
Player1Input = $4D ; semantic alias for Zp4D (JOY1 shift register)
Player2Input = $4E ; semantic alias for Zp4E (JOY2 shift register)
ActiveInput = $4F ; semantic alias for Zp4F (the controller the NMI selected)
CopyrightVerified = $64 ; semantic alias for Zp64 (set to 1 once the signature is in RAM)
GhostDataIndex = $87 ; semantic alias for Zp87 (steps through the character table at $C66A)
GhostFlags = $88 ; semantic alias for Zp88 (mode flags for the ghost being updated)
TargetSlotIndex = $89 ; semantic alias for Zp89 (the pellet slot picked as the ghost's target)
FruitIndex = $B7 ; semantic alias for ZpB7 (the fruit type counter)
GhostSlotIndex = $B8 ; semantic alias for ZpB8 (the ghost slot, indexed by X)
GhostState = $B9 ; semantic alias for ZpB9 (per-ghost state, indexed by X)
PositionDeltaX = $CD ; semantic alias for ZpCD (the computed X delta)
PositionDeltaY = $CE ; semantic alias for ZpCE (the computed Y delta)
AnimationTimer = $E3 ; semantic alias for ZpE3 (the animation frame timer)
AnimationFrameIndex = $E4 ; semantic alias for ZpE4 (the animation frame index)
PtrLo = $00 ; semantic alias for Zp00 (low byte of the VRAM address DrawMazeGraphics writes to; applied only inside $C27D-$C2DC, elsewhere the neutral name is kept)
PtrHi = $01 ; semantic alias for Zp01 (high byte of that VRAM address; applied only inside $C27D-$C2DC, elsewhere the neutral name is kept)
Ptr2Lo = $02 ; semantic alias for Zp02 (low byte of the destination pointer; applied only inside $DAB0-$DBAC, elsewhere the neutral name is kept)
Ptr2Hi = $03 ; semantic alias for Zp03 (high byte of that pointer; applied only inside $DAB0-$DBAC, elsewhere the neutral name is kept)