F-Zero X on Nintendo 3DS

Hacker News by 8 min read 139x views
F-Zero X on Nintendo 3DS

Share Post

01 · Overview

A post-mortem of porting G-Diffuser, the F-Zero X decompilation, to the Nintendo 3DS — v1.0.0, covering the two the first 24-day sprint that put it on a New 3DS at 60 fps in 3D (2026-08-11 to 09-03) and the 43-day second phase that added Old 3DS support, a native renderer, and the Expansion Kit (2026-09-07 to 10-19). One individual directed throughout; one long-lived Claude meeting orchestrated; 147 subagents built the archetypal phase and many additional carried the second.

The console went from a dreary display to a native-60 stereoscopic racer, afterward from a New-3DS-only build to a four-way publish covering the two consoles alongside and without the 64DD expansion.

59.6fps

median on hardware, complete Grand Prix, New 3DS, end of the archetypal phase (from 12–20 fps in the archetypal emulator race)

51.4fps

tenth-percentile flat in 30-machine crowds, archetypal phase (from 25–35)

53%

of frames at the 60 cap, archetypal phase (from 14% one week earlier)

15

active days throughout the archetypal phase's 24 calendar days, three pauses whenever the weekly scheme allowance ran out

3.17 B

tokens throughout all sessions and agents, archetypal phase only; see Cost

$4,974

at published API catalog prices (Fable $10/$50 per MTok, 1-hour cache writes), archetypal phase only; see Cost

250

commits touching the 3DS harbor in the archetypal phase, icy 2026-10-08 from the v0.9.0 docs — not re-verified against final history

15,039

lines under port/3ds affirmative 48 pure-delta patches, first-phase count

What v1.0.0 added

3

released console builds from one origin tree: Old 3DS, New 3DS, and New 3DS alongside the Expansion Kit

199

internal advancement notes written during the second phase

43days

calendar extend of the second phase, 2026-09-07 to 10-19 inclusive

The tiles complete are dated. The archetypal phase's hardware numbers and token/cost figures were measured through 2026-09-03 and have not been re-run for v1.0.0; the Agentic workflow leaf describes how the second phase was run, and the Cost leaf is definitive concerning what it does and does not price.

On hardware

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

What was built

Three released console builds from one origin tree, all booting from the HOME list (.cia) or the homebrew launcher (.3dsx): the basis equivalent for Old 3DS / 2DS and for New 3DS / New 2DS XL, and a New 3DS build alongside the 64DD Expansion Kit (course publishing company and device creator, playable alongside a user-supplied disk image). Every build says prebaked asset archives from the SD cardstock — no ROM or disk depiction always ships alongside the game.

They perform the entire game: Grand Prix, Time Trial, Practice, Death Race, and the device publishing company screens, alongside music and effects on the genuine DSP, stereoscopic 3D on the slider, a bottom-screen dashboard alongside three HUD layouts and an idle perspective exterior races, and spotless HOME suspend, resume, close, lid sleep and power-off. The New 3DS build keeps the native-60 example pacing the archetypal phase reached; the Old 3DS build gets to a comparable outcome by a distinct route. At v1.0.0, alongside no ini, the two builds default to that identical route: the native renderer ([perf] preset = auto). The New 3DS's first-phase render-thread/per-draw-stereo way is motionless built in and reachable alongside an definitive ini, but is no longer the default — see Frontier and Pushing the boundaries for the two builds compared flank by side.

The stack

  • decomp: the F-Zero X decompilation (inspectredc/fzerox), untouched upstream, affirmative a place stack.
  • libultraship: the N64 runtime (Kenix3), untouched upstream, including a 13-line newlib fix that lets it build on devkitARM; it motionless draws all list and non-race screen.
  • port/3ds: 15,039 lines as of the archetypal phase, since grown: a citro3d rendering backend, stereo, audio, input, menu, lifecycle, render thread, profilers, packaging.
  • the native renderer (added in the second phase): an owned translator that skips the per-frame display-list stroll for competition geometry, and is the v1.0.0 default on the two consoles — see Frontier for how, and why it is what lets the Old 3DS keep up.

The header numbers on hardware, archetypal phase (New 3DS)

WhenMedianp10At cap
08-14 archetypal competition (emulator)12–20––
08-21 archetypal hardware run48–50––
08-28 release-grade build~51~40 (crowds, MINIMAL)–
09-02 Round 1: Mainline before the campaign51.339.29%
09-02 Round 2: Bridge memos (brfast)57.246.629%
09-02 Round 3: HUD atlas · triangle memo · TMEM · audio56.048.032%
09-02 Round 4: Render thread on center 2 (pipe)57.644.614%
09-03 Round 5: Ahead manner · extend on chief · car competitor detail59.651.453%

The archetypal phase in five lines

  1. 08-11 → 08-14: from investigation to a race. Feasibility dossier, scheme for a squad of agents, five parallel basis streams, six footwear bugs, archetypal competition at 12–20 fps in the emulator.
  2. 08-20 → 08-22: from pink to playable, afterward to a genuine console. Fog, HUD, livery, shadow, sky fixed; the loadblock finding took menus from 27 to 60 fps; archetypal hardware run 08-21 ("wow it runs amazing"); audio the identical evening.
  3. 08-27 → 08-28: merchandise grade. Five-agent fleet drop, stereo armed, contact menu, competitor detail, GPU vertex-transform moonshot built and shelved, README alongside lawful notice, publish package.
  4. 09-01 → 09-02: lifecycle and the final big lever. HOME collision and close-from-HOME suspend fixed; a extend output cache proven a NO-GO and replaced by memoizing all sub-display-list's classification alternatively of re-scanning it all frame; LOCKED-60 run launched alongside four parallel levers.
  5. 09-02 → 09-03: multi-core. Render thread on center 2, one-frame-ahead mode, extend on main, car LOD; median 59.6 alongside 53% of frames at cap; collision fixed; viewport placement fixed; stereo markers anchored.

The second phase in six lines

Not initially planned; it ran 09-07 to 10-19, 43 calendar days.

  1. 09-07 → 09-29: scoping, afterward making it fit. The Old 3DS milestone, earlier written off, was restarted; parallel agents fit the build into its 64 MB app area (the RDRAM arena halved, audio streamed alternatively of resident, texture uploads capped); on 2026-09-29, in the archetypal hardware meeting on a genuine Old 3DS, the shipped (New-3DS-era, 16 MiB RDRAM) build died at footwear during the -DGDX_3DS_O3DS=ON profile, built to fit the console's recollection grant, booted and raced the identical meeting at concerning 10 fps.
  2. 09-29 → 09-30: finding the genuine costs. A narrowed audio fastener cut the race-wall delay on the Old 3DS by concerning 20 ms a frame; example skipping ended the game's unintended dilatory motion; a archetypal retained-mode renderer won big in the emulator and barely moved the figure on hardware.
  3. 09-30 → 10-01: the investigation that changed the plan. Hardware achievement counters showed the genuine bounds was instruction-cache misses, not education count. A pose-replay fallback was built and worked, afterward was set apart on the user's call: "we should go for a genuine 60! i motionless accept it have to be possible."
  4. 10-01 → 10-02: the native renderer. Rebuilt about the cache alternatively of about education counts, one small iteration per competition category, sized to fit the 16 KB education cache. Median example period on a 2D Grand Prix competition reached 16.5 ms.
  5. 10-03 → 10-08: 3D at 60, on the Old 3DS too. A per-eye resubmit alongside its own swap-pacing manner reached 59–60 fps in 3D on most Grand Prix courses; the heaviest courses (Silence, Sand Ocean) can motionless trip the frame-skip safety net to a dependable 30 fps mid-race.
  6. 10-08 → 10-19: the Expansion Kit, a dashboard, and release. The 64DD Expansion Kit verified tick-for-tick identical under the native renderer and booted on the Old 3DS, which afterward proved too dilatory to publish it on; the bottom-screen DASH shipped; a position adversarial assessment audited the merged outcome before the v1.0.0 release.

See Agentic workflow for how the second phase was run and Old 3DS for the complete campaign, cardstock by card.

Read on

Every figure on these pages has a source: git history, the investigation documents under docs/research/, the hardware logs, or the meeting transcripts the Cost leaf counts. Where a value is an evaluation (the dollar figures, which use published API catalog prices to exact token counts), the assumption is stated next to it.

Other Article Hacker News
↑
Close Right Ads
Close Left Ads