NA1 — Nobunaga’s Ambition (NES)

The bytecode-VM decompiler that outgrew annotation and became the series’ crucible. na1-decompiler was extracted from this vault on 2026-06-05 with full git history preserved (236 commits); active work continues there, not here.

Links: system → NES · toolchain → KOEI tools · series hub → Game Annotation · sibling tooling → Lowering Atlas · project SDK → projects/CLAUDE.md

Identity

Field Value
Logical name na1-decompiler
GitHub github.com/chrisaacson69/na1-decompiler (public)
Sibling path ../na1-decompiler (resolved per-machine via .claude/local-paths.md)
Entry point na1-decompiler/CONTEXT.md → ROADMAP.md (standard layout since 2026-10-29: chapters in docs/, tools in tools/, the site built by Actions)
Lowering atlas moved to emu-harness tools/lowering-atlas/ (2026-10-29)
Title Nobunaga no Yabō: Zenkokuban · design clock 1986 · Famicom port 1988-03-18
Cart MMC1/SOROM, 256 KB
Depends on koei-nes (family engine) → emu-harness (generic render core; was nes-render)

Status (2026-11-04): eight of the ten phases are done and fresh (py -3.14 -m emu_harness status in the repo). The structurer is one engine now, DREAM with a region-reducer fallback; its current state is docs/decompiler-structure.md. The economy formulas and the game’s rules (upkeep, luck, Spring, revolt, auction, bribe, Train, Hire) are checked against the ROM’s own routines (na1sim.oracle), and the render and capture tools are sorted. Assets and live verification wait on Mesen captures: a live-PPU match per render family, the sound gate beyond song 0, $796A, the per-stat map, and a spot check of the corrected formulas in play.

Reachability: clone as a sibling of the vault so ../na1-decompiler/ resolves — portable across machines and readable by an agent. If a machine doesn’t follow the sibling layout, its absolute path belongs in that machine’s local resolver — never committed here, since this page is published.

Why it matters to the series

NA1 is where the meta-question got its sharp answer: when the source is a weakly-grounded formal language (a bespoke bytecode VM), don’t read it cold — build a deterministic transpiler to a grounded language and let the model read that. vm_decompile.py (bytecode → C) is the existence proof.

It also radiated theses well outside game annotation — agent design, LLM grounding, transpilation — which is why it gets a crucible hub rather than a single home.

Theses it sparked

Tags

nes · 6502 · mmc1 · nobunagas-ambition · reverse-engineering · assembly