RetroArch 1.9.7 released!


RetroArch 1.9.7 has just been released.

Grab it here.

If you’d like to learn more about upcoming releases, please consult our roadmap here. The next version of Lakka (with an updated RetroArch 1.9.7 version) is scheduled to be released a week from today.

Remember that this project exists for the benefit of our users, and that we wouldn’t keep doing this were it not for spreading the love with our users. This project exists because of your support and belief in us to keep going doing great things. If you’d like to show your support, consider donating to us. Check here in order to learn more. In addition to being able to support us on Patreon, there is now also the option to sponsor us on Github Sponsors! You can also help us out by buying some of our merch on our Teespring store!

NOTE: We will update this notice as soon as we have uploaded the 1.9.7 version for UWP/Xbox as well to our server. For now, these still point to the previous version (1.9.6). We thank you for your understanding.

Release notes

A brand new platform port has been added for RetroMini RS-90 (and similar devices). These are low-powered mass-produced MIPS handheld devices that are sold for very cheap. To us, it is yet another opportunity to optimize our cores for low-end devices.

PlayStation2 users are in for a treat. gpSP (Game Boy Advance emulator core) has been optimized and tuned for PS2 to the point where it should run most games at fullspeed. RetroArch should also have a bitmap font driver implemented now instead of relying on gsKit like before.

WiiU users benefit from many improvements to file I/O optimizations (faster loading/startup times), network speed, and menu/font rendering.

Switch users should benefit from the 7zip compatibility added to this release.

Many improvements to the CRT SwitchRes feature have been made. For more details, see ‘Changelog’ below.

Highlights

New RetroMini RS-90 port

Following on from the success of our OpenDingux port for JZ4770-based handhelds, we are pleased to announce official support for RetroMini RS-90 devices running OpenDingux Beta. This tiny console has one of the weakest CPUs we have ever targeted; it has just 32 MB of RAM, an ultra-low resolution 240×160 display and is available for as little as $20 – but still it provides an enjoyable RetroArch experience.

  • All regular frontend features are working (excluding rewind and runahead support)
  • RGUI offers surprisingly comfortable performance at 240×160 (even thumbnails are supported – with a fullscreen toggle mapped to the start button)
  • Content can be displayed with integer scaling, or nearest neighbour and semi-linear software filters are provided for fullscreen viewing

Given the limited specifications of the hardware, a modest section of cores are available. The following generally run at full speed:

  • Gambatte: All GB games (GBC games have mixed success)
  • Genesis Plus GX: Master System & Game Gear games
  • Pokemini
  • QuickNES

…while these offer varying degrees of playable content with frameskipping enabled via core options:

  • Mednafen PCE Fast
  • Picodrive: Genesis
  • Potator
  • RACE
  • gpSP

For the best results, we recommend applying a per-application CPU overclock for the RetroArch application: highlight RetroArch on the device’s home screen, press the select button > Edit RetroArch, and set Clock Frequency to 420 MHz (depending on the chip, a lower value may be required, or even higher may work correctly).

PlayStation2 – playable Game Boy Advance emulator added

gpSP should now be available for RetroArch PS2 starting as of version 1.9.7. This is a Game Boy Advance emulator core. Davidgf has been working hard on this core for the past few months and the results speak for themselves – this should be the first time that a PlayStation2 is able to run Game Boy Advance games at fullspeed.

WiiU improvements

In addition to the improvements listed for WiiU previously, there’s also the following to mention:

Fix inputs breaking when connecting/disconnecting remotes
When a KPAD controller (Wiimote, Pro Controller, etc.) gets disconnected or has its accessory changed, the Wii U’s API gives nonsensical results for a little while, even while claiming these results have no errors whatsoever. This was wreaking havoc in the input system and ended up leaving the controllers useless.
1.9.7 attempts to work around the console’s API by filtering out some of the unknown results.

Download progress indicator fixed for large transfers
An important bug was fixed that was causing issues while downloading the Assets from within the program. When downloading a large file on a 32-bit platform, the progress indicator will get pinned to 100% after downloading roughly 40MiB. This causes a lot of stress for assets.zip, where the 40MiB mark is about halfway. This bug has been fixed. Note that this improvement is not only beneficial for WiiU but should benefit other 32-bit platforms in general.

Linux / xdg-screensaver improvements

1.9.7 provides a workaround for the long-standing issue of “protocol error” messages being written to stderr whenever the “Suspend Screensaver” option is enabled and the X11 context driver is used. These messages don’t actually come from RetroArch – they’re xdg-screensaver’s, which is a script for cross-DE screensaver suspending that RetroArch calls to do its job.

It turns out, the script has a problem with title-less windows. See the related bsnes issue for analysis – kudos to Screwtapello for figuring this out. The proposed solution is to check if there’s already a title, and if there isn’t, to set it to a single “space” character, which is surprisingly enough for xdg-screensaver to work. The space character is picked so that there’s no visible difference between the bogus title and no title at all. The alternative is to make sure that RA’s window has a title at all times – too much of a hassle for something this trivial.

Changelog

1.9.7

  • 3DS: Add unique ID’s
  • CRT/SWITCHRES: Fixed some Monitor index bugs ad updated to the latest SR2
  • CRT/SWITCHRES: Fixed monitor index corruption on Windows and added correct fractal scaling. Only used when required
  • CRT/SWITCHRES: Updated log defines to match SR upstream.
  • CRT/SWITCHRES: Added new SR_CONFIG_PATHS for non Windows and Linux systems. Not that SR works on them but to fix RA compile issues
  • CRT/SWITCHRES: Updated SR2 code base to latest. Added supprt for windows monitor indexing. Fixed monitor index bug where index 1 was not being used correctly and “auto” was not being sent.
  • CRT/SWITCHRES: Updated swithres for x86 windows fix
  • CRT/SWITCHRES: fixed SR2 auto issue
  • CRT/SWITCHRES: Fixed auto monitor bug
  • CRT/SWITCHRES: Fixed monitor index corruption on Windows
  • CRT/SWITCHRES: Fixed buffer size bug
  • CRT/SWITCHRES: Added correct fractal scaling. only used when required.
  • CORE INFO: Automatically disable core info cache when core info directory is read-only
  • EMSCRIPTEN: add MAME2003 / MAME2003-plus to web.libretro
  • INPUT/UDEV: udev fixes add pointer pressed to pointer device to allow udev users to access this device
  • LIBNX/SWITCH: Enable 7zip support
  • LINUX/XDG: Prevent xdg-screensaver’s “Protocol error” messages
  • LOCALIZATION: Fetch translations from Crowdin
  • LOCALIZATION: Add missing languages for the first startup
  • MENU/XMB/WIDGETS: Add workaround for FPU bug that breaks scale factor comparisons on certain platforms (fixes XMB thumbnails on 32bit Linux/Windows)
  • MENU/RGUI: Enable fullscreen thumbnail toggle using RetroPad ‘start’ button
  • MENU/RGUI: Fix sublabel length when menu clock is disabled
  • NETWORK/HTTP: Fix HTTP progress indication for large files on 32-bit systems
  • NETWORK/NATT: implement natt fix from void()
  • OPENDINGUX: Fix display when cores ‘drop’ frames
  • OPENDINGUX BETA: Use ALSA audio driver by default
  • OPENDINGUX BETA: Fix IPU scaling when running 256×224 (SNES/Genesis) content
  • PATHS: Fix garbled path string
  • PS2: Implement proper ps2_font driver instead of using the font driver from gskit
  • PS2: Use BDM for increasing up USB stability
  • PS3: First basic RSX driver for PSL1GHT
  • RS90: Initial port
  • RS90: Fix offset of OSD text
  • RS90: Disable menu clock by default
  • RS90: Hide ‘Bilinear Filtering’ video option
  • RS90: Move appdata (retroarch) base directory to external MicroSD card
  • RS90: Add optional approximate ‘semi-linear’ scaling filter
  • SHADERS: Max Shader Parameters increased to 1024
  • VIDEO: Add ‘Integer Scale Overlay’ – Force integer scaling to round up to the next larger integer instead of rounding down
  • VIDEO: New ‘Full’ aspect ratio added. This aspect ratio is useful when used with a shader which has a border in it. The aspect ratio is set to the full window area, so that the viewport spans the whole viewport. When using a border type shader like the Mega Bezel this allows the graphics to span the whole window regardless of the user’s monitor aspect ratio
  • VITA: Wrong flags for not piglet version
  • UNIX: Correct backlight max_brightness path
  • UWP/XBOX: Default to Direct3D11 driver on UWP builds
  • UWP/XBOX: Do not use windowed mode on UWP/Xbox by default, set default resolution to 1920×1080 by default. Should fix display issues with Dolphin/PCSX2 on Xbox
  • WIIU: Fix inputs breaking when connecting/disconnecting remotes
  • WIIU: Input – ignore some bogus KPAD results
  • WIIU: Font rendering fixes – render font lines with correct spacing, and only sample alpha channel when rendering fonts
  • WIIU/NETWORK: Network speed optimisations – WINSCALE, TCP sACK, large buffers
  • WIIU/LIBFAT: Increase cache size on WiiU
  • WIIU/FILE IO: Filesystem optimisations – add fast path for already aligned buffers
  • WIIU/FILE IO: Use 128K vbufs for WiiU – we have loads of RAM and large vbufs are very beneficial
  • WIIU/MENU/OZONE: Fix Ozone rendering error (scissor fix)
  • WIIU/MENU/OZONE: Use Ozone icons instead of XMB Monochrome

RetroArch 1.9.6 released!


RetroArch 1.9.6 has just been released.

Grab it here.

If you’d like to learn more about upcoming releases, please consult our roadmap here. The next version of Lakka (with an updated RetroArch 1.9.6 version) is scheduled to be released a week from today.

Remember that this project exists for the benefit of our users, and that we wouldn’t keep doing this were it not for spreading the love with our users. This project exists because of your support and belief in us to keep going doing great things. If you’d like to show your support, consider donating to us. Check here in order to learn more. In addition to being able to support us on Patreon, there is now also the option to sponsor us on Github Sponsors! You can also help us out by buying some of our merch on our Teespring store!

Release notes

Be sure to also read our Libretro Cores Progress Report (a link will appear here later).

Windows users (with XAudio2 audio driver): RetroArch would previously hang/lock up if you happened to disconnect your current audio device. For instance, this could happen if you were playing with headphones on and you decided to suddenly disconnect your headphones. This has now been fixed. Instead of it locking up the program, instead the sound is just lost instead.

Security concerns over the AI Service on Windows have been addressed.

Improvements to the Windows installer have been made. This should hopefully prevent potentially disasterous situations from happening again. This could happen for instance when the user pointed the installer to install to a directory he should not be pointing to (like C:\Program Files for instance or the desktop), and did not heed the warning.

Linux users should hopefully no longer experience crashes when toggling between normal and threaded video mode with OpenGL thanks to a patch by grant2258.

The Direct3D 11 driver has been improved for Windows users thanks to Stenzek (DuckStation author). Several fixes: tear control support is queried. If not supported, flip mode presentation will not be used and Direct3D will resort back to the legacy blit model instead (less optimal and worse windowed mode). DXGI Alt+Enter handling has been disabled since it would conflict with RetroArch’s fullscreen mode switch. Non-vsynced output without the flip model should also be properly fixed now, when tear support is enabled and flip model is used, it should be possible to fastforward.

Highlights

Optimize scanning of large data sets

When scanning content, the amount of time required to push each new entry to the resultant playlist increases exponentially with playlist size. For small romsets this is typically unnoticeable, but when dealing with very large data sets (e.g. arcade romsets) scanning quickly becomes impractical. A full arcade romset can take several hours to scan – or days on Linux (where certain file operations that are a NOOP on Windows, etc. are very slow).

This happens because the ‘push entry to playlist’ routine is highly inefficient. It has to check whether the entry being added already exists in the playlist, which requires a content path comparison – which in turn involves several expensive operations to resolve ‘real’ file paths and deal with any inconsistencies in archive path notation. The problem is that these expensive operations happen every time: push an entry to the playlist, and it will process and compare every existing content path until it finds (or does not find) a match; push another entry and it will process every path again. Once a playlist hits a couple of thousand entries, this constant reprocessing grinds the scanning process to an effective halt.

1.9.6 solves the issue by caching all parameters derived from content paths on first use, so when pushing multiple entries to playlists the expensive path operations are only carried out once per existing entry. In addition, hash keys are used to minimise lengthy string comparisons. This greatly improves the efficiency of content scanning – and also of playlist management features (since these require nested playlist searches, which now also use the cached content path values/hashes).

For example, before with 1.9.5 and earlier, it was effectively impossible to scan 100k files. Now with 1.9.6, on a low spec development machine running Linux:

* A manual scan of 100k files takes 20 minutes
* Performing a Clean Playlist operation on the resultant playlist takes 5 minutes

Add support for mapping multiple controllers to a single input device

1.9.6 adds support for the remapping of individual controllers to arbitrary core input devices. This allows multiple controllers to be assigned to one input. To configure this, a new Mapped Port option has been added to the Quick Menu > Controls > Port N Controls menu:

Here, the Port 2 Controls refers to the physical controller; Mapped Port refers to the core port that will receive input from this controller.

For example, to map physical controllers 1 and 2 to the player 1 input of a core, set the following:

* Port 1 Controls > Mapped Port > 1
* Port 2 Controls > Mapped Port > 1

There are various use cases for this remapping:

* It allows multiple controllers to be used when playing hotseat multiplayer games that normally support only a single controller
* It allows hybrid-type controllers (e.g. two joysticks mounted in a cabinet) to be used as a single device
* It allows easy swapping of player 1/player 2 (etc.) inputs – for example, when the PSX version of Metal Gear Solid asks the player to plug their controller into port 2

Note that these configuration settings are independent from the main RetroArch config file. To make any changes persistent, a Core, Content Directory or Game remap file must be saved.

1.9.6 also cleans up a long standing issue when configuring remaps: before, changes to Device Type and Analog to Digital Type via the Quick Menu while a core is running will ‘bleed through’ to the main config file. This is harmful and unintuitive behaviour. With 1.9.6, the global settings for these values are cached when initialising a core, and restored when the core is unloaded. (This essentially became a necessity for using the port remapping functionality, since it is rather easy to create complex configs that should in no way touch the main config file…)

‘Analog to Digital Type’ usability improvements

RetroArch is able to map the left or right analog stick of a gamepad to D-Pad input via the per-port Analog to Digital Type menu setting. Unfortunately, this is a ‘trap’ for new users: mapping a stick in this fashion disables its analog input, which creates confusion when using cores that have native analog support. Many users enable Analog to Digital Type by default, then complain on reddit/discord that analog controls do not work for PSX/N64/etc. games.

1.9.6 modifies the Analog to Digital Type functionality such that it can be disabled automatically for cores that have native analog support. The setting now has the following values:

* None: No mapping
* Left Analog: Map left stick to D-Pad, but disable mapping if core attempts to read analog input
* Right Analog: Map right stick to D-Pad, but disable mapping if core attempts to read analog input
* Left Analog (Forced): Always map left stick to D-Pad, disabling left stick analog input
* Right Analog (Forced): Always map right stick to D-Pad, disabling right stick analog input

In addition, a sublabel has been added to the Analog to Digital Type menu entries, which should help to explain what they actually do.

Finally, this PR required some modification of input overlay-related code, during which the following bugs were fixed:

* There is no longer contention between analog stick inputs when an input overlay and physical controller are attached to the same port
* Input overlays no longer generate analog stick input in addition to D-Pad input when Analog to Digital Type is set to the left or right stick

AI Service (Windows) Security Improvements

Several security-related improvements have been made to the AI Service functionality for Windows in an attempt to address concerns that this could be abused. Speech input is no longer sent as a commandline argument to PowerShell, and both the language and speed parameters are properly sanitized and only allow for a few hardcoded safe values to be passed now. This should mitigate most of the attacks that could be thought of with regards to injection.

Windows Installer improvements

Several safeguards have been put in place to prevent people from making a severe mistake during the installation process on Windows. With the installer program, it is no longer possible to install RetroArch to a directory that has existing files or subdirectories. Instead, it has to be written in a new directory. We have to insist on this because the uninstallation process involves wiping RetroArch’s entire directory and everything in it. In the past, people could have made the mistake of pointing it to “C:\Program Files” without putting it in a separate subdir, with disastrous results on deinstallation. While the installer program did warn about this and asked you with a dialog prompt if you were sure, nevertheless we cannot take this risk to begin with. This has been resolved by simply deallowing this to happen by forcing you to install RetroArch to a new empty dir.

Changelog

1.9.6

  • ARCHIVE: Fix archive delimiter detection when file path contains no slashes
  • ANDROID: Do not duplicate port 0 mouse and gun inputs to other ports
  • AUDIO/XAUDIO2: Fail instead of crashing when disconnecting an audio device
  • CHEEVOS: Reset cached progress each time menu is opened
  • CRT/SWITCHRES: Add support for switchres.ini core and directory overrides
  • D3D11: Don’t use allow tearing flag with blit swap chains. Also disables the flip model if the allow tearing flag is not supported.
  • D3D11: Disable DXGI’s ALT+ENTER handling
  • D3D11: Don’t pass ALLOW_TEARING when unsupported
  • D3D11: Fix non-vsynced output without flip, black screens in fullscreen
  • D3D12: Relocated ‘d3d12_gfx_sync’
  • D3D12: Fixed swap interval option
  • GFX: Fix uninitialized variables in gfx_display_draw_cursor
  • HISTORY: Hide ‘Add to Favorites’ when viewing an entry of the favorites playlist
  • INPUT: ‘Analog to Digital Type’ usability improvements
  • INPUT: Add support for mapping multiple controllers to a single input device
  • INPUT/REMAPPING: Add support for mapping multiple controllers to a single input device
  • INPUT/LIGHTGUN: Bind lightgun trigger to first mouse button by default
  • INPUT/WINDOWS/RAWINPUT: Mouse access violation fix
  • INPUT/UDEV: Only add mouse if it has buttons and add vebose device friendly names
  • INPUT/UDEV: Skip mouse with no button errors and keep the rest
  • INPUT/UDEV: Fix Game Focus mode
  • INPUT/UDEV/X11: Change udev driver for dual lightgun support in X11
  • LIBNX/SWITCH: Update to libnx 4.0.0
  • LOCALIZATION: Fetch translations from Crowdin
  • LOCALIZATION: Fix Switchres menu texts
  • MENU/OZONE: Ensure sidebar display status is updated correctly when performing rapid menu navigation
  • MENU/XMB: Dynamic wallpaper fix
  • MENU/XMB: Icon opacity fix
  • MENU/QT/WIMP: Fix default core detection when playlist file name does not match ‘db_name’
  • PLAYLISTS: Optimise scanning of large data sets
  • SECURITY: Plug so-called high-risk vulnerability related to Powershell – avoid injection – don’t send speech input as commandline argument
  • UWP/XBOX: Add expanded resources Rescap to increase performance of UWP version in app mode on Xbox
  • WINDOWS/INSTALLER: Add smarter isEmptyDir reference implementation that looks for subdirectories from NSIS documentation
  • WINDOWS/INSTALLER: Register new function DirectorySet that is called when pressing the “Next” button on the MUI_PAGE_DIRECTORY, aka the install folder selection GUI. DirectorySet contains the criteria for an acceptable folder, which are:
    IfFileExists “$INSTDIR\retroarch.exe” returns 1
    IfFileExists “$INSTDIR\*.* returns 0, there is no existing folder
    IfFileExists “$INSTDIR\*.*” returns 1, there is a folder, and isEmptyDir returns 1, therefore the folder is empty, including of subdirectories
  • X11: Fix threaded video segfault

RetroArch 1.9.4 released!

EDIT/UPDATE 31/5/2021: We have pushed a new 1.9.4 version. Specifically this fixes a bunch of regressions in the Vita port which unfortunately snuck into the initial 1.9.4 version. If you are using RetroArch on a PS Vita, we highly recommend you redownload the stable again. There are no real changes for other platforms.


RetroArch 1.9.4 has just been released.

Grab it here.

If you’d like to learn more about upcoming releases, please consult our roadmap here. The next version of Lakka (with an updated RetroArch 1.9.4 version) is scheduled to be released a week from today.

Remember that this project exists for the benefit of our users, and that we wouldn’t keep doing this were it not for spreading the love with our users. This project exists because of your support and belief in us to keep going doing great things. If you’d like to show your support, consider donating to us. Check here in order to learn more. In addition to being able to support us on Patreon, there is now also the option to sponsor us on Github Sponsors! You can also help us out by buying some of our merch on our Teespring store!

Release notes

Be sure to also read our Libretro Cores Progress Report – lots of work has gone into all of the various cores that are maintained (either by us or elsewhere), and it’d be a shame if the work goes unnoticed. Read it here.

There were some issues with RetroArch on PlayStation TV devices which should now be resolved. Additionally, it’s possible to run RetroArch at 720p now on a PSTV if you use the Sharpscale plugin.

Just like in version 1.9.3, we have been going back and improving code in RetroArch to improve file I/O performance, something that is very important for systems suffering from slow disk storage. Most game consoles would fall in this boat because all file I/O tends to be typically unbuffered on homebrew SDKs. In the process, we have discovered some parts where RetroArch was being inefficient when loading files from compressed files (such as .zip or .7z files). In the past, it would extract this file first to a temporary directory on the disk, and then it would read from this file and load it into the RAM buffer. Now we load it into the RAM buffer directly from the compressed file without first extracting it to disk. As if that wasn’t bad enough, on any platform that supports runahead, we would have to create another copy – even when runahead is disabled. And if cheevos are enabled, that’s another copy. All things combined, it would take 128MB of RAM to load one 32MB GBA ROM. As of 1.9.4, this RAM usage is severely cut down for cores that set ‘need_fullpath’ to false.

PlayStation2 users get a new core, prboom (a Doom 1/2 game engine). Thanks to a new and improved toolchain for PS2, this runs at a very impressive framerate, targeting 60 frames per second with stock settings. There might be some minor dips to the 50s in the busier scenes but nothing too serious, and disabling settings like ‘Wiggle Geometry Fix’ might help alleviate that.

Highlights

Prevent unnecessary extraction (to disk) of compressed content files

In previous versions, when loading content from compressed files, RetroArch always extracts the archive to a temporary file – even when cores specify need_fullpath = false. This is incorrect behaviour. If a core does not explicitly need to load a file from disk via some internal mechanism, the frontend should merely provide it with a data buffer. RetroArch was doing this, but in absurd fashion, i.e.:

  • Content is extracted to a temporary file on disk
  • Temporary file is loaded into a memory buffer and passed to the core
  • Temporary file is deleted when core is unloaded
  • This is a huge unnecessary performance overhead, and it causes significant unnecessary wear and tear on flash storage devices…

1.9.4 fixes the issue. Now if compressed content is loaded into a core that sets need_fullpath = false, the file will be loaded directly into memory – no disk writes will occur.

Additional notes:

Previously, it was in fact impossible to load content inside zip files directly into RAM. This has now also been resolved.

The end result? Less read/write on disk storage, which will make a big difference in terms of game content loading time on systems with slow file I/O (typically game consoles).

Option to select between ‘touched’ elements and physical controller inputs when showing inputs on overlays

The ‘Show Inputs on Overlay’ option was previously ‘broken’ when using remaps: the mapped button is highlighted rather than the pressed button, which is confusing for users and at odds with every other application (in existence) that has on-screen touch controls.

1.9.4 remedies the situation by changing the ‘Show Inputs on Overla’y option from a bool to an enum, with the following settings:

  • OFF: No inputs will be highlighted
  • Touched: The overlay element that is touched/clicked will be highlighted, regardless of which RetroPad button it corresponds to (default setting on mobile platforms)
  • Physical (Controller): Actual inputs passed through to the core will be highlighted (including remaps). This is the default setting on non-mobile platforms, and can be used by streamers, speedrunners and suchlike to show the actual controls they are using

When Show Inputs on Overlay is set to Physical (Controller), the index of the ‘physical’ device to be monitored can be set via a new Show Inputs From Port option (this option did in fact exist already, but was hidden/disabled by a long standing bug)

Changelog

1.9.4

  • CHEEVOS: update rcheevos to v10.0.0
  • CONTENT LOADING/FILE IO: Prevent unnecessary extraction (to disk) of compressed content files when need_fullpath is false
  • CORE INFO/FILE IO: Enable core info cache by default now for all platforms
  • CORE INFO/REGRESSION FIX: Fix regression caused by core info file caching – Downloads was no longer showing up in Load Content
  • FILE IO/COMPRESSED: Ability to load content inside ZIP files directly into RAM
  • INPUT/OVERLAYS: Add option to select between ‘touched’ elements and physical controller inputs when showing inputs on overlays
  • INPUT REMAPPING/OVERLAYS: Prevent duplicate inputs when using remaps with input overlays
  • LAKKA: Add brightness restore hook
  • LOCALIZATION: Fetch translations from Crowdin
  • MENU/OZONE: Added simple playlist entry enumeration
  • MENU/XMB: Fix display of ‘Maximum Users’ menu entry dropdown list
  • PS3/PSL1GHT: Joypad driver works again
  • PSTV: Fix Vita input driver for PSTV
  • PSTV: Support for 720p on PSTV when using ‘Unlock framebuffer’ in Sharpscale plugin
  • RPNG: Fix some memory corruption if processing broken input PNG file
  • SECURITY: Fix CVE-2021-28927

Libretro Core Updates/Progress Report – April/May 2021

PCSX2

* Added widescreen, speedhacks options and some userhacks, some code refactoring and cleanup
* Added core option to force widescreen
* Refactoring of core options based on libretro standard
Added option to set pcsx2 Accurancy/Speed presets
* Added bios list at runtime to libretro options
* Fixed speedhacks presets option
Added fallback to default safe preset if speedhack option is disabled
Code cleanup
* Added userhack options: Align Sprite and Merge Sprite
* Fixed a problem which prevented to select the correct HW renderer
Fixed null renderer problem that, if selected, freezed the frontend
* Fixed the rumble issue where it doesn’t stop when triggered
* Add CHD support
* Added option to disable gamepad rumble
* Added option to set rumble intensity
* Replace “Force Widescreen” option with “Aspect Ratio” option
* Add ‘Enable Widescreen Patches’ option
* Added option to set System Language per game
* Added support for scph39001 bios
* Added function for sending message notifications to frontend
* Added notification to frontent about widescreen patches found or not found for the loaded content
* Improved reliability of BIOS detection for language injection
* Added language support for all EU and NA BIOS
* Fixed a memory access violation during init
* CDVD: Adjust read speed depending on if in inner/outer edge. This fixes a number of CDVD timing issues, e.g. the missing sound in Klonoa 2.
* GameDB: Remove SkipmMPEG patch for Arctic Thunder. Removes a GameDB hack for Arctic Thunder as it’s no longer needed thanks to the above CDVD improvement.
* IPU: Return contents of the bottom of the FIFO in CMD except FDEC/VDEC. Fixes the FMVs in Shox.

Update policy for this core
This core is maintained by libretro.

SwanStation core

SwanStation is a PlayStation1 emulator core.

Some things that were added recently to this include software rendering upscaling support.

FCEUmm

FCEUmm is a Nintendo Entertainment System / Famicom emulator core.

Some update notes (from NewRisingSun):

A number of submappers have been assigned to mapper 176 (https://wiki.nesdev.com/w/index.php/INES_Mapper_176) based on real-hardware tests. This update rewrites the mapper 176 emulation accordingly and adds all affected ROM images knownst to me to the ines-correct.h database. I made sure that I have every mapper 176 ROM file that previously was in ines-correct.h.

UNIF files remain a problem, since the UNIF file loader does not use that database, and the four UNIF MAPRs (BMC-FK23C, BMC-FK23CA, BMC-Super24in1SC03, WAIXING-FS005) do not neatly correspond to the actual hardware variants. For example, several BMC-FK23C(A) are actually FS005. The heuristic that I used works for all UNIF files that I had in my possession.

Another issue is the DIP switch. Some carts act quite erratically when the address mask changes on every soft reset, and the old code to decide that did not work well for .NES files. (And “BMC-FK23CA”, previously described as explicitly denoting a DIP switch, is used for a few carts that do not like DIP switch changes between resets at all.) I introduced a new heuristic that worked for all files in the database. The problem remains that the code does not know up to which value the address mask should shift, so that “76 in 1 CHEER – TECH” acts strangely from the fourth to the eighth reset. I see no way of solving this short of creating a database of valid DIP switch positions for every known file hash. (I have done such a thing for NintendulatorNRS.)

Finally, a small number (I counted two) homebrew multicarts from nesbbs no longer work with the newer, more hardware-accurate emulation. “Homebrew multicarts” here refers existing multicart ROMs modified to replace one or two games, and make make changes to the menu code to work better in some other emulators.

* A Pixel Perfect (PAR 1:1, DAR 16:15) option was added.

* Should now handle paths with special characters when using Windows.

FreeIntv

FreeIntv is an Mattel Intellivision emulator core.

Several major improvements have been made to this core recently thanks to nanochess.

* Corrected bug in Overflow flag for SUB/CMP.
* Corrected scrolling visuals for several games (adding timing count for STIC).
* Corrected several instruction timings and interruption timing.
* Now the following games look and/or scroll correctly:
– Cloudy Mountain
– Tower of Doom
– Mountain Madness Skiing
– Super Pro Decathlon
– Stadium Mud Buggies
– Hover Force
* Solved bug in border color. Implemented STIC screen disable.
* Shows explanation if GROM and EXEC are missing.
* HALT and undefined instructions shows a message instead of exiting.
* Corrected position of messages for cartridge load.
* Solved bug in STIC border collision and optimized it

Update policy for this core
This core is maintained by libretro.

prboom

prboom is a Doom 1/2 game engine core.

* PS2 support has been added.

Update policy for this core
This core is maintained by libretro.

FUSE

FUSE is a ZX Spectrum Emulator core.

* Fix ‘Some +3 .dsk don’t load if they use more than 40 tracks’ issue – fixes Sword of Ianna.
* Do not autoload tapes on Scorpion – fix for the issue of autoloading tapes freezing the Scorpion 256 machine type.

It basically disables autoload when loading a tape image (TAP or TZX) with a Scorpion machine. The tape has to be loaded manually by entering the BASIC interpreter and typing load “”

Update policy for this core
This core is maintained by libretro.

Beetle PSX

Beetle PSX is a PlayStation1 emulator core.

* Dynarec updates

Update policy for this core
This core is maintained by libretro.

O2EM

O2EM is a Magnavox Odyssey 2 emulator core.

Standalone O2EM can emulate The Voice expansion module using wav sound samples that the user must place in a specific folder, similarly to what happens with the bios. The libretro port, however, didn’t include The Voice support, as the corresponding code was simply disabled.

The Voice emulation has now been ported to work in a libretro context, using libretro-common’s own audio mixer to load and play the sound samples, which should be placed in a voice folder under the usual System folder.

NOTE: This feature has not been enabled for every platform, but most non-memory constrained platforms should incorporate it now.

External RAM is now exposed through RETRO_MEMORY_SYSTEM_RAM, right after the internal RAM. This memory map is virtual, as the console itself accesses the two RAMs using specific instructions instead of mapping them to a single address space.

Update policy for this core
This core is maintained by libretro.

PokeMini

Before, the core has a Turbo A button with a fixed rate of four presses per second. Now, the turbo period is configurable via a new Turbo Button Period core option. Increasing the period to 0.5-0.75 seconds makes it much easier to speed through rounds of Pokémon Zany Cards without accidentally triggering unwanted input.

Update policy for this core
This core is maintained by libretro.

DOSbox Pure

DOSbox Pure is an MS-DOS/Windows 9x emulator core.

General updates along with a PS Vita port now.

Dolphin

Dolphin is a GameCube/Wii emulator core.

* Add Fast Depth Calculation option

This option is useful for certain games for which having Fast Depth Calculation enabled causes texture issues. For example, disabling Fast Depth Calculation restores the missing text in Def Jam: Fight for NY.

Update policy for this core
This core is maintained by libretro.

gpSP

gpSP is a Game Boy Advance emulator core.

Tons of updates:

* Fix palette writes in MIPS –

Was not writing to the right address (but decoded memory was working).
Most game worked well except those that depend on modifying the existing
palette bits (instead of copying from ROM/RAM). Fixes several games.

* Fix RTC support for MIPS

* Fix Vita port and likely some Linux/Android hidden issues –

Using an invalid SP makes Vita crash (for an unkown reason) and makes
things like C signal handlers crash (luckily Retroarch doesn’t use
them). It is also a violation of the ABI and not a great idea.
Recycled some little used registers to free SP. Perf should be roughly
the same.

* Fix invalid memory map entries

* Adding Code Breaker cheat support –

This works on both interpreter and dynarec.
Tested in MIPS, ARM and x86, still needs some more testing, some edge
cases can be buggy.

* Fix aligned32 reads in interpreter mode –

An address check was missing to read aligned 32 (stm/ldm) data from
high mem areas (0xX0000000). This fixes SM4 EU that for some reason has
some weird memory access (perhaps a bug?)

* Small optimization (~2-4%) and whitespace cleanup! –

Cleans up a ton of whitespace in cpu.c (like 100KB!) and improves
readability of some massive decode statements.

Added an optimization for PC-relative loads (pool load) in ROM (since
it’s read only and cannot possibily change) that directly emits an
immediate load. This is way faster, specially in MIPS/x86, ARM can be
even faster if we rewrite the immediate load macros to also use a pool.

* Add dedicated RetroPad fast-forward button

* Fix ARM dynarec unaligned 32 bit loads –

This might make a handful games slightly slower (but on the upper side
they work now instead of crashing or restarting).
Also while at it, fix some minor stuff in arm stubs for speed.

* Add ROM mirroring and fix mult. cycle count –

This should correct some minor issues in some games.

* Add turbo A/B buttons

Update policy for this core
This core is maintained by libretro.

Beetle Saturn

Beetle Saturn is a Sega Saturn emulator core.

* Backport VDP2 render thread ‘busy wait’ performance fix
* Fix hang on boot when rewind or runahead is enabled
* Prevent hang when launching Blast Wind

Update policy for this core
This core is maintained by libretro.

bsnes

bsnes is a Super Nintendo/Super Famicom emulator core.

* Refactor and upgrade Core Options (version 1.3) with sublabels and translation support

Update policy for this core
This core is maintained by libretro.

SMS Plus GX

SMSPlus GX is a Sega Master System/Game Gear emulator core.

* SMS: Center the image when remove border option is enabled
* Merge recent changes from upstream

Update policy for this core
This core is maintained by libretro.

LRMAME 2000

LRMAME2000 is an arcade emulator based on an old version of MAME circa 2000.

* Changed /samples dir to be in the system directory (parity with other MAME cores)

LRMAME 2003

LRMAME2003 is an arcade emulator core based on the original MAME 0.78 source code base .

Contra protection improvements –

furrtek Added Konami 007452 multiplier/divider fixes rolling mines trajectories in contra

Rather than add a whole new device im just hooking it directly into the Contra driver for this core. Combat School Flak Attack and WACLeMans also use this but for now im focusing on Contra as the game improvements are known

Whereas with the others the benefits over the original simulations are not as yet known if indeed there are any.

Update policy for this core
This core is maintained by the LRMAME2003 Plus team.

Mesen

Mesen is a Nintendo Entertainment System/Famicom emulator core.

* Fix Twin Dragons support. Also fixes Mystic Origins.

Update policy for this core
This core is maintained by the Libretro team.

Stella 2014

Stella is an Atari 2600 emulator core.

Before, the core supported analog paddle input when using gamepads (#71), with relative paddle motion corresponding to analog stick displacement.

Unfortunately, this is incompatible with real, physical paddles (Stelladaptor, iCode, etc.) , which require absolute positioning to function correctly.

Now, it enables support for these devices by adding a new virtual controller type. In Quick Menu > Controls > Port x Controls, Device Type can be set to Gamepad for regular input, or Paddles (Stelladaptor) for real paddle input.

When Paddles (Stelladaptor) is selected, inputs are mapped as follows (this is the normal convention for Atari controller adaptors):

Port 1:

P1 Fire: RetroPad A
P1 Wheel: RetroPad Left Analog X
P2 Fire: RetroPad B
P2 Wheel: RetroPad Left Analog Y
Port 2:

P3 Fire: RetroPad A
P3 Wheel: RetroPad Left Analog X
P4 Fire: RetroPad B
P4 Wheel: RetroPad Left Analog Y

Note that 4-player games are now supported.

Update policy for this core
This core is maintained by the Libretro team.

FBAlpha 2012 CPS3

This is a cut-down version of FBAlpha 2012. Only CPS3 emulation support has been kept in this core. It is mainly meant to be used with Capcom Play System III games.

* (3DS) Use custom memory allocator

Re-implement custom memory allocator initially from FBAlpha 2012 Neogeo.

Update policy for this core
This core is maintained by the Libretro team.

Other updates

* Atari800 (Update strategy: Maintained by Libretro)
* bsnes HD (Update strategy: Upstream)
* DOSbox Core (Update strategy: Maintained by RealNC)
* EasyRPG (Update strategy: Upstream)
* FBNeo (Update strategy: Upstream)
* LRMAME (Update strategy: Maintained by Libretro – updated to 0.330)
* LRMAME2003 Plus (Update Strategy: Maintained by LRMAME2003 Plus team)
* Mupen64Plus Next (Update Strategy: Maintained by m4xw)
* Picodrive (Update strategy: Maintained by Libretro)
* PPSSPP (Update strategy: Upstream)
* PX68K (Update strategy: Maintained by Libretro/NegativeExponent)
* Kronos (Update strategy: Upstream)
* Stella (Update strategy: Upstream)
* UAE (Update strategy: Maintained by Libretro)
* VICE
* VBA-M (Update Strategy: Maintained by Libretro/NegativeExponent)

If we forgot any updates to any core during this period, let us know and we will update this article. Thanks.

RetroArch 1.9.3 released!


RetroArch 1.9.3 has just been released.

Grab it here.

Remember that this project exists for the benefit of our users, and that we wouldn’t keep doing this were it not for spreading the love with our users. This project exists because of your support and belief in us to keep going doing great things. If you’d like to show your support, consider donating to us. Check here in order to learn more. In addition to being able to support us on Patreon, there is now also the option to sponsor us on Github Sponsors! You can also help us out by buying some of our merch on our Teespring store!

Release notes

We have a roadmap now (see here), and you can expect more frequent releases from this point on. We are aiming for a new version every two weeks. We were initially aiming to have the Lakka version ready to be released concurrently with this version, but had to postpone it. We are definitely aiming to have a new Lakka version ready with future releases of RetroArch though.

We have implemented core info file caching and enabled this by default for the console platforms. This should lead to significantly reduced startup times and content loading after the first initial startup. The first time RetroArch starts up (and/or new core info files are added), it will need to build/rebuild the cache. After that though, it only has one cached file it has to load at startup instead of having to sequentially read every single core info file. This used to take a very long time on platforms with slow disk I/O (such as game consoles). PSP/Vita and 3DS users in particular will definitely notice these improvements.

WiiU users get a couple of new cores, such as bk (the Oberon RISC emu), xRick (the Rick Dangerous game engine reimplementation), and REminiscence (the Flashback game engine reimplementation).

Highlights

Core info file caching

It seems that on platforms with slow disk I/O (mostly all game consoles), it takes the same amount of time to load a file no matter how large it is (within reason) – so ~300 ms to load one info file, and the same ~300 ms to load everything stored in one cache file. Loading ~80 info files takes forever – and basically constitutes almost all the startup time on these systems. This reality is what has led to a new feature called ‘core info file cache’. An anecdotal report from the person who implemented this – previously without core info file caching t took 29 seconds just to boot XMB. With the core info file cache, it only takes 12 seconds. On RGUI, it boots in 3 seconds or less. Significant reductions to be sure.

Things you should know about the core info file caching

  • Core info cache can now be enabled/disabled on all platforms via a new Settings > Core > Cache Core Info Files option
  • Core info cache file are stored as core_info.cache
  • The core info cache file is compressed (rzip) to further reduce disk I/O
  • The presence of a core_info.refresh file in the core info directory will force a one-time refresh of the info cache. This file is generated automatically when toggling on the Cache Core Info Files option, and we will also add it to core info file packaging such that updating info files (either manually or via the online updater) will force a refresh
  • The core info cache no longer contains ‘core is locked’ and ‘firmware missing’ data fields; these are ‘dynamic’ properties that must be determined at runtime
  • The ‘core is locked’ status is now determined on core info initialisation by parsing the core directory listing, rather than by performing individual ‘lock file exists’ checks. This minimises file I/O, and greatly improves performance on devices with slow storage
  • While parsing the core info cache file, we now avoid unnecessary strdup()s when adding entries to the resultant cache list

(Static Platforms) Add option to not restart RetroArch when launching content with the currently loaded core

Before, whenever content was loaded using a static build of RetroArch (i.e. most of the console ports), a new process is forked. This basically means that RetroArch in it’s entirety is reloaded, which can be quite slow.

This kind of ‘reload’ is required when changing cores (since each is a stand-alone application) – but if the core we want to launch is already loaded, then it’s wasted effort.

1.9.3 adds a new Always Reload Core on Run Content option under Settings > Cores on statically built platforms. When enabled (by default on consoles), the current existing behaviour is maintained. When disabled, launching content with a core that is already loaded will skip the process fork/reinitialisation and just load the content directly.

On an o3DS testing setup, this reduces content load times by 60%-70%, depending upon the core.

Important caveats:

  • There is a significant annoyance in the way that static builds work. If you run the ‘top level’ RetroArch app, then everything works as you would expect – but if you run a core directly (e.g. a specific core cia on 3DS), RetroArch doesn’t actually have any way of knowing which core is currently loaded. It ‘assumes’ you are running the last loaded core – which may not be the case. If it isn’t, the first ‘run content’ operation with Always Reload Core on Run Content disabled will cause an unnecessary fork (but the next ‘run content’ will behave correctly). Unfortunately there is nothing we can do about this…

Changelog

1.9.3

  • 3DS: Disable menu screensaver animations in XMB/GLUI
  • COMMAND: Initialize netcmd->cmd_source_len before recvfrom()
  • CONTENT LOADING/STATICALLY LINKED: Ensure ‘Always Reload Core on Run Content’ setting is applied when loading content via the file browser
  • CONTENT LOADING/EMSCRIPTEN: Fix content loading via file browser on platforms with ‘broken’ core handling (i.e. emscripten)
  • CORE INFO: Skip whitespace when writing compressed core info cache files
  • CORE INFO/FILE IO: Core Info cache; significant file I/O performance improvements on systems with slow disk file I/O
  • CORE INFO/FILE IO: Enable core info cache by default on all ‘console’ platforms
  • FREEBSD: FreeBSD build fix
  • LAKKA: Support for tweaking CPU governors/scaling policies
  • LAKKA: This adds managed policies and settings to store them and reload them at startup
  • LIBRETRO API: Add API extension for cores to override frontend fast-forward state
  • MENU/RGUI: Fix saving of config files/overrides when ‘Lock Menu Aspect Ratio’ is enabled
  • SHADERS: Fix ‘Auto-Shader Delay’ functionality
  • UWP/D3D11: Disable mipmap generation
  • UWP/XBOX: Add ‘Force 4K resolution’ option (Force the resolution to the fullscreen size on Xbox, if set to 0, a fixed value of 3840 x 2160 will be used)