Game Emulators

From Elvanör's Technical Wiki
Jump to navigationJump to search


  • RetroArch is a front-end system / framework for several emulators. It's a very good piece of software.
  • Configuration and setup of a PS 4 controller is completely automatic and out of the box if the proper ebuild has been installed.
  • F1 returns to the main menu from a game.
  • Starting from RetroArch 1.8.5, Ozone is now the default theme. You can revert back to the XMB theme (which I find nicer) if needed. On LibreELEC, the Ozone theme does not work well at all and should be replaced by XMB.
  • When using ROMs, the US (or Japan) version of the game should always be used if possible. This is because US/Japan uses NTSC standard with 60Hz refresh rate, whereas Europe uses PAL at 50Hz. Thus framerate is limited to 50 (vs 60) for European ROMs, resulting in a slower impression for everything.

Best cores for each system

  • GameBoy: Gambatte
  • MegaDrive: Genesis Plus GX
  • Neo Geo: Final Burn Neo
  • NES: Nestopia
  • Old PC Games: SCUMMVM
  • Super NES: Snes9x

Gentoo distribution

  • RetroArch is not available on main repository but on overlays. Not all overlays have all cores - I currently use the menelkir overlay because it has the MAME cores.
  • To use it on Gentoo, the rule is to install components via ebuilds (emulator cores, shaders, joypad configurations). Using the system automatic installer does not work (at least not out of the box) on Gentoo.

Raspberry Pi OS

  • Cores are not available on the Debian repositories (well, very few are). It's easy however to build them individually. Just clone a Github repository and compile the core. You can find the repositories at (and then search for the emulator you want to add).

Advanced configuration

  • You should activate in the Settings interface all the settings via Settings -> User Interface -> Show Advanced Settings.
  • RetroArch seems to save its configuration to file only when quitting (and if the corresponding option is active). This means that if RA crashes or has an issue, changes may not be saved.
  • The code matching a controller to its profile seems very buggy. I've looked at the source and it matches only on name, not with vendor id and model id which seems extremely dangerous. As a result, a PS4 controller (only the v2, v1 was fine) did not get a correct association and buttons were totally wrong. To solve this, I removed the problematic .cfg files so that RA could only associate the controller with the right profile.
  • Activate Settings -> Input -> Menu Controls -> Menu Swap OK and Cancel Buttons, else you will get inverted buttons while on the menu. This corresponds to menu_swap_ok_cancel_buttons = "true" in the config file.
  • It's also convenient to activate Settings -> Input -> Menu Controls -> All Users Control Menu (all_users_control_menu = "true").
  • To view FPS (frames per second), you need to go to Settings -> Onscreen Display -> Onscreen Notifications. Note that the FPS won't be higher than what the game should have, so for instance a NTSC game would be capped at 60fps. This is normal, and most of the games will indeed have a 60 fps limit.
  • Only in real fullscreen mode does Retroarch have control over the resolution and refresh rate of your display. With windowed fullscreen mode (which is the default), it uses the resolution of your system.
  • Note that fullscreen / windowed mode options are not shown if your video driver can only work in full screen mode (which is the case when you're using KMS on LibreELEC for instance). Strangely, if selected video output driver is glcore (not gl), the options are still shown and you can use the interface to configure resolution.
  • Make sure you have a refresh rate of 60Hz (at least). With 30Hz, you need to change the resolution to obtain a better refresh rate. The resolution can be changed in the GUI (if real full screen is chosen), however it seems the refresh rate can be changed only via the config file. Here are the parameters:
video_fullscreen = "true"
video_fullscreen_x = "1920"
video_fullscreen_y = "1080"
video_refresh_rate = "60.000000"
  • With a OLED TV screen, I had issues with the refresh rate of the display apparently not detected / measured correctly by Retroarch. This resulted in awful screen tearing (with and without v-sync). A setting that produced good results on my Raspberry Pi 4 (LibreELEC) was the following:
    • glcore used as video drive;
    • forced full screen mode, 1080p resolution at 60Hz refresh rate;
    • threaded video;
    • v-sync on (not sure if this was used because of the threaded video setting).


  • The logs mention which core is used for a particular ROM / game. This can be very useful.
  • Associations of a controller with its profile (and path) are not logged, contrary to what the documentation says. Maybe this was done in the past.
  • The level of logging can be configured with the interface (Settings -> Logging).

Issues with LibreELEC distribution

  • The cores that can be installed via the LibreELEC Kodi repository are binary cores intended to work only on retroplayer. Although some of them will work on RetroArch, a lot of them won't (unresolved symbols errors will be encountered). For this reason, all RetroArch cores should be installed from this repository: There is also an option on the RetroArch add-on (from gamestarter) to install all cores directly and this works well.
  • Adding a core from the LibreELEC Kodi repository is also dangerous, as it installs the core in a different location (~/.kodi/addons/game.libretro.CORE_NAME/) than what is expected from RetroArch (~/.kodi/userdata/addon_data/game.retroarch/), but creates a symlink there. If you remove the core from Kodi add-ons interface, the symlink is still there as a leftover, and it can break stuff. I had to manually remove (via SSH) the symlink to get other cores working again.

MAME / Final Burn Neo

  • There can be a controller configuration issue with the "On Screen Display", where a button (or joystick "key") brings up this display. Follow instructions on this link to fix.
  • It can be good to activate screen stretching as a MAME option. To do this bring up MAME in-game configuration menu (TAB key on keyboard), then choose Video options -> Screen 0 Stretched. This is better for games like Metal Slug that have a strange longer than normal line on the bottom if you use the default option (Screen 0 Standard).
  • Many MAME cores do not support save states, while Final Burn Neo does. For this reason, for arcade games, FBN is a good choice.

Nintendo NES

  • The best current one (2019) seems to be fceux. It has full-screen OpenGL support which provides nice smoothing. It has some bugs though; for instance NTSC does not work in full-screen, another mode must be chosen.

Previously used

  • fakenes is good, with an excellent GUI and an excellent video support via OpenGL. But recent ebuilds do not compile, and the software seems abandonned.
  • Fakenes is quite slow with good video options (HQ4X). It also must be ran in windowed mode in order to use alt-tab.
  • Mednafen is another candidate. Recent versions are not available in Portage.

Sega Saturn

  • The best one on Linux seems to be Yabause. Although slow, and problematic for sound, it is impressive already.


  • You must use DOSBox. I did not find yet a good front-end for Gentoo. Write the configuration file yourself, and start the emulator directly on the command-line with as an argument the .EXE you want to load.
  • Press Control-F10 to turn off the mouse cursor capturing (useful for many games). Press Control-F11 or F12 to increase or decrease the CPU cycles. Some old games may need a very low cycle rate. Beware that by default these keys are already captured by KDE.
  • Press Control-F9 to kill DOSBox (useful in cases you are stuck).
  • Press alt-enter to switch fullscreen mode.

Gentoo Installation

  • There is dosbox-staging available in Portage, which provides more features than the original dosbox codebase.

Rendering and scaling

  • Important settings are fullresolution=desktop and windowresolution=desktop. Note that the first setting applies to the resolution when on full screen mode, the second applies to the resolution in windowed mode.
  • If you use a rendering engine with filtering / scaling (OpenGL on Linux), it's better to turn off scalers (in [render] section). They look incompatible with the scaling performed by OpenGL.
  • A good setting seems to be fullresolution=desktop, output=opengl, scaler=none on small screens (laptop). OpenGL will scale the native resolution of the game to your desktop resolution. It turns out to be pretty and there is no resolution switch (which are problematic on Nvidia cards as they don't provide instant resolution switches).
  • Another option is fullresolution=desktop, output=opengl, and scaler=hq3x, glshader=advmame3x on the [render] section.
  • If fullresolution=original is used, the resolution used for DOSBox will be the one of the game (eg, a very low one), but the graphical chipset may smooth things out and it may turn out to be a correct rendering.

Recommended configuration settings

  • You can launch DOSBox like this: dosbox -conf dosboxMM3.conf MM3.EXE



cycles=fixed 8000


  • dboxfe was a front end available in Portage. It's no longer there.

Commodore 64

  • Vice 1.22 is good, however I had problems with keyboard keys and speed (while reading the disks).


  • Excellent emulator to play LucasArts games as well as other ones such as Legend of Kyrandia.
  • While in game, press F5 to get the SCUMMVM menu.
  • Don't select the ALSA driver as a sound driver (for some reason it then says it cannot find the MIDI port). Select the Adlib driver or the default one.
  • To enable bilinear filtering, use Ctrl+Alt+F while in game.