Files
disasm/Lode Runner (U)/copilot/locals.inc
T
tmerritt 9eb04ea7ef Adds overview for WIP projects
Promote Ice Climber (JE) and Ice Climber (U) to top-level

- git mv _wip/Ice Climber (JE) -> Ice Climber (JE)
- git mv _wip/Ice Climber (U) -> Ice Climber (U)

- Added header.s / chr.s (one-line .incbin each)
- Added HEADER/PRG/CHR linker.cfg with proper memory layout
- Added copilot/rom.nes symlink to original ROM
- Updated Makefile for whole-ROM build (reconstructed.nes vs rom.nes)
- Updated _tools paths from ../../../_tools/ to ../../_tools/

Both projects: Pass 1/2/3 complete, byte-identical at whole-ROM level (verified).

Root OVERVIEW.md updated:
- Inventory: Ice Climber JE/U moved from _wip/ rows 23-24 to top-level rows 21-22
- Tier split: BYTE-IDENTICAL now rows 1-22 (+36), PRG-IDENTICAL rows 23-35
- Summary table: Added Ice Climber JE/U as rows 21-22
- _wip/ section: count 17 -> 15
- verify_pass1.py scope: 19 -> 22 top-level projects

All 22 top-level projects verified byte-identical.

Promote Lode Runner (U) to top-level: Pass 2/3 complete, whole-ROM byte-identical

- git mv _wip/Lode Runner (U) -> Lode Runner (U)

- Added header.s / chr.s (one-line .incbin each)
- Added HEADER/PRG/CHR linker.cfg with proper memory layout
- Added copilot/rom.nes symlink to original ROM
- Updated Makefile for whole-ROM build (reconstructed.nes vs rom.nes)

Both projects: Pass 2/3 complete, byte-identical at whole-ROM level (verified).

Root OVERVIEW.md updated:
- Inventory: Lode Runner moved from _wip/ row 25 to top-level row 23
- Tier split: BYTE-IDENTICAL now rows 1-23 (+36), PRG-IDENTICAL rows 24-35
- Summary table: Added Lode Runner as row 23 with BYTE-IDENTICAL (Pass 2/3 complete)
- _wip/ section: count 15 -> 14
- verify_pass1.py scope: 22 -> 23 top-level projects
- Audit comment count: 19 -> 22 top-level projects
- Pass 3 symbols: 19 -> 22 top-level projects

All 23 top-level projects verified byte-identical.

TODO.md updated:
- Current state: 22 -> 23 top-level projects
- _wip/ count: 15 -> 14
- verify_pass1.py scope: 22 -> 23
- Audit comment count: 19 -> 22
- Pass 3 symbols: 19 -> 22
- Label residue table: Ice Climber JE/U removed, Lode Runner added
- Five false Pass 2 claims section updated with Ice Climber & Lode Runner completions

Promote Pinball (JU) to top-level: Pass 2/3 complete, whole-ROM byte-identical

- git mv _wip/Pinball (JU) -> Pinball (JU)

- Added header.s / chr.s (one-line .incbin each)
- Added HEADER/PRG/CHR linker.cfg with proper memory layout
- Added copilot/rom.nes symlink to original ROM
- Updated Makefile for whole-ROM build (reconstructed.nes vs rom.nes)

Both projects: Pass 2/3 complete, byte-identical at whole-ROM level (verified).

Root OVERVIEW.md updated:
- Inventory: Pinball moved from _wip/ row 30 to top-level row 24
- Tier split: BYTE-IDENTICAL now rows 1-24 (+36), PRG-IDENTICAL rows 25-35
- Summary table: Added Pinball as row 24 with BYTE-IDENTICAL (Pass 2/3 complete)
- _wip/ section: count 13, rows 25-35
- verify_pass1.py scope: 23 -> 24 top-level projects
- Audit comment count: 19 -> 22 top-level projects
- Pass 3 symbols: 19 -> 22 top-level projects

All 24 top-level projects verified byte-identical.

TODO.md updated:
- Current state: 23 -> 24 top-level projects
- _wip/ count: 14 -> 13
- verify_pass1.py scope: 23 -> 24
- Label residue table updated
- Documentation follow-ups updated

Promote Millipede (U) and Popeye (JU) (PRG 0) to top-level

Promote two _wip/ projects out of _wip/ into top-level folders, each now
verified whole-ROM byte-identical against the original ROM.

- Millipede (U): moves all copilot files up, adds header.s, chr.s,
  linker.cfg with PRG+HEADER+CHR areas, rom.nes copy, and switches the
  Makefile from PRG-only cmp to whole-ROM cmp. Makefile _tools depth
  adjusted (../../../../_tools/ -> ../../_tools/).
- Popeye (JU) (PRG 0): same promotion treatment.
- AGENTS.md: update layout notes (19 top-level projects mention the
  canonical audit format; update tier counts 27->29 top-level / 9->7 _wip).
- OVERVIEW.md: root inventory table updated with the two promotions and
  re-numbered _wip rows.
- TODO.md: handoff updates.
- Remaining _wip projects: assorted pass 2/3 edits (prg.s, locals.inc,
  reconstructed.lbl, reconstructed_prg.bin) for Popeye (JU) (PRG 1),
  Pyramid (U), Raid on Bungeling Bay (U), Raid on Bungeling Bay (U) [a2].
2026-10-19 19:58:41 -04:00

205 lines
16 KiB
PHP

; Lode Runner (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 ; 4 refs; reads=0 writes=4; used at $C014, C01B, C29A, C2A2
Zp01 = $01 ; 4 refs; reads=1 writes=3; used at $C016, C020, C29E
Zp02 = $02 ; 5 refs; reads=3 writes=2; used at $C188, C216, C2B6, C2C6, +1 more
Zp03 = $03 ; 4 refs; reads=2 writes=2; used at $C0A4, C28F, C292, E67E
Zp04 = $04 ; 18 refs; reads=10 writes=8; used at $C17E, C227, C5B4, C9B8, +12 more
Zp05 = $05 ; 3 refs; reads=1 writes=2; used at $C183, C229, C9BA
Zp06 = $06 ; 32 refs; reads=30 writes=2; used at $C0B0, C0C2, C1DA, C1F9, +28 more
Zp07 = $07 ; 2 refs; reads=1 writes=1; used at $C20A, CFB9
Zp08 = $08 ; 6 refs; reads=3 writes=3; used at $C191, C1A7, C1BC, C22F, +2 more
Zp09 = $09 ; 3 refs; reads=2 writes=1; used at $C193, C1A2, CABB
Zp0A = $0A ; 7 refs; reads=4 writes=3; used at $C18E, C1A9, CAAC, CAB3, +1 more
Zp0B = $0B ; 3 refs; reads=2 writes=1; used at $C198, C1AE, CACF
Zp0C = $0C ; 4 refs; reads=2 writes=2; used at $C1BE, CAD7, CADE, CAE2
Zp0D = $0D ; 2 refs; reads=1 writes=1; used at $C1BA, CAE6
Zp0E = $0E ; 4 refs; reads=2 writes=2; used at $C1CA, CAFA, CB03
Zp0F = $0F ; 4 refs; reads=2 writes=2; used at $C1CC, CA81, CB00
Zp10 = $10 ; 7 refs; reads=3 writes=4; used at $C034, C03A, C22B, C2BE, +3 more
Zp11 = $11 ; 4 refs; reads=1 writes=3; used at $C03C, C22D, C2C0, D060
Zp12 = $12 ; 34 refs; reads=18 writes=16; used at $CAA0, CAB9, CAD9, CAEE, +28 more
Zp13 = $13 ; 33 refs; reads=14 writes=19; used at $CAA5, CAAE, CAD2, CAEA, +27 more
Zp14 = $14 ; 4 refs; reads=2 writes=2; used at $D0BA, D0C4, E7E6, E7EC
Zp16 = $16 ; 2 refs; reads=1 writes=1; used at $CAEC, CAF4
Zp18 = $18 ; 12 refs; reads=4 writes=8; used at $D100, D1C4, D1EA, D1F8, +8 more
Zp19 = $19 ; 9 refs; reads=2 writes=7; used at $D10E, D1B5, D1D1, D204, +5 more
Zp1A = $1A ; 20 refs; reads=8 writes=12; used at $D11E, D19B, D19D, D1A2, +10 more
Zp1B = $1B ; 8 refs; reads=2 writes=6; used at $D118, D1BF, D1E5, DC9E, +4 more
Zp1C = $1C ; 2 refs; reads=0 writes=2; used at $D099, D0F7
Zp1D = $1D ; 4 refs; reads=2 writes=2; used at $CCD1, CCD3, CCDB
Zp1E = $1E ; 7 refs; reads=4 writes=3; used at $D1AD, D1C9, D1F4, D210, +2 more
Zp20 = $20 ; 42 refs; reads=38 writes=4; used at $C894, C927, C9EE, CA43, +36 more
Zp21 = $21 ; 46 refs; reads=41 writes=5; used at $C47C, C898, C92B, CA47, +39 more
Zp22 = $22 ; 17 refs; reads=10 writes=7; used at $C92F, CCED, CD0E, CD27, +9 more
Zp23 = $23 ; 25 refs; reads=16 writes=9; used at $C480, C931, CBCB, CBD1, +16 more
Zp24 = $24 ; 17 refs; reads=9 writes=8; used at $C935, CC75, CCC2, CEC2, +11 more
Zp25 = $25 ; 5 refs; reads=1 writes=4; used at $CD09, CD6F, CEC0, CF53, +1 more
Zp26 = $26 ; 55 refs; reads=18 writes=37; used at $C744, C75E, C76A, C781, +51 more
Zp27 = $27 ; 7 refs; reads=0 writes=7; used at $C827, CBE5, CDEA, CE4B, +3 more
Zp28 = $28 ; 61 refs; reads=48 writes=13; used at $C80D, C822, C8F0, C939, +57 more
Zp29 = $29 ; 4 refs; reads=0 writes=4; used at $C82C, D2F7, DCB9, E76A
Zp2A = $2A ; 4 refs; reads=2 writes=2; used at $C986, C996, C9A5, C9AA
Zp2B = $2B ; 3 refs; reads=1 writes=2; used at $C98A, C9AC, C9B0
Zp32 = $32 ; 21 refs; reads=17 writes=4; used at $CA45, CA69, D13A, D44C, +17 more
Zp33 = $33 ; 20 refs; reads=15 writes=5; used at $CA49, CA6D, D140, D448, +15 more
Zp34 = $34 ; 11 refs; reads=5 writes=6; used at $CA41, CA5F, D440, DB86, +6 more
Zp35 = $35 ; 7 refs; reads=4 writes=3; used at $CA73, D444, DBD3, DBFC, +3 more
Zp36 = $36 ; 19 refs; reads=12 writes=7; used at $D4D0, D4D6, D4D8, D567, +12 more
Zp37 = $37 ; 12 refs; reads=6 writes=6; used at $CA63, D450, D5E5, DB27, +6 more
Zp38 = $38 ; 13 refs; reads=8 writes=5; used at $CA65, D452, D4FF, D505, +8 more
Zp39 = $39 ; 38 refs; reads=19 writes=19; used at $C8A8, CA33, CA3B, CA4D, +30 more
Zp3A = $3A ; 5 refs; reads=2 writes=3; used at $C8B0, D970, D97F, D984, +1 more
Zp3B = $3B ; 5 refs; reads=4 writes=1; used at $DAA6, DAAC, DAC6, DAEC, +1 more
Zp52 = $52 ; 4 refs; reads=2 writes=2; used at $D122, D144, D14D
Zp53 = $53 ; 13 refs; reads=7 writes=6; used at $C3AA, C5D4, D312, D314, +7 more
Zp55 = $55 ; 12 refs; reads=11 writes=1; used at $D7C2, D7C9, D7E3, D855, +8 more
Zp56 = $56 ; 19 refs; reads=18 writes=1; used at $D7C4, D7DA, D7ED, D7FE, +15 more
Zp57 = $57 ; 11 refs; reads=8 writes=3; used at $D7E5, D7EB, D7F2, D807, +5 more
Zp58 = $58 ; 8 refs; reads=1 writes=7; used at $D84F, D865, D897, D8BC, +4 more
Zp59 = $59 ; 13 refs; reads=6 writes=7; used at $D853, D88F, D893, D8B4, +9 more
Zp5A = $5A ; 17 refs; reads=13 writes=4; used at $D868, D877, D883, D88A, +10 more
Zp5B = $5B ; 17 refs; reads=13 writes=4; used at $D8C4, D8D3, D8DF, D8E6, +10 more
Zp5C = $5C ; 6 refs; reads=2 writes=4; used at $D9D0, DA04, DA17, DA60, +2 more
Zp5D = $5D ; 13 refs; reads=11 writes=2; used at $D99E, D9A3, D9AD, D9C5, +9 more
Zp5E = $5E ; 20 refs; reads=16 writes=4; used at $D999, D99C, D9AB, D9C0, +14 more
Zp5F = $5F ; 2 refs; reads=1 writes=1; used at $C469, D56D
Zp60 = $60 ; 1 refs; reads=0 writes=1; used at $C458
Zp61 = $61 ; 1 refs; reads=0 writes=1; used at $C45D
Zp62 = $62 ; 1 refs; reads=0 writes=1; used at $C462
Zp63 = $63 ; 4 refs; reads=2 writes=2; used at $D4AF, D4B1, D4BC
Zp64 = $64 ; 4 refs; reads=2 writes=2; used at $D4A0, D4A2, D4AA
Zp72 = $72 ; 3 refs; reads=2 writes=1; used at $C088, C08A
Zp73 = $73 ; 3 refs; reads=2 writes=1; used at $CA67, D01F, D159
Zp74 = $74 ; 3 refs; reads=2 writes=1; used at $CA6B, D01B, D15F
Zp75 = $75 ; 4 refs; reads=3 writes=1; used at $CA5A, D168, DF4D, E084
Zp79 = $79 ; 1 refs; reads=0 writes=1; used at $CB3E
Zp85 = $85 ; 63 refs; reads=29 writes=34; used at $C727, C7D4, C7DC, C7E9, +50 more
Zp86 = $86 ; 83 refs; reads=41 writes=42; used at $C723, C729, C7C1, C7C3, +63 more
Zp88 = $88 ; 3 refs; reads=2 writes=1; used at $D323, D361, D40D
Zp8D = $8D ; 14 refs; reads=12 writes=2; used at $C449, C8A6, C8FC, C902, +9 more
Zp92 = $92 ; 1 refs; reads=0 writes=1; used at $C8AE
Zp93 = $93 ; 18 refs; reads=10 writes=8; used at $C475, C486, C8A4, C8F6, +7 more
Zp94 = $94 ; 3 refs; reads=1 writes=2; used at $CBAC, CFF8
Zp95 = $95 ; 4 refs; reads=1 writes=3; used at $C717, C860, C871, C87D
Zp96 = $96 ; 2 refs; reads=1 writes=1; used at $C53F
Zp97 = $97 ; 9 refs; reads=4 writes=5; used at $C403, C40F, C446, C464, +4 more
Zp98 = $98 ; 12 refs; reads=8 writes=4; used at $C420, C541, C543, C549, +5 more
Zp9A = $9A ; 11 refs; reads=7 writes=4; used at $C471, C494, C49B, C8C7, +4 more
Zp9B = $9B ; 4 refs; reads=2 writes=2; used at $CC06, CC25, CC64, CC81
Zp9C = $9C ; 7 refs; reads=1 writes=6; used at $C8AA, CBAE, CE92, CF14, +3 more
Zp9E = $9E ; 4 refs; reads=3 writes=1; used at $C057, C059, C07B
Zp9F = $9F ; 3 refs; reads=2 writes=1; used at $C05F, C061
ZpA0 = $A0 ; 16 refs; reads=11 writes=5; used at $C8AC, CE96, CED0, CEDF, +10 more
ZpA3 = $A3 ; 5 refs; reads=3 writes=2; used at $C8A2, C8DA, C8E0, CB42
ZpA4 = $A4 ; 1 refs; reads=0 writes=1; used at $CC7F
ZpA6 = $A6 ; 17 refs; reads=9 writes=8; used at $C4FD, C4FF, C507, C516, +10 more
ZpA7 = $A7 ; 16 refs; reads=12 writes=4; used at $C3A8, C3CF, C3D1, C3D9, +11 more
ZpAF = $AF ; 7 refs; reads=2 writes=5; used at $C839, C846, C850, C855, +2 more
ZpB0 = $B0 ; 4 refs; reads=2 writes=2; used at $C71B, C866, C87F
ZpB1 = $B1 ; 3 refs; reads=1 writes=2; used at $C71F, C883
ZpB2 = $B2 ; 2 refs; reads=1 writes=1; used at $C862, C877
ZpB3 = $B3 ; 9 refs; reads=5 writes=4; used at $C75C, C779, C77F, C793, +4 more
ZpB7 = $B7 ; 9 refs; reads=3 writes=6; used at $C0D1, C125, C225, C433, +5 more
ZpB8 = $B8 ; 5 refs; reads=1 writes=4; used at $C0DC, C11B, C235, CB2B, +1 more
ZpB9 = $B9 ; 6 refs; reads=2 writes=4; used at $C0D8, C0DA, C0E2, C231, +1 more
ZpBA = $BA ; 3 refs; reads=2 writes=1; used at $C0E8, C0ED, E22E
ZpBB = $BB ; 1 refs; reads=0 writes=1; used at $E230
ZpBC = $BC ; 5 refs; reads=4 writes=1; used at $C0EA, C10D, C119, C12D, +1 more
ZpBD = $BD ; 1 refs; reads=0 writes=1; used at $C0EF
ZpBE = $BE ; 8 refs; reads=3 writes=5; used at $C0E4, C115, C11F, CB27, +3 more
ZpBF = $BF ; 7 refs; reads=3 writes=4; used at $C0F7, C0FB, C10B, C113, +2 more
ZpC0 = $C0 ; 4 refs; reads=2 writes=2; used at $C100, C15B, C172, C174
ZpC1 = $C1 ; 3 refs; reads=1 writes=2; used at $C713, C7F7
ZpC2 = $C2 ; 5 refs; reads=3 writes=2; used at $CB44, CB46, CB71, CB7F
ZpC3 = $C3 ; 7 refs; reads=4 writes=3; used at $C59A, C59C, C5EF, C63D, +3 more
ZpC4 = $C4 ; 5 refs; reads=3 writes=2; used at $C89C, CFFC, E0A1, E0BC
ZpC5 = $C5 ; 6 refs; reads=4 writes=2; used at $C89E, D395, D397, E0AA, +1 more
ZpC6 = $C6 ; 8 refs; reads=5 writes=3; used at $C442, C8A0, D16D, E064, +4 more
ZpC7 = $C7 ; 6 refs; reads=4 writes=2; used at $E693, E6B0, E6CD, E6EB, +2 more
ZpC8 = $C8 ; 6 refs; reads=2 writes=4; used at $E687, E69C, E6A8, E6B7, +2 more
ZpC9 = $C9 ; 6 refs; reads=1 writes=5; used at $C21F, CB2F, D025, E235, +2 more
ZpCA = $CA ; 8 refs; reads=4 writes=4; used at $C21D, D028, E281, E287, +3 more
ZpCB = $CB ; 4 refs; reads=2 writes=2; used at $E275, E277, E27F
ZpCC = $CC ; 2 refs; reads=1 writes=1; used at $C145, C151
ZpCD = $CD ; 2 refs; reads=0 writes=2; used at $C221, CB31
ZpCE = $CE ; 5 refs; reads=3 writes=2; used at $C5D8, CFCA, CFD1, CFD8
ZpCF = $CF ; 3 refs; reads=1 writes=2; used at $C5DC, CFDC
ZpD0 = $D0 ; 10 refs; reads=6 writes=4; used at $C405, C411, C419, C4B0, +6 more
ZpD1 = $D1 ; 7 refs; reads=3 writes=4; used at $C5E5, CFBF, CFC5, CFCC, +1 more
ZpD2 = $D2 ; 2 refs; reads=1 writes=1; used at $CFC3, CFD3
ZpD3 = $D3 ; 3 refs; reads=1 writes=2; used at $C3C1, C3E3
ZpD4 = $D4 ; 3 refs; reads=1 writes=2; used at $C3C3, C3E7
ZpD5 = $D5 ; 3 refs; reads=1 writes=2; used at $C3C7, C3EB
ZpD6 = $D6 ; 4 refs; reads=2 writes=2; used at $C3B4, C5AA, C5AC
ZpD7 = $D7 ; 2 refs; reads=1 writes=1; used at $C9FF, CA11
ZpD8 = $D8 ; 4 refs; reads=2 writes=2; used at $D27E, D280, D288
ZpD9 = $D9 ; 4 refs; reads=2 writes=2; used at $D2B1, D2B3, D2BB
ZpDA = $DA ; 4 refs; reads=2 writes=2; used at $D2D0, D2D2, D2DA
ZpDB = $DB ; 8 refs; reads=1 writes=7; used at $C0AC, C4C5, C4CE, C572, +4 more
ZpDC = $DC ; 16 refs; reads=10 writes=6; used at $C444, CB38, CB40, CB8C, +8 more
ZpDD = $DD ; 7 refs; reads=3 writes=4; used at $E869, E87C, E8B4, E8C1, +2 more
ZpDE = $DE ; 7 refs; reads=4 writes=3; used at $E86D, E880, E8B9, E8C5, +2 more
ZpDF = $DF ; 9 refs; reads=4 writes=5; used at $E870, E8A3, E8BF, E931, +3 more
ZpE0 = $E0 ; 9 refs; reads=4 writes=5; used at $E874, E8A5, E8C3, E935, +3 more
ZpE2 = $E2 ; 6 refs; reads=2 writes=4; used at $E902, E904, E9A0, E9A9
ZpE3 = $E3 ; 3 refs; reads=1 writes=2; used at $E9A2, E9B2
ZpE4 = $E4 ; 6 refs; reads=4 writes=2; used at $E689, E7CD, E7CF, E7E3, +1 more
ZpE5 = $E5 ; 6 refs; reads=3 writes=3; used at $C027, C49F, C4F0, C511
; Semantic aliases (Pass 3, 2026-10-20)
; Based on observed usage in the disassembly
; 16-bit pointer (RAM clear, PPU)
PtrLo = $00 ; semantic alias for Zp00
PtrHi = $01 ; semantic alias for Zp01
; PPU/Game state
PpuMaskShadow = $03 ; semantic alias for Zp03
GameplayFlags = $06 ; semantic alias for Zp06 (bit 4 = trigger)
NmiPathSelector = $10 ; semantic alias for Zp10 (0=title, !=0=game)
NmiSubPathSelector = $11 ; semantic alias for Zp11
; Object/Sprite pointers
ObjPtrLo = $12 ; semantic alias for Zp12
ObjPtrHi = $13 ; semantic alias for Zp13
; Player state
PlayerPosX = $20 ; semantic alias for Zp20
PlayerPosY = $21 ; semantic alias for Zp21
PlayerState = $26 ; semantic alias for Zp26
PlayerVelocity = $28 ; semantic alias for Zp28
; Enemy/Guard positions
EnemyPosX1 = $32 ; semantic alias for Zp32
EnemyPosY1 = $33 ; semantic alias for Zp33
EnemyPosX2 = $34 ; semantic alias for Zp34
EnemyPosY2 = $35 ; semantic alias for Zp35
; Level data
LevelTimer = $39 ; semantic alias for Zp39
LevelDataPtrLo = $85 ; semantic alias for Zp85
LevelDataPtrHi = $86 ; semantic alias for Zp86
; Frame counters
FrameCounterLo = $9E ; semantic alias for Zp9E
FrameCounterHi = $9F ; semantic alias for Zp9F
; Level transition
LevelTransitionTrigger = $B7 ; semantic alias for ZpB7
LevelTransitionCountLo = $B8 ; semantic alias for ZpB8
LevelTransitionCountHi = $B9 ; semantic alias for ZpB9
LevelDataPtr2Lo = $BA ; semantic alias for ZpBA
LevelDataPtr2Hi = $BB ; semantic alias for ZpBB
LevelDataState = $BC ; semantic alias for ZpBC
; Gameplay state
GameplayActiveFlag = $DB ; semantic alias for ZpDB
; Init constant
InitConstant = $E5 ; semantic alias for ZpE5