01 · Overview

F-Zero X on 3DS — Old and New, native, with the 64DD Expansion Kit

How G-Diffuser, the PC port of the F-Zero X decompilation, got onto the Nintendo 3DS: one person directing, Claude agents writing all of the code, 11 weeks from first research to multiplayer.

The numbers

60fps
New 3DS, 3D race: all 120 one-second windows at 59–61
60fps
Old 3DS, 3D race: median window; 85% at 60, tenth percentile 56
22.59 B
tokens across all sessions and agents, 08-11 to 10-26
$19,559
at API list prices ($15,567 billing cache writes as logged)
777
human prompts; 588 subagents and 1,288 workflow agents did the work
181k
lines of port code under port/3ds, tests included

Hardware: card-6 test logs, build ba0692e, 10-26 (1P vs CPU field, 3D on); how the numbers got there is on Road to 60. Tokens and cost: session transcripts to 10-26, method on Cost.

On hardware

v1.0 on a New 3DS: Select Mode with the Expansion Kit entries, the G-DIFFUSER idle view on the bottom screen
v1.0, New 3DS: the Expansion Kit's Select Mode (COURSE EDIT, CREATE MACHINE); the bottom screen is DASH's idle view.
v1.0 on a New 3DS: a race on the top screen, the DASH race dashboard on the bottom
v1.0, New 3DS, mid-race: DASH on the bottom screen with energy, position, lap times and the course map.
v1.1.0 work, emulator: a four-player Mute City race at the countdown, with the DASH showing standings and the NET indicator on the bottom screen
v1.1.0 work, multiplayer, emulator capture (not a photo of hardware): a four-player race on Mute City at the countdown. Each console shows its own racer; the DASH shows the standings and the NET indicator.
v1.1.0 work, emulator: Select Mode with VS Battle chosen and the bottom-screen MULTIPLAYER menu offering Play Nearby and Play Online
v1.1.0 work, emulator capture: picking VS opens the MULTIPLAYER menu on the bottom screen, nearby (local wireless or same Wi-Fi) or online with a room code.

The clips and photos below are from v0.9 (2026-09), before DASH replaced the debug console on the bottom screen.

open clip
v0.9: Grand Prix on a New 3DS. The bottom screen is the port's debug menu: 59.8 fps, heap, build id.
open clip
v0.9: handheld, mid-race. Native 60 Hz pacing; no interpolation.
F-Zero X title screen on the New 3DS
Title screen, launched from the Homebrew Launcher (.3dsx).
Select Mode screen
Select Mode.
Select Machine screen
Select Machine.
Blue Falcon stats
Blue Falcon.

What was built

Three console builds from one source tree:

Each installs from the HOME menu (.cia) or the Homebrew Launcher (.3dsx). No ROM or disk image ships: players extract their own.

The whole game

  • Grand Prix, Time Attack, Practice, Death Race, VS and the machine screens.
  • With the Expansion Kit: Course Edit and Create Machine.

Speed

  • New 3DS: 60 fps races in 2D and 3D.
  • Old 3DS: 2D races at or near 60; 3D races mostly hold 60.
  • The heaviest Old 3DS courses can still drop to 30 in 3D.

The console, used properly

  • Stereoscopic 3D on the slider.
  • Music and effects on the DSP.
  • A bottom-screen dashboard (DASH).
  • Clean HOME, sleep and power-off.

Multiplayer (v1.1.0 work)

  • 2–4 players, each on their own console.
  • Nearby or online.

Both consoles draw through the same native renderer by default. The New 3DS's first-phase render-thread path is still built in as an option; Frontier and Road to 60 cover it.

The stack

How it went

The first phase (08-11 → 09-03) ported the game to the New 3DS. The second (09-07 → 10-19, not originally planned) brought it to the Old 3DS through a native renderer and shipped v1.0.0. Then a week of v1.1.0 work.

v0.9 = New 3DS only (first phase)v1.0 = Old 3DS (second phase, the native fork)v1.1 = polish and online multiplayer
DatesStageWhat happened
08-11 → 08-14v0.9From research to a raceFeasibility dossier, a plan for a team of agents, five parallel foundation streams, six boot bugs; first race at 12–20 fps in the emulator.
08-20 → 08-22v0.9Playable, then on a consoleFog, HUD, livery, shadow and sky fixed; menus from 27 to 60 fps; first hardware run 08-21 ("wow it runs amazing"), audio the same evening.
08-27 → 08-28v0.9Product gradeStereo 3D armed, touch menu, rival detail; a GPU vertex-transform moonshot built and shelved; README and release package.
09-01 → 09-02v0.9Lifecycle and the last big leverHOME crash and close-from-HOME hang fixed; per-frame display-list re-scanning replaced by memoized results; the LOCKED-60 campaign launched.
09-02 → 09-03v0.9Multi-coreRender thread on core 2, one frame ahead; median 59.6 fps with 53% of frames at the cap. v0.9.0.
09-07 → 09-29v1.0Make it fitOld 3DS restarted; build squeezed into its 64 MB app region. First boot on a real Old 3DS: about 10 fps.
09-29 → 09-30v1.0Find the real costsNarrower audio lock (−20 ms a frame); frame skipping ends the slow motion; a retained renderer wins in the emulator only.
09-30 → 10-01v1.0The probeHardware counters: the limit is instruction-cache misses, not instruction count. A working pose-replay fallback is shelved: "we should go for a real 60!"
10-01 → 10-02v1.0Native rendererSmall race loops sized to the 16 KB instruction cache. 2D Grand Prix at a 16.5 ms median frame.
10-03 → 10-08v1.03D at 60Per-eye resubmit: 59–60 fps in 3D on most courses; the heaviest can fall to 30.
10-08 → 10-19v1.0ReleaseExpansion Kit verified tick-for-tick, released for New 3DS only (too slow on Old); DASH ships; adversarial review; v1.0.0.
10-20 → 10-26v1.1After v1.0.02–4 player multiplayer; one GPU submission for both eyes (Old 3DS 3D menu 40.2 → 44.6 fps); HOME-close lock fixed.

See Agentic workflow for how the second phase was run and The road to 60, all over again for the Old 3DS campaign, card by card.

Read on

Every number on these pages has a source: git history, the research documents under docs/research/, the hardware logs, or the session transcripts the Cost page counts. Where a value is an estimate (the dollar figures, which apply published API list prices to exact token counts), the assumption is stated next to it.