- 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
3.9 KiB
3.9 KiB
Xevious (U)
Status
Pass 3 complete. All routine entry points (jsr/jmp targets) have semantic
names, and all raw $XXXX call operands in jsr/jmp instructions have been
replaced with label references (except 7 targets outside code range, kept as
raw addresses). Major data tables and zero-page aliases have been named. The
project builds and verifies byte-identical to the original ROM.
make assembles header.s, prg.s, chr.s, links them with ld65 and compares the
result against rom.nes:
Byte-identical ROM verified.
Pass 1 results
| Metric | Value |
|---|---|
| PRG size | 32768 bytes (32 KB) at $8000-$FFFF |
| Code | 11321 bytes (34.5%) |
| Data | 21447 bytes (65.5%) |
| Instructions | 5513 |
| Routines/labels | 795 |
| Zero-page aliases | 156 (in locals.inc) |
| Indirect dispatches | jmp ($fe) at $BA88 (table $BA8B, 16 entries), jmp ($4) at $CA07 (table $CA0A, 64 entries) |
Pass 2 results
| Metric | Value |
|---|---|
Label_XXXX names replaced |
781 labels → unique names |
Raw $XXXX jsr/jmp operands replaced |
466 → label references |
Remaining raw $XXXX jsr/jmp |
7 (targets outside code range) |
| Semantic zero-page aliases | ~20 (in locals.inc) |
Pass 3 results
| Metric | Value |
|---|---|
| Semantic entry-point names | 143 (Reset, NmiHandler, IrqHandler, InputRead, ObjInitCall, ObjMoveCall, ObjDrawCall, ObjUpdateCall, SetOamPtrs, WaitVblank, GameModeDispatch, ObjSpriteSetup, ObjCommonUpdate, etc.) |
| Internal branch labels | ~574 (Sub_XXXX address-based, local to routines) |
| Named data tables | PatternData, SpriteAttrTable, JumpTable4, ResetVarTable |
| Semantic zero-page aliases | ~20 (PPUCTRLShadow, ObjectX, ObjectY, ObjPtr, GameMode, Joypad1Cur, etc.) |
Pass 1 notes
- Two computed-dispatch mechanisms were recovered via declared jump tables:
jmp ($fe)at $BA88 indexes a 16-entry table at $BA8B (targets in $BAAB–$BB20 range)jmp ($4)at $CA07 indexes a 64-entry table at $CA0A (targets mostly in $CA–$CB and $C0–$C3 ranges)
- One branch at $E40A targets $E3B5, which falls inside the operand of
jsr $CF2Fat $E3B3. Emitted as.bytewith an explanatory comment since the target cannot be a label. - Six addresses contain undocumented/illegal opcodes not decoded by the tracer: $9848, $A2C3, $CD89, $E0FF, $E3B5, $F230.
ROM
| Property | Value |
|---|---|
| Format | iNES |
| Mapper | 0 |
| Board | NROM-256 |
| Mirroring | Horizontal |
| Four-screen VRAM | no |
| Battery | no |
| PRG | 32 KB (2 x 16 KB), mapped at CPU $8000-$FFFF |
| CHR | 8 KB (1 x 8 KB) |
| Trainer | none |
| Footer | none |
| NMI vector | $FC4E |
| RESET vector | $FAF6 |
| IRQ vector | $FF1D |
| ROM file | Xevious (U).nes |
| SHA-256 | 1915fb1c30251de0c8f7913720a27b25d3ccef871851722a504d95fbb9d0ca7c |
Header notes
- none
Open work
- Pass 1 - complete. Code/data split produced; build verifies byte-identical.
- Pass 2 - complete. All
Label_XXXXnames replaced with unique names; all raw$XXXXjsr/jmp operands replaced with label references (7 remain outside code range). - Pass 3 - complete. All 143 routine entry points have semantic names;
~574 internal branch labels remain as
Sub_XXXXaddress-based names; ~20 zero-page aliases have semantic names; 4 data tables named. - Promotion to
NROM/<name>/once ready, asgit mv.
Files
| File | Purpose |
|---|---|
prg.s |
Pass 3 disassembly (semantic entry-point names + Sub_XXXX branch labels) |
header.s |
iNES header include |
chr.s |
CHR include |
prg.bin |
32768 bytes (32 KB) PRG image |
chr.bin |
8192 bytes (8 KB) CHR image |
rom.nes |
byte-identical copy of the original ROM |
linker.cfg |
HEADER / PRG / CHR memory areas |
symbols.inc |
NES hardware register names |
locals.inc |
zero-page aliases (semantic names applied at Pass 2/3) |
Makefile |
build and byte-identity check |