Kompilierung einer NES-CPU in die Gewichte eines Qwen3.5-Sprachmodells
Ein neues Projekt kompiliert den 6502-Prozessor des Nintendo Entertainment Systems direkt in die Parameter eines Standard-Qwen3.5-Modells, sodass Spiele ohne Training ausgeführt werden können.
Automatisch aus dem englischen Original übersetzt.
Der Entwickler David Breunig hat nesformer veröffentlicht, ein Projekt, das den 6502-Prozessor des Nintendo Entertainment Systems direkt in die Gewichte eines standardmäßigen Qwen3.5-Sprachmodells kompiliert. Diese Arbeit, die Ende Oktober 2026 veröffentlicht wurde, zeigt, dass ein großes Sprachmodell Binärcode ausführen kann, indem es seinen internen Zustand als Maschinenspeicher behandelt, anstatt Verhalten aus Daten zu lernen.
Was passiert ist
Das Projekt baut auf früheren Arbeiten namens Qwenputer auf, bei denen einfachere Architekturen wie CHIP-8 und RISC-V in Qwen3.5-4B kompiliert wurden. Nesformer geht einen Schritt weiter, indem es den MOS 6502-Prozessor ins Visier nimmt, das Herzstück des NES. Anstatt das Modell auf Gameplay-Aufnahmen oder Assemblercode zu trainieren, verwendete Breunig einen Compiler, um jedes einzelne Gewicht im Checkpoint zu berechnen. Das resultierende Modell ist ein standardmäßiger Hugging-Face-Checkpoint, der mit Qwen3_5ForCausalLM.from_pretrained geladen wird und keine benutzerdefinierten Code zur Initialisierung erfordert.
Das Repository enthält eine Befehlszeilenschnittstelle (CLI), mit der Benutzer NES-ROMs ausführen können. Bei der Ausführung erzeugt das Modell einen Token-Stream, der das Ausführungsprotokoll der CPU darstellt. Ein separates Host-Programm übernimmt die Peripherie-Hardware, wie die Picture Processing Unit (PPU) für Grafiken und die Eingaben der Controller. Das System führt Test-ROMs wie Thwaite und Full Game erfolgreich aus und erzeugt frame-perfekte Ausgaben, die mit traditionellen Emulatoren übereinstimmen. Es unterstützt auch Super Mario Bros., sofern der Benutzer die ROM-Datei bereitstellt.
Wie es funktioniert
Der Kernmechanismus basiert auf der Gated-DeltaNet-Architektur innerhalb des Qwen3.5-Modells. In diesem Setup fungiert die interne Zustandsmatrix des Modells als Random-Access-Speicher (RAM) des Computers. Jede Zeile der 128x128-Zustandsmatrix wirkt als Speicherzelle. Durch die Verwendung von One-Hot-Schlüsseln und Abfragen kann das Modell spezifische Zeilen überschreiben, um Daten zu schreiben, oder sie lesen, um Werte abzurufen. Dies ermöglicht es, dass sich die 2 KB Arbeits-RAM, die 32 KB Programm-ROM und die CPU-Register vollständig in den Gewichten und dem Zustand des Modells befinden.
Der Kompilierungsprozess bildet die Logikgatter und Opcodes des 6502 auf die Ebenen des Modells ab. Die Schaltung erstreckt sich über sieben Gated-DeltaNet-Ebenen. Die erste Ebene verankert den Programmzähler und speichert Flags, während nachfolgende Ebenen das Abrufen von Anweisungen, die Adressdekodierung und arithmetische Operationen handhaben. Die letzte Ebene sagt das nächste Token im Ausführungsverlauf voraus. Da die Gewichte mathematisch aus dem Schaltplandesign berechnet werden, sind sie dünn besetzt: Von 466,6 Millionen Parametern sind nur 9,3 Millionen ungleich Null, was dazu führt, dass der Checkpoint auf nur 3,3 MB komprimiert werden kann.
Das Host-Programm verwaltet alles außerhalb der CPU. Es injiziert Tokens für nicht maskierbare Interrupts (NMI) beim VBlank und stellt Eingabedaten bereit, wenn die CPU aus I/O-Registern liest. Um die Geschwindigkeit zu steuern, erkennt das Host-Programm Idle-Loops, in denen die CPU auf den VBlank wartet, und überspringt redundante Iterationen, indem es den Takt direkt zum nächsten Ereignis vorrückt. Diese Optimierung reduziert die Anzahl der Tokens erheblich, obwohl das System immer noch etwa 150 bis 290 Mal langsamer läuft als reale Hardware.
Wichtige Details
- Das Modell verwendet die Qwen3.5-4B-Architektur mit 7 Gated-DeltaNet-Ebenen und einer versteckten Größe von 768.
- Nur 9,3 Millionen der 466,6 Millionen Parameter sind ungleich Null, was zu einem komprimierten Checkpoint von 3,3 MB führt.
- Das System unterstützt NROM-Kartuschen (iNES-Mapper 0), aber noch keine Bank-Switching-Mapper wie MMC1 oder MMC3.
- Die Ausführungsgeschwindigkeit reicht von 10 Tokens pro Sekunde mit Standard-Transformers-Bibliotheken bis zu 1.650 Tokens pro Sekunde mit einer numba-kompilierten Engine.
- Das Host-Programm übernimmt die PPU-Rendering-Prozesse und die Controller-Eingaben und injiziert die erforderlichen Tokens in den Kontext des Modells.
- Nicht offizielle Opcodes und Sprünge in den RAM führen dazu, dass die Emulation anhält, da die Schaltung nur offizielle 6502-Anweisungen implementiert.
Warum es wichtig ist
Für KI-Ingenieure und Forscher bietet nesformer ein konkretes Beispiel dafür, wie Transformer-Interna für deterministische Berechnungen zweckentfremdet werden können. Es stellt die Annahme infrage, dass große Modelle auf riesigen Datensätzen trainiert werden müssen, um komplexe Aufgaben auszuführen. Indem Logik direkt in die Gewichte kompiliert wird, können Entwickler Modelle erstellen, die spezifisches Verhalten garantieren, und bieten damit einen Weg zu überprüfbaren und transparenteren KI-Systemen. Dieser Ansatz trennt den „Denk“-Teil des Modells vom „Zustands“-Management und verdeutlicht, wie Aufmerksamkeitsmechanismen Speicherzugriffe nachahmen können.
Für Softwareentwickler, die sich für Emulation interessieren, hebt dieses Projekt die Kompromisse zwischen Genauigkeit und Leistung hervor. Während das Modell bit-perfekte Ergebnisse für unterstützte Spiele liefert, ist der Rechenaufwand im Vergleich zur traditionellen Emulation enorm. Allerdings eröffnet die Fähigkeit, ausführbaren Code innerhalb eines Standard-LLM-Checkpoints auszuführen, neue Wege, um Legacy-Softwarelogik in moderne KI-Pipelines zu integrieren, ohne externe Interpreter oder virtuelle Maschinen zu benötigen.
Was Sie tun können
- Installieren Sie die erforderlichen Abhängigkeiten, einschließlich
torch>=2.6undtransformers>=5.22, um den Checkpoint mit Standardbibliotheken auszuführen. - Verwenden Sie den Flag
--showin der CLI, um Spielbilder direkt in Ihrem Terminal zu rendern, falls es 24-Bit-Farbe unterstützt. - Führen Sie den Befehl
checkaus, um die Ausgabe des Modells mit einer Referenz-CPU-Implementierung zu vergleichen und die Korrektheit zu überprüfen. - Stellen Sie Ihre eigenen NROM
.nes-Dateien bereit, wie Donkey Kong oder Excitebike, um die Kompatibilität mit verschiedenen Spielen zu testen. - Experimentieren Sie mit der Skriptoption
--buttons, um Controller-Eingaben zu automatisieren und bestimmte Spielsequenzen zu testen. - Untersuchen Sie die Datei
nesformer/spec.py, um die Token-Familien und die Kodierung jeder CPU-Anweisung zu verstehen.



