FCEUX
The all in one NES/Famicom/Dendy Emulator

# FCEUX SDL Documentation

Last updated December 9, 2020
Valid as of FCEUX 2.3.0

Table of Contents:

Introduction
Configuration
Input
Famicom Disk System
Game Genie
VS Unisystem
Automatic IPS Patching
Using FCEUX

Qt GUI Style
Hotkey Assignments

VS Unisystem
Famicom Disk System
Game Pad
Power Pad
Family Keyboard
Command-line options

Credits

## Introduction

FCEUX is a cross platform, NTSC and PAL Famicom/NES emulator that is an evolution of the original FCE Ultra emulator. Over time FCE Ultra had separated into many separate branches.

The concept behind FCEUX is to merge elements from FCE Ultra, FCEU rerecording, FCEUXD, FCEUXDSP, and FCEU-mm into a single branch of FCEU. As the X implies, it is an all-encompassing FCEU emulator that gives the best of all worlds for the general player, the ROM-hacking community, and the Tool-Assisted Speedrun Community.

FCEUX stores configuration, savestates, movies, screenshots, amount other things in "~/.fceux". This is referred to as the "base directory".

## Configuration

FCEUX stores configuration files (.cfg), savestates (fcs), movies (.fm2), screenshots (snaps), and other information within "~/.fceux/". This is referred to as the "base directory" throughout this documentation. The primary configuration file is "fceux.cfg", located within the base directory.

As of FCEUX 2.1.6, configuration files can be stored within the "cfg.d" directory. They will be parsed in alphabetical order (or numberical order -- ie: 10-gamepad_stuff.cfg; 20-xbmc.cfg; 30-sound.cfg). These files will not be modified by fceuX -- fceuX only writes configuration to "fceux.cfg". You can store device/game/scenario specific configuration files in the "cfg.d" directory. You can enable/disable these configuration files by enabling/disabling read permisions to the scripts (ie: chmod a-r 15-myconfig.cfg).

## Input

FCEUX emulates the standard NES gamepad, the Four-Score multiplayer adapter, the Zapper, the Power Pad, and the Arkanoid controller. The Famicom version of the Arkanoid controller, the "Space Shadow" gun, the Famicom 4-player adapter, and the Family Keyboard are also emulated.

#### Zapper

Most Zapper NES games expect the Zapper to be plugged into port 2. and most VS Unisystem games expect the Zapper to be plugged into port 1.

The left mouse button is the emulated trigger button for the Zapper. The right mouse button is also emulated as the trigger, but as long as you have the right mouse button held down, no color detection will take place, which is effectively like pulling the trigger while the Zapper is pointed away from the television screen. Note that you must hold the right button down for a short time to have the desired effect.

#### Famicom Disk System

You will need the FDS BIOS ROM image in the base FCEUX directory. It must be named "disksys.rom". FCEUX will not load FDS games without this file.

Two types of FDS disk images are supported: disk images with the FWNES-style header, and disk images with no header. The number of sides on headerless disk images is calculated by the total file size, so don't put extraneous data at the end of the file.

You should make backups of all of your FDS games you use with FCEUX. This is because FCEUX will write the disk image back to the storage medium, and the disk image in RAM might have been corrupted because of inaccurate emulation(this case is not likely to occur, but it could occur).

#### Game Genie

The Game Genie ROM image is loaded from the file "gg.rom" in the base directory the first time Game Genie emulation is enabled and a ROM image is loaded since the time FCEUX has run.

The ROM image may either be the 24592 byte iNES-format image, or the 4352 raw ROM image.

Remember that enabling/disabling Game Genie emulation will not take effect until a new game is loaded(this statement shouldn't concern any of the "run once" command-line driven ports).

#### VS Unisystem

FCE Ultra currently only supports VS Unisystem ROM images in the iNES format. DIP switches and coin insertion are both emulated. The following games are supported, and have palettes provided(though not necessarily 100% accurate or complete):

Dr. Mario
VS Castlevania
VS Duck Hunt
VS Excitebike
VS Gradius
VS Golf
VS Hogan's Alley
VS Ice Climber
VS Pinball
VS Platoon
VS RBI Baseball
VS Sky Kid
VS Slalom
VS Star Luster
VS Stroke and Match Golf
VS Super Mario Bros
VS Tetris
VS The Goonies

### Automatic IPS Patching

Place the IPS file in the same directory as the file to load, and name it filename.ips.

            Examples:       Boat.nes - Boat.nes.ips
                            Boat.zip - Boat.zip.ips
                            Boat.nes.gz - Boat.nes.gz.ips
                            Boat     - Boat.ips

Some operating systems and environments will hide file extensions. Keep this in mind if you are having trouble.

Patching is supported for all supported formats(iNES, FDS, UNIF, and NSF), but it will probably only be useful for the iNES format. It can be used with the FDS format, but be warned that it will permanently patch your disk image, as the disk image is written back to disk when the game is unloaded(unless the disk image is in a zip file, in which case it isn't written back to disk). UNIF files can't be patched well with the IPS format because they are chunk-based with no fixed offsets.

## Using FCEUX

### Qt GUI Style

The Qt GUI can either use the standard system style/themes or custom stylesheets. The available standard styles that are installed on the system will be listed when running the executable command line help. To use a provided system style, use the --style command line argument. To use a custom Qt stylesheet file, set an environment variable named FCEUX_QT_STYLESHEET that contains the full path to the file. This will check for this at startup. If the variable is defined and the file is readable by the program, then the styling settings will be used by the GUI.
Bash Shell Setup Example:

       export FCEUX_QT_STYLESHEET=/home/me/myFceux.qss

For information on Qt stylesheet syntax, see Qt online documentation

### Hotkey Assignments

NOTE: The GUI has a window to remap these hotkeys for SDL.

Key: | Action:
--- | ---
F1 | Cheat menu (command-line only).
F2 | Toggles savestate binding to movies.
F3 | Load lua script.
F4 | Toggle background rendering.
F5 | Save state.
F6 | FDS select side.
F7 | Load state.
F8 | FDS eject.
F10 | Toggle movie subtitles.
F11 | Reset emulator.
F12 | Save screenshot (to basedir/snaps/).
Shift + F5 | Begin movie recording.
Shift + F7 | Open a movie for playback.
0-9 | Select save state slot.
Page Up / Page Down | Select next / previous state
- | Decrease emulation speed.
= | Increase emulation speed.
TAB | Hold for turbo emulation speed.
Pause | Pause emulation.
\ | Advance a single frame.
. | Toggle movie frame counter.
, | Toggle input display.
q | Toggle movie read-only
' | Advance a single frame.
/ | Lag counter display.
DEL | Frame advance lag skip display.

#### VS Unisystem

Key: | Action:
--- | ---
F8 | Insert coin.
F6 | Show/Hide dip switches.
1-8 | Toggle dip switches(when dip switches are shown).

#### Famicom Disk System

Key: | Action:
--- | ---
F6 | Select disk and disk side.
F8 | Eject or Insert disk.

#### Gamepad

These are the default keys for the P1 gamepad. These can be remapped the Qt GUI

Key: | Button on Emulated Gamepad:
--- | ---
D | B
F | A
Enter/Return | Start
S | Select
Keypad up | Up
Keypad left | Left
Keypad down | Down
Keypad right | Right

#### Power Pad

Side B
O | P | [ | ]
K | L | ; | '
M | , | . | /

Side A
| P | [ |
K | L | ; | '
| , | . |

#### Family Keyboard

All emulated keys are mapped to the closest open key on the PC keyboard, with a few exceptions. The emulated "@" key is mapped to the "`"(grave) key, and the emulated "kana" key is mapped to the "Insert" key(in the 3x2 key block above the cursor keys).

To enable or disable Family Keyboard input, press the "Scroll Lock" key. When Family Keyboard input is enabled, FCE Ultra will also attempt to prevent any key presses from being passed to the GUI or system.

### Command-line

FCEUX supports arguments passed on the command line. Arguments are taken in the form of "--parameter value". Most arguments that have both a parameter and a value will be saved in the configuration file.

NOTE: This list is incomplete! For a full list of options, run:

         fceux --help

Argument: | Value Type: | Default value: | Description:
--- | --- | --- | ---
--pal | 0|1 | 0 | Emulate a PAL NES. Otherwise emulate an NTSC NES.
--gamegenie | 0|1 | 0 | Emulate a gamie genie (gg.rom required).
--nospritelim | 0|1 | 1 | Disbales the 8 sprites per scanline limitation.
--frameskip | integer | 0 | Sets number of frames to skip per emulated frame (must be built with frameskip support).
--palette | filename | 0 | Load a custom global palette from given file. Specifying "0" will cause FCEUX to stop using the custom global palette.
--ntsccolor | 0|1 | 0 | Enable NTSC NES colors.
--sound | 0|1 | 1 | Enable sound
--soundvol x | integer | 100 | Set sound volume.
--soundq x | 0|1 | 1 | Enable high-quality sound emulation.
--clipsides | 0|1 | 0 | Clip leftmost and rightmost 8 columns of pixels of the video output.
--slend | integer | 231 | Last scanline to be rendered.
--slstart | integer | 0 | First scanline to be rendered

## Credits

Name: | Contribution(s):
--- | ---
Unknown | Original Author
Lukas Sabota | FCEUX SDL documentation revival.
mjbudd77 | FCEUX Qt/SDL documentation upates.