2026-10-27 · ← News
Gemini wrote a Game Boy emulator for a conference badge, but real games found the hardest bugs
Steve Francia used Gemini to get NES and Game Boy Color emulators running on the GitHub Universe badge within a 16.6 ms frame. The model drafted the loops, while the human owned the architecture, measured on hardware and hunted bugs in Zelda and Pokémon.
The image could not be loaded.
At this year's GitHub Universe, the badge around your neck plays Zelda. Steve Francia, who previously led the Go language at Google, used Gemini to get an NES emulator running on it, and then Game Boy and Game Boy Color too. Simon Willison, who hacked a similar badge last year, flagged the project.
An RP2350 badge runs Link's Awakening at 60 frames
The badge is called Badger. It has a dual-core RP2350 chip clocked at 230 MHz, a 320 × 240 color display, 16 MB of flash and 8 MB of PSRAM. It runs MonaOS 4.0, an environment built on MicroPython. Francia got his a few days before the event, with a card that read "hack this".
The fastest route would have been flashing a ready-made C emulator. Francia says that takes about twenty minutes, but the badge would lose its apps, Bluetooth contact exchange and the infrared scavenger hunt around the venue. So he wanted the emulator as an ordinary app inside MicroPython. Plain MicroPython manages roughly 100,000 to 200,000 instructions per second, though, and an NES needs about ten times that.
The fix was Viper mode, which compiles typed Python straight to ARM machine code. The first NES emulator is about 1,100 lines and, according to its author, plays Zelda at around 32 frames per second. Game Boy Color was harder: its SM83 processor has 512 instructions against the NES's 56. Even so, Francia reports CPU emulation under 12 ms and rendering under 3 ms, so the loop fits within 16.6 ms per frame at 60 Hz. You play on touch buttons after flipping the badge upside down.
The model wrote the loops, the human decided and measured
More interesting than the game itself is the division of labor, which Francia describes unusually precisely. He says Gemini 4 Argon drafted the inner loops from prompts describing the 6502 processor, the graphics chip and memory bank switching. Francia set the architecture around four memory pointers, shaped the Viper kernels and measured every number on real hardware over USB. The remaining bugs, he writes, are the kind you only get from running it.
On the Game Boy that was literally true. Pokémon Crystal booted to empty frames because the game points its stack pointer into ROM to copy fonts quickly. Francia admits he did not know the hardware even allowed that. Link's Awakening DX split the hero in half for one frame when walking down, because the emulator did not account for Game Boy Color's double-speed mode. An attempt to overclock to 300 MHz froze the badge entirely.
For developers there is a practical pattern here. AI helped someone with no Game Boy hardware background reach a working core in a fraction of the time. The real test, though, was the 16.6 ms budget and a stack of cartridges from the nineties that exposed every wrong assumption without mercy.
The author does not say how much code Gemini wrote
The write-up does not reveal what share of the code came from the model or how much Francia rewrote. Nor is there any record of how many attempts failed before a loop passed. Without that, the project is a fine showcase by an experienced engineer rather than proof that a model can write an emulator on its own.
The project has ordinary limits too. The badge has no speaker, so the NES port runs silent. The code is open source, but the author ships no games, and everyone has to load their own legally obtained ROMs. For a conference badge it is a toy for a few days, not a platform.
Other badge hackers will show whether the Viper tricks catch on
Francia published the repository and five tricks he carried back from the Game Boy into the NES emulator, which sped that one up too. The first signal will be whether other badge owners or the MicroPython community pick them up.
The second signal concerns the way of working. If similar projects start publishing prompt logs and the model's share of the code, as Willison did with Claude Code for last year's badge, it will become possible to compare where AI really saved weeks and where it merely moved the work into debugging.
Lilith's verdict
Gemini wrote a Game Boy that passed every prompt, and then Professor Oak showed up with empty frames. Anyone who wants to know whether AI code works needs, next to the model, a quarter-century-old cartridge that never reads the documentation and never forgives.