FCE Ultra port for GP2X


gpfce is a port of FCE Ultra, an open-source, portable NES/Famicom emulator based on Bero's FCE source code. This is an optimized port (includes asm CPU core), what allows it to run many games fullspeed while underclocked. It is a nearly full-featured port, which means that most features of the original are there. There is support for a wide variety of in-cart expansion hardware ("mappers"), the Famicom Disk System is emulated, several VS Unisystem games are supported well. A NSF player is built in.


  • Original base code of FCE Ultra by Xodnizel, Bero.
  • Porting/optimization/integration/frontend for 0.3 and 0.4 by notaz.
  • Versions 0.1 and 0.2 by zzhu8192
  • asm CPU core from FCA and Little John GP32.
  • Minimal library by rlyeh.
  • Additional low-level GP2X libs by Hermes/PS2Reality, theoddbot, god_at_hell, Puck2099.
  • All FCE Ultra contributors listed in
  • ...and everyone whose name my mind has misplaced.

Release history

0.4 rev 313    latest     download     mirror     source code     source code mirror
  • Improved open bus emulation, fixes missing ground in some SMB3 levels.
  • Improved auto frameskip behavior in cases when emu is not fast enough to maintain 50/60 fps.
  • Fixed a bug which prevented some key combo configurations from working.
  • Some other minor changes.
0.4 rev 171    download
  • Added optional "Accurate renderer", which is the original FCE Ultra 0.98.x renderer + PPU emulation code. It's much slower, but it can handle games which need more precise PPU timing emulation (like Marble Madness).
  • Fixed saving and loading of game specific configs.
  • Some other minor changes.
0.4 rev 163    download
  • Added A r k's fast-direction-change fix for usbjoy lib.
  • Fixed an issue of usbjoys stopping to work when "Perfect vsync" is enabled.
0.4 rev 162    download
  • Fixed savestate subsections (were causing some mapper data not to be saved).
  • Fixed an issue of MapIRQHook getting lost after loading a savestate (glitched Akumajou Densetsu and other games after savestate load).
  • A bug, which prevented configuring multiple USB pads fixed.
  • Fixed sound breaking bug after switching it on/off multiple times.
  • Added "Perfect VSYNC" option, which changes GP2X refresh rate and syncs emu timing to LCD vsync.
  • Fixed IPS patch support.
0.4 rev 153    download
  • Lots of work on the asm core. Timing fixed for some instructions. Some missing undocumented instruction handlers added. Lots of tweaking to make it compatible with all that mapper code.
  • Completely new PicoDrive style menu added with most standard FCE Ultra and some additional options. Selector removed, ROM list is now built-in and only limited by available memory.
  • Merged in most of code from 0.98.1x versions. Only ppu/rendering and sound emulation code left from 0.81 (which is less accurate but much faster).
  • Default palette changed to one from later versions.
  • Fixed some alignment problems in MMC5 and some other mappers.
  • Some generic optimizations and code cleanup/refactoring.
  • The built-in NSF player fixed.
  • Authentic GameGenie support fixed.
  • FDS support fixed.
  • VS Unisystem support fixed.
  • Ingame saves fixed (not sure when they got broken).
  • Increased maximum sound volume.
  • Added Zapper emulation just for fun.
  • Added partial FCM movie support.
  • Fixed some memory leaks.
  • Fixed a bug which caused USB connection from GP2X menu to hang after using gpfce.
  • Software scaler added.
  • USB gamepad support added.
  • TV out fixed.
  • Documentation updated.
0.3    download
  • Major improvement: added ARM asm CPU core from LJGP32, which itself was adapted from FCA by Yoyofr. The core required substantial changes to make it work in FCE ultra.
  • The emulator renders directly to frame buffer now (previously it was drawing to offscreen buffer, which was then copied to framebuffer).
  • Squidge's MMU hack added.
  • Added sync() calls after savestate writes.
  • Some additional tweaking here and there to get a few more FPS.
  • Volume middle now can be used as shift to emulator functions instead stick click (saving, stretching, etc.).
  • Added frameskip selection with shift+A and shift+Y (shift is stick click or volume middle).
  • Probably some more changes I forgot about.

Changelog for zzhu8192's 0.1 and 0.2 versions is available at his page.