System-level deep-reads of classic game source — used as a stress test for LLM interpretation of low-level code. Existing disassemblies carry literal per-line comments (“Get the direction wanted”) but rarely explain what the code does at a system level: the data structures, state machines, hardware tricks, and design intent. This series writes that higher layer.
Links: LLM Grounding Problem · Transpilation as a Grounding Strategy · Planner-LM Composites · LLM Agents Across Strategic Games · project SDK → projects/CLAUDE.md
Logical name: game-annotation — github.com/chrisaacson69/game-annotation, cloned as a sibling (../game-annotation). The monorepo behind this whole tree; the per-title repos below are separate packages that depend on it.
The series grew two different shapes, and forcing either into the other would sever the valuable edges. Per Author Web, Derive Hierarchy, both stay as links:
| Node | What it holds |
|---|---|
| comparisons/ | Adventure · Mappy · Utopia · M.U.L.E. — both arcs, one monorepo |
| koei/ | the shared KOEI toolchain — koei-nes + koei-snes, the engine reversal, the portable-VM finding |
| emu-harness/ | the emulator harness — drive Mesen 2 / BizHawk from Python; backends × machines as plug-ins, game adapters build on it |
| nes/ | 6502 + PPU substrate → tools/ + 7 title repos |
| snes/ | 65C816 substrate → tools/ + 2 title repos |
| civ-revolution/ | the next title by a different method — no decompilation available, so game-design analysis |
Why koei/ is a peer of nes/ and snes/ rather than a child: the engine is one thing carried
across two consoles, so filing the toolchain under either would split it — and would strand the
portable-VM finding, which exists only because both sides were reversed.
How well can an LLM interpret vintage assembly from a cold read? Assembly is the inverse of natural language — pure mechanical structure, no rhetoric, no narrative, no social cues. The seven-game LLM study named three structural failures (action bias, absent mechanical modeling, rhetorical contagion); assembly isolates mechanical modeling, so the failure mode would be unambiguous. It’s also a control case for the verification-layer thesis: the assembly source is the accumulated state, with no separate ground truth to drift from.
The answer the series produced: when the source is a weakly-grounded formal language (a bespoke
bytecode VM), the move isn’t “read it cold” — it’s build a deterministic transpiler to a grounded
language and let the model read that. vm_decompile.py (bytecode → C) is the existence proof, and
COBOL/legacy modernization is the real-world payoff. See
Transpilation as a Grounding Strategy.
6502 · nes · snes · assembly · reverse-engineering · games · llm-limitations