NES-konsol bygget i Qwen uden brug af træning
Vægtene er ikke trænet, men beregnet af en compiler. Modellen forudsiger CPU'ens arbejde ét token ad gangen, og testrammerne matcher en almindelig emulator præcist.
Læs i dit tempo
Kort
En NES-konsol er nu bygget ind i en sprogmodel, hvor modellen forudsiger CPU'ens arbejde ét token ad gangen, mens et lille program håndterer skærm og controller. Det viser, at en sprogmodel kan fungere som en computer uden træning, kun med beregnede vægte. Projektet virker med flere klassiske spil, men er langsomt, og man kan selv prøve det.
Begynder
Forestil dig, at en sprogmodel — den slags kunstig intelligens, der normalt skriver tekster — pludselig kan være en helt gammel spillekonsol. Det er præcis, hvad projektet nesformer på GitHub har lavet. Det har bygget Nintendos klassiske NES ind i en standard Qwen3.5-model: konsollens processor (den centrale chip, der regner instruktioner), dens 2 kilobyte arbejdshukommelse og selve spilkassettens program. Når du spiller, forudsiger modellen, hvad konsollens processor gør — ét lille skridt ad gangen, som en skakspiller, der tænker ét træk ad gangen. Et lille hjælpeprogram klarer resten: det tegner billedet på skærmen, læser controlleren og sender det signal, der kommer, når skærmen er tegnet færdig.
Det mest forbløffende er, at ingen har trænet modellen. Normalt lærer en sprogmodel af enorme mængder data, men her er alle vægtene — modellens indre talværdier — regnet ud af en compiler, et program der oversætter én slags instruktioner til en anden. Projektet bygger videre på Qwenputer af Divyansh Agrawal, som tidligere har kompileret to andre små computere ind i samme model. Tricket ligger i modellens hukommelse: Hvert af dens såkaldte DeltaNet-hoveder fører en tilstandstabel på 128 gange 128 felter, der opdateres ved hvert token — det vil sige ved hvert lille skridt i modellens tænkning. Én »nøgle« peger på præcis én række, en opdatering overskriver den, og en tilsvarende »forespørgsel« læser den tilbage. Tænk på det som et reolsystem, hvor hver hylde er en hukommelsescelle: Kassettens program, arbejdshukommelsen og processorens registre bor alle sammen i hylderne.
Hele maskinen er med. Processorens kerne dækker alle 151 officielle instruktioner, alle måder at finde data på, alle statusflag og stakken — processorens midlertidige huskeseddel. Den grafiske chip tegner billedet linje for linje med den rigtige farvepalet, og controllerne og lydchipens registre er også med. Spillets 32 kilobyte program gemmes endda to gange: én kopi til instruktioner og én til data. Resultatet er tjekket: I de medfølgende testspil matcher hver eneste billederamme en almindelig NES-emulator præcist, og alle processor-beregninger kommer fra modellen selv. Projektet viser et helt spil af Doug Fraker med titelskærm og første bane.
Men tålmodhed er et krav. Første gang tager det cirka 20 sekunder at kompilere motoren, og derefter tager én frame — ét enkelt billede — 1 til 6 sekunder. 600 frames svarer til 10 sekunders NES-tid. Vægtene fylder 933 megabyte, men kun 9,3 millioner af de 466,6 millioner parametre er ikke-nul, så de kan pakkes ned til 3,3 megabyte — som en bog, hvor næsten alle sider er blanke. Du kan selv prøve det med egne spil, så længe de bruger det simpleste kredskort, NROM — det gælder spil som Super Mario Bros., Donkey Kong og Excitebike. Selve spilfilen skal du dog selv skaffe, og spil på andre kort stopper med en besked.

En NES kører nu inde i en sprogmodel. Projektet nesformer på GitHub har lagt konsollens 6502-CPU, dens 2 KB arbejds-RAM og kassettens program-ROM ind i en standard Qwen3.5-model. Når du spiller, forudsiger modellen CPU'ens eksekveringslog ét token ad gangen. Et lille hostprogram klarer resten: det tegner billedet, læser controlleren og udløser vblank-afbruddet, signalet, der kommer, når skærmen er tegnet færdig.
Ingen har trænet vægtene. En compiler har regnet hver eneste ud. Projektet bygger videre på Qwenputer af Divyansh Agrawal, der tidligere kompilerede en CHIP-8 og en RISC-V-CPU ind i Qwen3.5-4B.
Hvert DeltaNet-hoved fører en tilstandsmatrice på 128 gange 128, som opdateres ved hvert token. En nøgle peger på præcis én række, en opdatering overskriver den, og en tilsvarende forespørgsel læser den tilbage. Hver række fungerer altså som en hukommelsescelle, og kassette, RAM og registre bor i rækkerne.
Hele maskinen er med. CPU-kernen dækker alle 151 officielle opcodes, alle adresseringstilstande, flag og stak. PPU'en, den grafiske chip, renderer scanline for scanline med paletten. Controllerne og lydchipens registre er også med, og de 32 KB program-ROM gemmes to gange: én kopi til instruktioner og én til data.
Resultatet er tjekket. I de medfølgende testspil matcher hver frame en almindelig 6502-emulator præcist, og alle CPU-tokens kom fra modellen. Projektet viser et helt spil af Doug Fraker med titelskærm og første bane.
Det kører dog ikke hurtigt. Første kørsel bruger cirka 20 sekunder på at kompilere motoren, og derefter tager én frame 1 til 6 sekunder. 600 frames svarer til 10 sekunder NES-tid. Vægtene fylder 933 MB, men kun 9,3 millioner af de 466,6 millioner parametre er ikke-nul, så de pakker ned til 3,3 MB.
Du kan selv prøve det med egne spil, så længe de bruger NROM-kortet, såsom Super Mario Bros., Donkey Kong og Excitebike. ROM'en skal du selv skaffe. Spil på andre kort stopper med en besked.
Det er uklart: Kilden er projektets egen README. At rammerne matcher en emulator og at alle CPU-tokens kommer fra modellen er udviklerens egen dokumentation, ikke uafhængigt bekræftet. Kildegrundlaget er afkortet ét sted, så den samlede køretid for 600 frames mangler.
Kilder
- A working Nintendo in ~1GB of Qwen weights github.com
Produktionshistorie
- Radar Signal ? af 100 · spredning 1 kilder
- Vurdering Nyheds 4/5 — Nintendo emulator kørende i ~1GB Qwen-vægte viser konkret, hvad lokale modeller kan — høj engagement og relevant for hardware/lokale modelle
- Skrevet Model: glm-5.3-flash · temperatur 0.4
- Overskrift 5 kandidater, valgt af chat.dk
- Korrektur 1 zen · 1 rettelser
- Korrektur 2 chatdk · 1 rettelser
- Vedtagelse ainews-auto-v4 · score 1.0865