I was eleven in the winter of 1999. Ocarina of Time had just landed on my shelf. A friend at school said his PC ran Nintendo 64 games. His uncle worked at Nintendo, he said. That was the joke, and nobody believed a word of it. Then I went over, and my Zelda booted on his monitor. Twenty-six years later I watched a thousand lines of Terraform appear on my screen, written by a model while I sat there. This post is about those two moments, and about the place where they meet.

1995 2000 2005 2010 2015 2020 2025 NESticle — Apr 1997 (first public build) NESticle ZSNES — Oct 14, 1997 ZSNES UltraHLE — Jan 27, 1999 UltraHLE ePSXe — Oct 14, 2000 ePSXe Dolphin — Apr 19, 2003 Dolphin bsnes — Oct 14, 2004 bsnes PCSX2 — Dec 25, 2008 (v0.9.6) PCSX2 JSNES — 2009 (Ben Firshman) JSNES higan — 2010 (byuu, evolved from bsnes) higan EmulatorJS — 2017 (libretro web frontend) EmulatorJS N64Recomp — Jul 2024 (Zelda 64: Recompiled) N64Recomp AKI Anvil — Sep 2026 (this site) AKI Anvil
Three decades of retro-console emulation and preservation, and the point where this site joins the line.

The UltraHLE moment

On January 27, 1999, two programmers going by Epsilon and RealityMan uploaded a 600 KB executable called UltraHLE. It ran Super Mario 64 on a Pentium II at playable framerates. The N64 was still a current-generation console — The Legend of Zelda: Ocarina of Time had only been on shelves for nine weeks — and now its biggest titles were running on a PC. Conventional wisdom said proper N64 emulation would take a decade. UltraHLE did it in a bedroom, and the binary was 600 KB.

The trick was a category change. Instead of decoding every MIPS R4300i instruction the N64 CPU runs, UltraHLE intercepted the high-level library calls the games made through libultra — Nintendo's own SDK. When a game asked the N64's RSP to draw a textured triangle, UltraHLE didn't simulate the RSP. It drew the triangle with OpenGL on the PC's GPU. Whole layers of CPU work evaporated. It was lossy, game-specific, and aggressively pragmatic — and that's exactly why it ran on a 1999 PC when cycle-accurate N64 emulation would take twenty more years to even begin to look credible.

The release itself was a flashpoint. Nintendo's lawyers were on the project within hours; the original distribution page was down within days. The binary survived anyway, the way binaries do — mirrored on a hundred FTPs, traded over IRC and Hotline, spread to bedrooms full of kids who watched their cartridges run on a friend's computer and quietly recalibrated their entire model of what software was allowed to do. Witchcraft was the only honest word for it, and for a while a site of mine carried that word as its name.

Ocarina of Time on that early UltraHLE was real but rough: title screens and the opening areas ran with graphical artifacts in v1.0.0, with later patches cleaning up the worst of it. Anyone who saw both Mario 64 and OoT on a PC in early 1999 wasn't imagining it — they were watching the front edge of the HLE wave land at home.

How it landed in one living room

I was eleven that winter. Ocarina of Time had just landed on my shelf as a physical cartridge, still in the afterglow of unboxing. A friend at school claimed his PC ran Nintendo 64 games. His uncle worked at Nintendo, he said. That is the oldest joke in any schoolyard, and it is why nobody believed a word he said about anything. Then I went over and saw Mario 64 on a monitor — impossible enough. Then he loaded Zelda, my Zelda, the cartridge sitting on my shelf at home, and it booted. The graphics glitched; I didn't care. The cartridge on my shelf was running on his PC. Because of the uncle nobody had believed him, and that made it hit all the harder when it was real.

UltraHLE lit the fuse. Project64 (1999), Mupen64 (2002), and a long tail of accuracy-first emulators came in its wake. The HLE instinct has aged interestingly: N64Recomp (2024) static-recompiles N64 ROMs into native x86 binaries that run faster than the original hardware. Same trick, twenty-five years on — intercept high, regenerate as native code, skip the cycles the silicon used to spend.

A chronology of the witchcraft

Three decades of public emulator releases, the consoles they cracked open, and the trick each one pulled. The timeline up top hits the headline beats; the table below fills in the ones that hovered just under the headline but moved the scene forward anyway.

YearProjectPlatformWhat it unlocked
1996NESticleNintendo / NESFirst widely-available DOS emulator that ran real-time NES games on a Pentium. Bloodlust Software's irreverent shareware turned NES preservation from theoretical to playable.
1997ZSNESSuper NintendoSub-frame-accurate enough to run Chrono Trigger and Final Fantasy VI. The PC suddenly had a better SNES than your SNES had.
1997MAME 0.1arcade hardware (all of it)Nicola Salmoria's framework chose preservation over playability. Game-by-game ROM dumps + cycle-faithful drivers = the only reason a 1985 arcade board still boots in 2026.
1999UltraHLENintendo 64High-Level Emulation of libultra calls. The N64 went from "a decade away" to "runs Mario 64 on a Pentium II" in one upload. Section above has the full story.
2000ePSXeSony PlayStationFirst PSX emulator to run a real swath of the library at full speed with plugin-clean audio/video. The CD-image era began here.
2001VisualBoyAdvanceGame Boy / GBC / GBAOne emulator covering Nintendo's whole handheld lineage. Save states + breakpoints made it a debugging tool, not just a player.
2003DolphinGameCube (later: Wii)Started as a GameCube target; Wii support followed in 2008. Open-source from day one, which is why it's still actively developed twenty-three years on.
2004bsnesSuper Nintendobyuu's accuracy-first SNES emulator. Slower than ZSNES on purpose — the goal was to match the silicon, not to play fast. The lineage that became higan + bsnes-hd.
2008PCSX2 0.9.6Sony PlayStation 2The release that took PS2 emulation from "runs the BIOS" to "runs Shadow of the Colossus." Compatibility leap of the decade.
2009JSNESNintendo / NES (browser)Ben Firshman's JavaScript NES emulator. The web platform's first credible "actually plays NES games" demo, and the proof point for every browser tool on this site.
2010higanmulti-system (cycle-accurate)byuu's umbrella for SNES + Game Boy + Game Boy Advance + Famicom + Mega Drive accuracy cores. Coined the term preservation-grade for emulators.
2017EmulatorJSmulti-system (browser)Web frontend around libretro cores compiled to WebAssembly. Internet Archive runs on top of this — "play this 1986 arcade ROM in your browser" became a one-line embed.
2024N64RecompNintendo 64Static-recompile a N64 ROM to a native x86 binary. Zelda 64: Recompiled ships a Windows EXE built from the original cartridge bytes and runs faster than the N64 ever did.
2026AKI AnvilNintendo 64 (browser)Drop one of the six AKI wrestling cartridges into a browser tab and read, change and rebuild it. No install, no binaries, no sign-in, nothing leaves the machine.
Public release dates approximate where exact dates vary between sources; cited as month / year when the original archive timestamps survive.

The second moment

January 2025. I had used language models for a while by then, for first drafts and for the long boring middle of things. This was different. I asked Claude Sonnet 3.5 for infrastructure code, and a thousand lines of Terraform appeared on my screen while I watched. Not a snippet to fix up. A thousand lines, in front of my eyes.

It was the living room again. A thing everyone had told me was years away was running on the screen in front of me, and the feeling was exactly the one from 1999. I recognised it at once, and I knew what it meant for the eighty percent where hyperfocus usually leaves a project: the scaffolding, the first drafts, the middle. That part no longer has to be the part where things die.

Now it all comes together

The console from the first moment was the Nintendo 64. The way of working from the second is how the tools on this site get built. The place where both land is the AKI Anvil: it opens the six AKI wrestling cartridges — World Tour, VPW64, Revenge, WrestleMania 2000, VPW2 and No Mercy — in a browser tab, reads every file, plays every animation, and writes a changed cartridge back out for a flash cart. The rules UltraHLE's kids would have written for it:

  • No install. A web page, a tab, your bytes in it.
  • No binaries. One HTML file, plain JavaScript, no runtime to trust.
  • No sign-in. The cartridge comes from your disk and stays in your browser; nothing leaves your device.

The cartridge on my shelf ran on a friend's PC in 1999. Twenty-seven years on, the same cartridge opens in a browser tab, and the tool that does it was built the way the second moment showed me: the model writes the long middle, and I measure the last five percent against the real thing. The pin counts, the roster ranking, the music and the move formats on this site are those measurements.

The feeling, twice

Once at eleven, watching a cartridge boot where it had no right to. Once, twenty-six years later, watching a thousand lines appear where I had expected to type them. The site is what happens when both are true at the same time.