Files
disasm/UNROM/Zanac (U)
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
..

Zanac (U)

Status

Pass 3 complete. All address-derived Label_XXXX names have been replaced with semantic entry-point names (133 routines) plus address-based names for remaining branch targets (~212 Sub_XXXX/Next_XXXX/Skip_XXXX/Exit_XXXX). All raw $XXXX jsr/jmp operands replaced with label references. Zero-page aliases renamed to semantic names (14 named). Data tables named (26 tables). The project builds and verifies byte-identical to the original ROM.

make assembles header.s, prg.s, prg.07.s, links them with ld65 and compares the result against rom.nes:

Byte-identical ROM verified.

Pass 1 results

Metric Value
PRG size 131072 bytes (128 KB) at file offset $0010
Code 6206 bytes (37.9% of bank 7)
Instructions 2977
Bank 7 routines 391 labels traced
Banks as data Banks 0-6 (switchable $8000-$BFFF)

Pass 2 results

Metric Value
Semantic entry-point names 133 (Reset, NmiHandler, InputRead, ObjInitCall, ObjMoveCall, ObjDrawCall, ObjUpdateCall, SetOamPtrs, WaitVblank, GameModeDispatch, etc.)
Internal branch labels ~212 (Sub_XXXX/Next_XXXX/Skip_XXXX/Exit_XXXX)
Raw $XXXX jsr/jmp operands 0 (all replaced with label references)
Raw $XXXX branch operands 0 (all replaced with label references)
Remaining Label_XXXX 0 (all replaced)

Pass 3 results

Metric Value
Semantic zero-page aliases 14 (Reset, NmiHandler, InputRead, ObjInitCall, ObjMoveCall, ObjDrawCall, ObjUpdateCall, SetOamPtrs, WaitVblank, GameModeDispatch, etc.)
Named data tables 26 (JumpTable, IndexTable, SpriteTable, TextTable, etc.)
Raw $XXXX jsr/jmp operands 0
Raw $XXXX branch operands 0
Remaining Label_XXXX 0

Pass 1 notes

  • Bank 7 (last 16 KB, fixed at CPU $C000-$FFFF) was traced from vectors: NMI=$CE8D, RESET=$E7BF, IRQ=$CEC4. Bank 7 code is assembled separately as prg.07.s with .org $C000 and linked at file offset $1C010.
  • Banks 0-6 (switchable at $8000-$BFFF) are emitted as raw .byte data; bank-switch analysis is needed to trace code in those banks
  • Seven invalid opcode addresses found: $D506, $D876, $E15B, $E44B, $E520, $E909, $F0FE (likely data mis-decoded as opcodes or vice versa)

ROM

Property Value
Format iNES
Mapper 2
Board UNROM
Mirroring Horizontal
Four-screen VRAM no
Battery no
PRG 128 KB (8 x 16 KB), at file offset $0010
CHR none
Trainer none
Footer none
NMI vector $CE8D
RESET vector $E7BF
IRQ vector $CEC4
ROM file Zanac (U).nes
SHA-256 7e75a19b9e11715c0eb19a2017a322df02f5cf4f7b30acef0fa7a0615236bda4

Header notes

  • none

Open work

  • Pass 1 - complete. Bank 7 traced (37.9% code); banks 0-6 as raw data. Build verifies byte-identical.
  • Pass 2 - complete. All 133 entry points have semantic names; ~212 internal branch labels remain as address-based names; All raw $XXXX jsr/jmp/branch operands replaced with label references.
  • Pass 3 - complete. Semantic zero-page aliases applied (14 named). 26 data tables named (JumpTable, IndexTable, SpriteTable, TextTable, etc.).
  • Promotion to NROM/<name>/ once ready, as git mv.

Files

File Purpose
prg.s Pass 3 disassembly (banks 0-6 as raw .byte data)
prg.07.s Pass 3 disassembly for bank 7 (fixed at CPU $C000-$FFFF)
header.s iNES header include
prg.bin 131072 bytes (128 KB) PRG image
rom.nes byte-identical copy of the original ROM
linker.cfg HEADER / PRG / PRG7 memory areas
prg.07.cfg Linker config for assembling prg.07.bin
symbols.inc NES hardware register names
locals.inc zero-page aliases (14 semantic names applied)
Makefile build and byte-identity check