Skip to content

FCEUX

The NES emulator built from its own forks

FCEUX is an open-source NES, Famicom and Famicom Disk System emulator first released in August 2008. It merged the many branches of FCE Ultra, itself grown from Bero's FCE of the late 1990s: one branch added the movie recording that tool-assisted speedruns need, others added a debugger and ROM-hacking tools. With Lua scripting and, from 2012, the TAS Editor, it became a standard tool for making tool-assisted runs of NES games.

A tool-assisted speedrun of an NES game, made in FCEUX, is a text file. After a short header naming the ROM and its checksum, each line records the buttons held on each controller for one frame, a sixtieth of a second on an NTSC console. Nobody plays it in one sitting. The author records a few frames, loads a save state, tries again, and keeps the best attempt; the header even stores a “rerecordCount” of how many times they went back. Played back, the file drives the emulator through the game exactly as it was recorded.

FCEUX was not designed from a blank page. It is the reunion of an emulator that had split into a family of forks, each built for a different group of users. Its own description is plain about the result: “An open source NES Emulator for Windows and Unix that features solid emulation accuracy and state of the art tools for power users. For some reason casual gamers use it too.”

Fast facts

  • Emulates: NES, Famicom, Famicom Disk System and the Dendy, in NTSC, PAL and a hybrid mode.
  • First release: FCEUX 2.0.0, 2 August 2008.
  • Origins: Bero’s FCE, then Xodnizel’s FCE Ultra (from 1998) and its branches.
  • Tools: debugger, trace logger, hex editor, code/data logger, nametable and PPU viewers, Lua scripting, movie recording and the TAS Editor.
  • Licence: GNU GPL version 2; FCE Ultra moved to the GPL in 2002.
  • Latest numbered release: 2.6.6, 26 August 2023, with newer automatic builds.

FCE and FCE Ultra

The project’s version history starts with a programmer called Bero, who wrote an NES emulator known as FCE, a name “apparently meant only to serve as a temporary name”. Xodnizel first ported it to Linux, then started again from Bero’s source code under MS-DOS, and released FCE Ultra Beta 1 at the end of November 1998. Ports followed: Linux from version 0.18 and Windows from 0.25. The source code of version 0.40 came out on 12 November 2000 under a short licence saying “This software is freeware. You can use it non-commercially.” Version 0.80, in June 2002, moved FCE Ultra to the GNU General Public License.

Then development appeared to stop, and the homepage and forums were taken down. The last binary release was 0.98.12 in August 2004. Anthony Giorgio and Mark Doliner revived it in March 2006.

The forks

Because the code was open, other programmers had been building their own versions for years:

  • FCEU rerecording. A programmer called blip added movie recording with rerecording to FCE Ultra 0.98.10, “for the purpose of creating Tool-Assisted Speedruns”. Later versions added “bullet proof” recording, a read-only mode and a memory watch; nitsuja and luke made 0.98.16 in 2006, and in 2008 mz, maximus, adelikat and nitsujrehtona carried the line on to 0.98.28.
  • FCEUD, FCEUXD and FCEUXDSP. In 2002 Parasyte added a debugger and a PPU viewer and called the result FCEUD. From January 2004 bbitmaster built FCEUXD on top of it, with a trace logger, a hex editor, a nametable viewer, a code/data logger, an inline assembler and a Game Genie code encoder and decoder. In 2006 sp extended those tools again as FCEUXDSP, and a further branch, FCEUXDSP CE, added a “text hooker” tool. The history page notes that “CE” was “a play on the excessive acronyms and branches”.
  • FCEU-mm. CaH4e3’s “mappers modified” build added support for many more cartridge boards, including unlicensed ones.

FCEUX brought these together. The project began in 2006 under zeromus and rheiny, and by the August 2008 release the team also included mz, adelikat, nitsujrehtona, maximus, CaH4e3, qFox, punkrockguy318 and Sebastian Porst. FCEUX “contains all features and enhancements from FCE, FCE Ultra, FCEU rerecording, FCEUXD, and FCEUXDSP as well as many new mappers from FCEU-mm”. Speedrunners, ROM hackers and ordinary players could now use the same program.

Tools for tool-assisted runs

Tool-assisted speedruns are made in emulators with save states and frame-by-frame control, and published as demonstrations of what a game allows, not as feats of live play (see speedrunning). FCEUX gives the author frame advance, movie recording with rerecording, an input display, a lag counter for frames on which the game falls behind, and a memory watch for following values such as a character’s position.

Lua scripting arrived with the first releases. The changelog for August 2008 already records fixes to “emulua” and new functions such as memory.readbyterange. A script can read the game’s memory each frame, draw on the screen and press buttons, so an author can display a hidden speed value or test many input patterns automatically.

The TAS Editor, written by AnS and shipped in FCEUX 2.2.0 on 27 November 2012, changed the way runs were made. Its manual calls it “an Integrated development environment dedicated to TASing” and says that working in it “resembles both interactive programming and drawing notes by mouse in a music editor”. Instead of recording and rerecording, the author edits a “Piano Roll” of inputs, one row per frame, by clicking. Behind it, a “Greenzone” automatically collects a save state for every emulated frame, so the author can jump to any point and replay a change at once.

TASVideos, which publishes these runs, calls FCEUX “a popular choice for tool-assisted speedruns”. It also notes that “BizHawk has more accurate emulation, but both are acceptable”.

Accuracy

FCEUX does not claim to be the most exact NES emulator. Its developers did work on the hardware model: in June 2009 the changelog records fixes to the sound core and CPU checked against blargg’s test programs, and work on an optional “new PPU”, which Windows users could switch on from a menu from August 2009. The project’s README is candid about the alternatives: under its download links it adds, “But you might like Mesen more”, pointing to Mesen.

Later years

FCEUX 2.2.3 appeared in July 2016. After a gap, releases resumed with 2.3.0 in January 2021 and continued to 2.6.6 in August 2023; the Linux and macOS builds now use a Qt interface. The source code moved to GitHub under the TASEmulators organisation, where automatic builds continue, and the project still recommends its SourceForge downloads for numbered releases.

Sources

  • FCEUX website, “Version History” (the project’s own history, ©2009 adelikat): FCE and Bero, FCE Ultra Beta 1 (November 1998), the DOS, Linux and Windows ports, the 0.40 source release and its freeware licence, the move to the GPL with 0.80 (June 2002), the 2004 halt and the 2006 revival, the rerecording, FCEUD, FCEUXD, FCEUXDSP, FCEUXDSP CE and FCEU-mm branches, the FCEUX team, and every release date from 2.0.0 to 2.6.6. https://fceux.com/web/version.html
  • FCEUX website, home page: the systems and video modes supported. https://fceux.com/web/home.html
  • FCEUX source code on GitHub (TASEmulators/fceux): the README (“For some reason casual gamers use it too”, “But you might like Mesen more”), the licence (GPL version 2), changelog.txt (Lua fixes in August 2008, the June 2009 sound and CPU fixes tested against blargg’s programs, the New PPU menu item in August 2009, the TAS Editor work from 2011 before release 2.2.0), and documentation/fm2.txt (the FM2 movie format and its rerecordCount). https://github.com/TASEmulators/fceux
  • FCEUX, TAS Editor manual (version 1.01, by AnS): “an Integrated development environment dedicated to TASing”; the glossary’s Piano Roll and Greenzone. https://fceux.com/web/help/taseditor/
  • TASVideos, “Emulator Resources: FCEUX” (web, secondary): “a popular choice for tool-assisted speedruns” and the comparison with BizHawk. https://tasvideos.org/EmulatorResources/FCEUX

See also

Checked. Verified against primary sources and signed off by a person.