Game Emulators

From Elvanör's Technical Wiki
Jump to navigation Jump 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 or PS 5 controller is completely automatic and out of the box if RetroArch has been properly 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. To change the theme, go to Settings -> Drivers -> Menu.
  • 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.



  • 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.
  • Since the ebuilds are rather outdated and probably buggy, it's probably best to install RetroArch on Gentoo via the flatpak package. It's very easy to install flatpak on Gentoo (contrary to snap). After that, you can use the online installer to install cores. Note however that assets, core info files, shaders and other files are supposed to be updated by the flatpak package and the online updater will not work for those. That's normal behavior (you could potentially change the directories to point to writable directories to change this, but it's not recommended).

Raspberry Pi OS

  • You should install RetroArch on Pi OS via flatpak. It's also available via snap but I had a lot of issues (for instance, notification-daemon needed to be manually installed and started for the RA snap to launch).
  • The main issue (with all different packages of RA: Ubuntu PPA, flatpak or snap) is that the online updater for core won't work. It will just display "Fetching core list..." and nothing will happen (there's nothing written in the logs either). This is due to the fact that the builbot does not build cores for the arm64 architecture. This means the online updater won't work to download cores; cores must be installed manually, see below.
  • Some cores are available on the Ubuntu PPA repositories, but very few. It's generally easy however to build the cores manually. 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). Cores should then be added manually to [BASE_DIRECTORY]/retroarch/cores. For the flatpak package, BASE_DIRECTORY=:~/.var/app/org.libretro.RetroArch/config/.
  • There is also a repository of arm64 (aarch64) cores at This is useful when some cores are hard to build; for instance I could not get the current MAME core to work on the Raspberry Pi 4.


  • 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.


  • You have to quit Steam for PS 5 Dual Sense controllers to work in RetroArch (via Bluetooth).


Best cores for each system

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

Genesis Plus GX

  • There is a widescreen version of this core. If used, some games (like Streets of Rage 3) may display video artefacts on the left and right parts of the screen. In this case it is better to disable the extra columns (use Core Options -> Video -> Extra Columns to Draw -> 0).

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.
  • If you downloaded a merged set of ROMs, individual ROM files (zip files) may not work as they may rely on some dependencies. You have to copy several files to get the game working. With non-merged ROMs, every archive is self-sufficient which may be easier.


  • This core can emulate an Amiga 500, Amiga 1200 or Amiga CD32. The corresponding Kickstart ROMs must be installed in the system/ directory of RetroArch: kick34005.A500, kick40068.A1200 and kick40060.CD32.
  • PUAE will be able to load .adf files (representing Amiga floppy disks), but also for the Amiga CD32, a zip archive containing ISO files. I found some .adf files for Amiga CD32 but did not really understand how they were supposed to be used. Better to use real CD images if you want to play an Amiga CD32 game.
  • PUAE has a virtual keyboard that can be brought up by using the RetroPad select key (right shift on a keyboard controller). Normally useless - either you would use a real keyboard to play games that require it, or you would use only a standard game controller.
  • For games using mouse instead of joystick, the control can be switched between joystick/mouse in various ways. For instance, via the right control key on a keyboard, or via a core option, or via the virtual keyboard. Be careful, if you switch to mouse when using a game requiring a joystick, controls will stop working and you will need to switch back.

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).


  • Shaders use the GPU and should be favored over filters that use CPUs.
  • A simple good shader is the bilinear one; hqx shaders could also be used.
  • To setup a shader as the global default one for all games, load the shader then choose Save -> Save Global Preset.


  • The level of logging can be configured with the interface (Settings -> Logging). Log files are located in ~/.config/retroarch/logs.
  • 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.

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.

Macintosh / MacOS

  • Several emulators are available depending on which Macintosh is most adapted for the target game. For very old games, like black or white or 16 colors games, mini vMac is the best (emulates a Mac II or Mac Plus). For 256 color games not too recent, Basilisk II is a good option (emulates a Performa, Centris, Mac II si, Quadra...). For latest games on MacOS 8 or MacOS 9, Sheepshaver should be used (emulates a Power Macintosh).
  • Update: as of 2024, for 680x0 processors, MAME (0.261 or later) is probably the best emulator. Instead of hacking Mac drivers, MAME attempts to provide precise and truthful emulation which provides better results (although it may be slower).

General Setup

  • The best is to use one main drive (shared between different emulators) for the games, and one drive per system version (System 6, MacOS 7.x, MacOS 8).
  • Some useful applications should be installed on the system drives: Stuffit Expander, ShrinkWrap (version 2.1 for MacOS 7).
  • DiskCopy 6.3.3 runs on 68K and MacOS 7.0.1 (and later). DiskCopy 6.4 only runs on PowerPC processors.
  • I could not mount .dsk images with ShrinkWrap, but Basilisk II can mount directly those images.
  • Because Basilisk II supports a shared folder with Linux, the installation of games or applications is easier under Basilisk II (even if another emulator is used after at run-time).


  • Available in a Portage overlay (sdlmame).
  • You need the MAME ROMs of the target machine. I downloaded the Mac II si, Mac II vx, Quadra 700, and Quadra 800 ROM files. Be careful, the ROM files need to be placed in ZIP format inside the MAME ROM folder (~/.sdlmame/roms by default for SDL MAME).
  • MAME needs a hard drive in CHD format. It's easier to download a ready to use CHD file with a given version of Mac OS.
  • MAME is also able to read Basilisk II images (*.img) via a specific driver if the image is < 256MB in size. This is the easiest way to transfer files to a MAME CHD hard drive: make the transfer / manipulations via Basilisk II, then mount the Basilisk II image in MAME.
  • To run MAME, use the following command (this would target a Macintosh Quadra 700, 16MB RAM, with a hard drive with Mac OS 7.6.1):
mame macqd700 -hard1 mac761.chd -ramsize 16M -nbd image
  • More documentation and help here (beware: I could not get the part related to ISO images to work, but using the image specific driver to read a Basilisk II hard drive is easier and works well).

Mini vMac

  • Not available in Portage but can be built easily.
  • Mini vMac binary is built with a fixed number of colors (chosen at compile time). You cannot switch from 256 colors to 16 colors at runtime as a result.
  • Mini vMac can mount image files (drag the image file into the Mini vMac window) but cannot transfer files directly from the Linux host. The best is to use a shared disk with Basilisk II and copy / install games from Basilisk II.
  • Building a Mini vMac variation (which is a Mini vMac binary with some compile-time options) from source is very easy:
gcc setup/tool.c -o setup_t
./setup_t -t lx64 -m II -depth 2 -hres 1920 -vres 1080 >
  • Some games (Vette! for instance) apparently need QuickDraw 32, which can be installed manually on a System Folder (for System 6).
  • To automount some disks at startup, creating symbolic links named disk1.dsk, disk2.dsk ... can be useful.
  • Mini vMac is not able to grap a fullscreen display and change its resolution. You can change the main display resolution in KDE System settings (for instance to 640x480) before launching Mini vMac to benefit from a large display size (which is useful to play games). You then usually need to use KDE built-in ability to display a program in full screen (right-click on program icon on task bar, then More -> Fullscreen). Note that this display is smoothed out by the video driver (at least it's the case with an integrated Intel GPU).
  • Update: as of January 2024, sound is no longer working on a default Gentoo setup (running Pipewire). It was working before, however.

Basilisk II

  • Basilisk II can be used to emulate a 680x0 Macintosh. It supports MacOS 7.x and MacOS 8.x. Note that it does NOT support System 6 or earlier.
  • The recommended ROM is a Performa or Centris 650 ROM for MacOS 7 and Quadra 900 for MacOS 8.
  • To transfer files, a shared folder with Linux is recommended. Note that this seems to work only under MacOS 8 and NOT under MacOS 7 (the shared folder is not mounted).
  • Resolution should be set to 1024*768 on a Performa (choosing Maximum does not work). Using full screen instead of a window works correctly.

Specific Games

  • Shadowgate: works with Mini vMac (Mac II ROM, sound supported) and System 6. Does not work in Basilisk II / MacOS 7 (launches but crashes on the first actions).
  • Vette!: works best with Mini vMac (Mac II ROM, color and sound supported) and System 6. You need a 16 color build, and a 640 * 480 resolution is better. Works in Basilisk II and MacOS 7 but without sound.
  • Shanghai: works best with MAME (Quadra 700, MacOS 7.1). Works in Basilisk II and MacOS 7 but without sound, same with Mini vMac and System 6.
  • Hellcats: works best with MAME (Quadra 700, MacOS 7.1). Works in Basilisk II and MacOS 7 but without sound, same with Mini vMac and System 6 (1920 * 1080 resolution build).
  • Prince of Persia: works with Basilisk II under MacOS 7.1.
  • Realmz: works with Basilisk II under MacOS 7.1. If using Realmz version 8, you get a 800 * 600 resolution in the game (compared to 640 * 480 with 7.1.2). You need to increase allocated RAM to 32MB and switch to 256 colors. According to reports on the Internet, there can be some bugs when playing Realmz via Basilisk II - maybe it would be better to try Sheepshaver for this game.