Game Emulators: Difference between revisions

From Elvanör's Technical Wiki
Jump to navigation Jump to search
No edit summary
(15 intermediate revisions by the same user not shown)
Line 1: Line 1:
== Nintendo NES ==
= RetroArch =


* fakenes seems very good, with an excellent GUI and an excellent video support via OpenGL.
* 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.
 
== 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.
 
== 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:
<pre>
video_fullscreen = "true"
video_fullscreen_x = "1920"
video_fullscreen_y = "1080"
video_refresh_rate = "60.000000"
</pre>
* 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).
 
== 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.
* The level of logging can be configured with the interface (Settings -> Logging).
 
== Issues with LibreELEC distribution ==
 
* Some cores do not work at all as they have unresolved symbols.
* Removing a core from Kodi add-ons interface is dangerous, some leftovers breaking stuff are present after a removal. I had to manually remove via SSH some files to get other cores working again.
 
== MAME ==
 
* There can be a controller configuration issue with the "On Screen Display", where a button (or joystick "key") brings up this display. [http://forum.arcadecontrols.com/index.php?topic=148394.0 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).
 
= 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.
* 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.
* Mednafen is another candidate. Recent versions are not available in Portage.


== Sega Saturn ==
= Sega Saturn =


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


== DOS ==
= DOS =


* 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.
* 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.
* Try dboxfe as a front end. It's already quite usable, not yet perfect though.
* Press Control-F10 to turn the mouse cursor off (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-F10 to turn the mouse cursor off (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 alt-enter to switch fullscreen mode.
* Press alt-enter to switch fullscreen mode.


== Commodore 64 ==
== Rendering and scaling ==
 
* Important settings are fullresolution=desktop and windowresolution=desktop. 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.
* If windowresolution=desktop is used, the rendering engine should support scaling. This is the case with OpenGL, but on Gentoo I cannot seem to get OpenGL to work correctly.
 
== Obsolete ==
 
* 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).
* Vice 1.22 is good, however I had problems with keyboard keys and speed (while reading the disks).
= SCUMMVM =
* Excellent emulator to play LucasArts games as well as other ones such as Legend of Kyrandia.
* 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.

Revision as of 13:43, 2 December 2020

RetroArch

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

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.

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

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.
  • The level of logging can be configured with the interface (Settings -> Logging).

Issues with LibreELEC distribution

  • Some cores do not work at all as they have unresolved symbols.
  • Removing a core from Kodi add-ons interface is dangerous, some leftovers breaking stuff are present after a removal. I had to manually remove via SSH some files to get other cores working again.

MAME

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

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.

DOS

  • 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 the mouse cursor off (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 alt-enter to switch fullscreen mode.

Rendering and scaling

  • Important settings are fullresolution=desktop and windowresolution=desktop. 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.
  • If windowresolution=desktop is used, the rendering engine should support scaling. This is the case with OpenGL, but on Gentoo I cannot seem to get OpenGL to work correctly.

Obsolete

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

SCUMMVM

  • Excellent emulator to play LucasArts games as well as other ones such as Legend of Kyrandia.
  • 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.