Game Annotation Series

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

Two axes, deliberately not one folder tree

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:

The map

Node What it holds
comparisons/ Adventure · Mappy · Utopia · M.U.L.E. — both arcs, one monorepo
koei/ the shared KOEI toolchainkoei-nes + koei-snes, the engine reversal, the portable-VM finding
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.

The meta-question

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.

Tags

6502 · nes · snes · assembly · reverse-engineering · games · llm-limitations