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 to our users. This project exists because of your support and belief in us to keep going doing great things. We have always prioritized the endusers experience, and unlike others, we have never emburdened them with in-app ads, monetization SDKs or paywalled features, and we intend to continue to do so. 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!
Changelog
1.21.0
3DS: Fix unique IDs for newer cores
3DS: Enable TLS (SSL)
3DS: Fix UI freeze when threaded rendering is enabled
3DS: Fix crash on load content
3DS: Other minor fixes
APPLE: Enable Vulkan emulated mailbox
APPLE: Include b2 core in App Store builds
APPLE: CoreMIDI driver for IOS/MacOS
APPLE: CoreLocation driver for IOS/MacOS
AUTOCONF: Enable alternative display name in autoconfig files
AUTOCONF: Make autoconfig failure messages optional
AUDIO: Option to mute on rewind
AUDIO/PIPEWIRE: Fix app launch when pipewire service is stopped
AUDIO/PIPEWIRE: Fix speedup with threaded video mode
AUDIO/PIPEWIRE: Fix latency setting and microphone handling
AUDIO/PIPEWIRE: Pass the new rate to the audio driver
CAMERA: Add PipeWire camera driver
CAMERA: Add ffmpeg camera driver
CHEAT: Rewrite part of cheat_manager_load_cb_second_pass()
CHEEVOS: Include achievement state in netplay states
CHEEVOS: Fix crash when entering achievements in quick menu while client is not present
CHEEVOS: Restore cheevos_badges_enable for HAVE_GFX_WIDGETS builds
CLI: Allow –entryslot to fall back to normal states
CLOUDSYNC: Fix Windows path issues
CLOUDSYNC: Workaround for duplicated requests bug
CLOUDSYNC: Workaround for 301 redirects
CLOUDSYNC: Handle ignored directories properly
EMSCRIPTEN: Added new AudioWorklet driver, a fast callback-based audio driver
EMSCRIPTEN: Scale window to correct size
EMSCRIPTEN: Additional platform functions
EMSCRIPTEN: Add new default video context driver: emscriptenwebgl_ctx
EMSCRIPTEN: Add new audio driver: AudioWorklet
EMSCRIPTEN: Add new modernized web player which will eventually replace the existing one
EMSCRIPTEN/RWEBINPUT: Add touch input support
GAMECUBE: Fixes
GENERAL: Fix save state auto increment
GENERAL: Fix softpatching with periods/dots in the file name
GENERAL: Fix compilation with –enable-videocore
GENERAL: Allow asset directory redefinition and other directory overrides via environment variables
GENERAL: Allow override of player 1/2 input with machine learning models (needs recompilation and external library)
GENERAL: Fix performance counter option not remembered between sessions
GENERAL: Create security statement
GENERAL: Fix crash when core is not selected
GENERAL: Use core fps instead of screen refresh for calculating dropped frames
INPUT: Fix a crash when initializing illuminance sensor on Linux
INPUT: Analog-to-digital refactor, fixing behavior when analogs are assigned to keys
Jesse Talavera here again! You may remember me from my work on melonDS DS, McSoftServe, and assorted improvements to RetroArch like microphones and XDelta softpatching. I’ve secretly been developing something brand-new that I’m itching to share with you.
Although RetroArch was designed for retro game emulation, every now and then something comes along that breaks out of that mold. To that end I’d like to introduce ROM Cleaner, a unique utility core that’ll help keep your digital ROM backups running as reliably as the day you dumped them.
As retro gamers, we’re no strangers to data degradation’s many forms. Flash memory loses its charge, tapes decompose, discs rot. But keeping your media in a clean environment will help protect it from time’s relentless siege, and digital backups are no exception! If you find that one of your ROMs is beginning to degrade and won’t boot anymore, simply run it through ROM Cleaner to rid it of the dust that’s accumulated over the years. All you need is a microphone and a set of lungs, and you’ll never have to worry about dirt building up in your digital collection again.
Our mission is to keep yesterday’s games playable and fun for generations, and ROM Cleaner is my latest contribution to that effort. You can get it from RetroArch’s core downloader on supported platforms today. I hope you’ll get just as much use out of it as I am!
Has the same USB ID so that you do not need to reconfigure your software
Has the same mapping, and code logic just faster with greater controller support
Compatible with 4-Play/GP Cables
Advantages over the 4-Play.
Xinput and HID support
Fixed USB 1mS Poll rate
USB 2.0 High Speed
True Force Feedback Ready
No Combo (rumble) fix needed
Retro Arch
The 4-Play Advanced is a drop in replacement for the existing 4-Play for any Retro Arch user. The USB ID and mappings follows the 3.0 layout. As long as you have the mappings loaded, it will work the same way. The 4-Play Advanced has a USB poll rate of 1ms and now uses a hardware based USB chip for a much better force feedback experience. In addition, you can now change to xinput mode instead of HID. The mapping and layout for Xinput would follow the xbox 360 gamepads. This mode uses its own USB ID, so mappings are required but should follow 360 gamepads
We have a brand new PlayStation2 core, LRPS2. It’s a heavily modified version of PCSX2 custom made for the Libretro API, and it currently runs on Windows, macOS and Linux.
The core code is modern and up-to-date unlike the old core and it no longer suffers from the serious drawbacks the older core had.
It supports nearly all the rendering backends for the GSdx renderer: Vulkan on Windows/macOS/Linux, Direct3D 11 and 12 on Windows, and OpenGL on Windows/Linux.
For those interested, you can also read our compendium article here posted earlier today.
All the screenshots below were taken with the paraLLEl-GS renderer and the following settings: 16x SSAA, paraLLEl experimental high-res scanout turned on. Shader preset used is: presets/fsr/fsr-aa-lv2-bspline-4taps.slangp.
How to set it up/use it
On platforms where the core is available (that is, Windows, Linux, and MacOS; it is NOT available for Android or iOS), go to the online updater and scroll down to ‘Update Core Info Files.’ This will ensure that the core shows up properly under the correct name in the menu. Then, head over to the online updater’s ‘Core Downloader’ and scroll down to ‘Sony – Playstation 2 (LRPS)’ to download the actual core. Next, go to the online updater’s ‘Core System Files Downloader’ and get the LRPS2.zip bundle. This bundle will automatically create the ‘pcsx2’ directory in your ‘system’ directory and put the GameIndex.yaml–which includes the various per-game hacks/settings the core and gsDx renderer use for compatibility–inside. It will also create the ‘bios’ directory, inside which you will need to place your PS2 BIOS set. Once that’s done, you’re ready to scan and/or load your games, which can be in a variety of formats, including CHD, but make sure they are not in *.7z, *.rar, *.zip, etc. compressed archives.
How to use it on macOS (Apple Silicon)
On macOS running on Apple Silicon, you must use Rosetta. To run in Rosetta, exit RetroArch, and show it in Finder. Right-click on it and choose “Get Info” from the menu. In the Info screen is a checkbox to “Open using Rosetta”; make sure it is checked.
Once it’s running in Rosetta, you will see the LRPS2 core in the Core Downloader.
Explanation of core options:
System
Fast Boot
Skips BIOS startup screen and boots straight to the game. Disable this if you want to access the PS2 system settings or access the Memory Card manager.
Fast CD/DVD Access
Fast CD/DVD access/seek times. A small handful of games will have compatibility problems with this enabled (such as Klonoa 2).
Enable Cheats
Enable cheat files to be read from the ‘cheats’ directory in the system folder. This works the same as mainline PCSX2, it tries to read a cheatfile of the game’s CRC hash followed by the extension ‘.pnach’.
Language Unlock hint – Looks inside LRPS2’s internal database to find language unlocks or override patches for the game. Some examples:
Final Fantasy X International – By enabling this, you can force the game to set the Language to ‘English’ by default. The International version is a Japanese/Asian version of the game that has both Japanese and English language options, but defaults to Japanese by default. It’s basically an undubbed version of the game.
For other games it simply unlocks more language options that are found in the game’s code but never enabled.
Video
Renderer – Select the renderer to use. Restart for the changes to take effect.
Auto – Will use the video driver set in the Libretro frontend (i.e. RetroArch). So if RetroArch is set to Direct3D12, it will try to use the Direct3D12 GSdx renderer. If you set it to Vulkan, it will try to use the Vulkan GSdx renderer.
paraLLEl-GS – Select this to use the new LLE renderer by Themaister. For this to work, you need to make sure your video driver is set to Vulkan in the Libretro frontend (i.e. RetroArch).
Software – Select this to use the software renderer. WARNING: Don’t use this in combination with ‘Vulkan’ or the core will crash at startup. To get out of this, set RetroArch’s video driver to ‘OpenGL’, ‘Direct3D11’ or ‘Direct3D12’, and then make sure to set the ‘Renderer’ to something else.
Deinterlacing – Select a deinterlacing method. Use ‘Automatic’ if unsure what to pick. You can set this to ‘Disabled’ when you’re using a progressive scan mode and absolutely no interlaced images are being used.
No interlacing hint – Looks inside LRPS2’s internal database to find a no-interlacing/progressive scan patch for the game.
Some games have internal progressive scan options. These can usually be enabled by press and holding Cross + Triangle at the start of a game. If the game supports progressive scan, it will then ask if you want to enable this mode. The nointerlacing hint will try to auto-enable this progressive scan mode where possible so you don’t have to manually set it. Not all the codes have been found for every game though so don’t assume this will always be set.
Some games use field rendering (interlaced mode) or are full frame rendering games but still look rather bad in high-res scan out. However, there are fancy patches for some games to disable final output of the downsampled front buffer and instead point the front buffer pointer directly to the higher-resolution back buffer instead. The nointerlacing database has patches like this for games like the Snowblind Engine v2 games (thanks to Agrippa for discovering this) and Tekken Tag Tournament.
Widescreen hint – Looks inside LRPS2’s internal database to find a widescreen patch for the game.
Some games have a built-in widescreen mode. The Widescreen hint tries to enable these modes when possible so the user doesn’t have to manually do it. The list of games that we do this for right now are small.
Most PS2 games implement widescreen modes using Vert-, which means you lose screen real estate in widescreen mode instead of actually gaining it (Jak and Daxter, Ratchet & Clank). Most of the widescreen patches that are in the database try to adhere to Hor+ and in some cases override the game’s original Vert- implementation.
If you set it to 16:10 / 21:9 / 32:9 and it cannot find a patch for that aspect ratio but there is a 16:9 patch available, it will instead apply the 16:9 patch instead as a fallback.
When a widescreen patch is not found for the game inside the database, it will default to ‘stretched’ mode, where it stretches the 4:3 image across a 16:9 aspect ratio. This is of course the worst-case scenario, and when you find the image to be stretched like this, we recommend you turn the Widescreen hint off for that game.
PCRTC Anti-Blur – Disable this for the most accurate output image. Enabling this will attempt to deblur the image. Most noticeable on software renderer and paraLLEl.
Disable Interlace Offset – Debug option. Not recommended to be used by endusers.
The following settings only apply to the gsDX renderer (so NOT paraLLEl-GS)
Video – GSdx
Internal Resolution – Restart for the changes to take effect. Just like it says.
Dithering – You can combat the dithering a bit with these settings.
Blending Accuracy – The higher you set this, the more demands it will place on your GPU. Some games might get away with basic blending while others recommend this to be set far higher. Note that paraLLEl GS always defaults to the highest possible blending accuracy, unlike GSdx. No shortcuts on paraLLEl GS!
Manual Hardware Rendering Fixes – GSdx
Enable Manual Hardware Renderer Fixes – This will disable all the GSdx game-specific settings from the GameIndex.yaml database. Unless you know what you are doing, it is NOT recommend to turn this ON. Note that for paraLLel-GS this is entirely irrelevant, it uses no per-game specific rendering fixes at all and is not reliant on GameIndex.yaml at all.
Emulation
EE Cycle Rate – Overclock or downclock the Emotion Engine CPU (the main PS2 CPU). 130% cycle rate corresponds to cyclerate 1, 180% 2, 300% 2. Depending on the internal ‘uncapped framerate’ patch found, you might need to slightly apply some overclocking here to make sure the game can maintain a consistent framerate.
Game Enhancements hint – Looks inside LRPS2’s internal database to find game enhancement patches for the game. These enhancements include but are not limited to:
QoL Skip cutscenes – Being able to skip a FMV scene by pressing a button (usually X). Some games like God of War 2 normally don’t let you skip cutscenes.
Draw distance/NPCs onscreen. The Dynasty Warriors/Shin Mousou games have various game enhancements patches implemented so that the fog is drawn out further into the distance and more of the scenery can be seen. These games would normally go really aggressive on the distance fog. The patches also increase the maximum amount of NPCs rendered onscreen. Some racing games, like Sega Rally 2006, have draw distance enhancement patches enabled also.
LOD enhancements. Some games use Level of Detail for meshes, like Gran Turismo 4. When we have patches to disable these, we turn them on here. It looks better in high-resolution mode when you don’t see models popping from a low-quality version of the model to a high-quality version depending on their distance from the camera/player.
Uncapped Framerate hint – Looks inside LRPS2’s internal database to find a patch that uncaps the frame rate (or stabilizes it). NOTE: Use this together with the ‘CPU Cycle Rate’ option, most games can run fine at 130% CPU Cycle Rate uncapped while others might need 180% or even 300%.
SSX 3 uses this hint for a ‘no frame skip’ option. The PS2 version of the game normally skips frames on certain demanding scenes of the game. With the emulator we don’t really need to do this so we can just stub out the frame skipping code and enjoy a full 60Hz/60fps everywhere. This in some respects makes this the best version of the game to play now (the PS2 version has enhanced bloom/lighting effects not found on Xbox OG).
Burnout 3/Revenge normally have 30fps menus and crash replays. Enabling this makes them run at 60Hz/60fps (NTSC) or 50Hz/50fps (PAL).
Input
Port 1: Analog Sensitivity: Set this higher or lower if the deadzone on your controller’s analog stick behaves weird.
Port 2: Analog Sensitivity: Same but for port 2.
ParaLLEl-GS – Reimplementing the Graphics Synthesizer in compute
By far the star of the show is paraLLEl-GS. Just like paraLLEl-RDP before it, this is a brand new renderer made by Themaister written entirely as a compute program. It’s written exclusively for the Vulkan graphics API.
For a detailed breakdown on this project, read Themaister’s blog article here (it’s several months old by now though).
The goal and aim of this renderer is to be as accurate as the software renderer, but with additional graphical enhancements. SSAA is by far the biggest standout feature of this renderer. When set to 16x SSAA and high-res scan out enabled, it can eliminate all the shimmering and jaggies on 3D geometry and textures.
With high-res scan out enabled, it is possible to double the resolution. Combine this with SSAA and the final output image quality can often exceed gsDX rendering at much higher internal resolutions. And unlike gsDX, almost no hacks have to be enabled/disabled on a game-specific basis for the game.
Explanation of ParaLLEl-GS core options:
paraLLEl Supersampling – Apply supersampled anti-aliasing (SSAA). Unlike straight upscaling, supersampling retains a coherent visual look where 3D elements have similar resolution as UI elements. For high-res scanout to work, you need at least ‘4x SSAA ordered’ (or higher). Setting this to ‘Native’ disables super sampling.
paraLLEl experimental High-res scan out – Allows upscaling with paraLLEl. Some might require patches on top. Requires Supersampling to be set to at least ‘4x SSAA ordered’ (or higher) for it to work. The higher the SSAA mode, the better this will look, but the more demanding it will be on your GPU
paraLLEl experimental SSAA texture – Feedback higher resolution textures. May help high-res scanout image quality. Highly experimental and may cause rendering glitches.
paraLLEl experimental sharp backbuffer – Attempts to workaround games that add extra blit passes before scanning out. May lead to better image quality in certain games which do this. This option can be hit and miss for some games. For some games like ‘Mahou no Pumpkin’ it will make the output image very sharp and crisp, while with other games it makes either no difference or has some issue. Experiment with this option.
Force LOD Texture 0 – Disable this for traditional hardware mipmapping. Enabling this will bypass mipmapping and always use texture LOD0 instead. The result is better image quality. Only a small handful of games have graphics rendering issues with this enabled.
Frequently Asked Questions (FAQ)
Q: I get a black screen but can hear audio.
A: If you’re using the D3D11 video driver (which is the default video driver on Windows), some users get a black screen instead of video. Switch your video driver to D3D12 (either globally or just for this core via core override) and then reopen the core and content.
Q: ParaLLEl-GS is very slow on my Intel integrated graphics.
A: Yes, unfortunately, Intel IGPs just aren’t very good at compute shaders. Even relatively recent models fail to run at full speed. The software renderer and gsDx renderer are still the best options in this case. For the record, Intel’s new discrete GPU models should handle it just fine.
Q: The software renderer crashes when I use the Vulkan video driver.
A: Yes, this is known but we don’t know why yet. Until we figure it out, you’ll need to swith to the “glcore” driver in Linux or one of the D3D drivers in Windows to use the software renderer reliably.
Q: What about analog face buttons??
A: We’re working on this, but thankfully it’s only usable in a few games and all games are still playable/complete-able without it.
Q: How can I tell what internal patches are being applied on a per-game basis?
A: Currently this is a bit inconvenient. You need to enable Logging in RetroArch and then look at the log output to see if any of the hints (Game Enhancements, Language Unlock, No interlacing, Widescreen) led to patches being applied by LRPS2. Far from all games have been implemented inside the internal database but we intend for this database to grow quite large.
Q: I’m not seeing LRPS2 in the core list.
A: The core is probably not available for your platform. It is available for Windows, Linux (x86_64), and MacOS. It is NOT available for Android or iOS, nor for ARM Linux. If you’re sure it should be there for your platform and you’re still not seeing it, try updating your core info files via the online updater.
Q: How can I improve frame pacing in the core?
A: Try the option ‘Sync to Exact Content Framerate (Settings -> Video -> Synchronization). If you’re using a VRR display, turn VSync Off in RetroArch and make sure Vsync is enabled in the Nvidia driver control panel (if using an nVidia GPU). Some games like Fighting Vipers and Sega Rally 1995 will not behave well with ‘Sync to Exact Content Framerate’ enabled though, so your mileage may vary. Experiment and find out what works best for you.
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 to our users. This project exists because of your support and belief in us to keep going doing great things. We have always prioritized the endusers experience, and unlike others, we have never emburdened them with in-app ads, monetization SDKs or paywalled features, and we intend to continue to do so. 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!
Shader subframes
We’ve added a new CRT beam simulation shader from Mark Rejhon of BlurBusters (blurbusters.com) and Timothy Lottes (creator of the original FXAA shader and the crt-lottes shaders). It leverages RetroArch’s recently added “subframe” shader capabilities to significantly improve motion clarity on modern displays without the typical drawbacks associated with black-frame insertion (BFI) implementations, such as reduced brightness, dulled colors, and risk of image persistence (the non-permanent-but-still-scary cousin of CRT/OLED “burn in”) that occurs on many common LCD panel types.
For more information, read our separate article here.
Illuminance sensor support for Linux
Jesse Talavera here again! I’ve been working on something fun: illuminance sensor support for Linux! Now you can play Boktai with real light, just as intended. Check out this clip of Lunar Knights running on my Steam Deck as I adjust the lights:
☀ Now we’re cooking with sunlight! ☀ melonDS DS’s next update will include solar sensor support (among other things), so look forward to that! Also coming soon after 1.20.0 — camera support for more platforms!
Changelog
1.20.0
AUDIO: Fix audio handling in case of RARCH_NETPLAY_CTL_USE_CORE_PACKET_INTERFACE
AUDIO: Include missing audio filters on some platforms
AUDIO/PIPEWIRE: Add PipeWire audio driver
AUDIO/PIPEWIRE: Add PipeWire microphone driver
APPLE: Hide threaded video setting
APPLE: Use mfi joypad driver by default
APPLE: Include holani, noods, mrboom, yabause, bsnes-jg core in App Store builds
CHEEVOS: Add rarity and points to achievement unlock widget
CHEEVOS: Add rank to leaderboard submission notification
CHEEVOS: Update to rcheevos 11.5
CHEEVOS: Update to rcheevos 11.6
CHEEVOS: Show rcheevos game image in Discord rich presence
CHEEVOS: Use translated strings for achievement messages
CLOUDSYNC: Allow saves and configs to be synced optionally
CLOUDSYNC: Add iCloud cloud sync driver
CLOUDSYNC: Speed up by upload/download in parallel
CLOUDSYNC: Allow thumbnails and system dir to be synced optionally
CLOUDSYNC: Enable CloudSync on Android (non-SSL)
CLOUDSYNC: Add more logs in failure situations
CLOUDSYNC: Fixes for reauthentication and parallel sync
CLOUDSYNC: Fixes for file resurrection
CLOUDSYNC: Enable CloudSync on Windows
CRT/SWITCHRES: Update switchres to 2.2.1
GENERAL: Support for mbedtls v3
GENERAL: Automatic Frame Delay refactor
GENERAL: Remove Frame Rest, obsoleted by Frame Delay refactor
GENERAL: Wrap around auto increment save state indexes when amount of states is limited
GENERAL: Enable CHD hashing for Switch and DOS
GENERAL: Enable auto save state when new content is loaded
GENERAL: Improve Preemptive Frames when pointing device is used
GENERAL: Fix building with menu disabled
HAIKU: Restore Haiku build
INPUT: Allow to select a preferred/reserved device for each player
INPUT: Enable Caps, Num, Scroll Lock modifiers on multiple platforms
INPUT: Autoconfig extension with alternative name/vid/pid
INPUT: Fix autoconfig profile saving when device is not in the default port
INPUT: Change classic turbo mode to work independently of which key was pressed first
INPUT: Pointer and lightgun handling sanitization on Windows and Linux desktop platforms. These input drivers will now report edge and offscreen positions in a harmonized way, and will not return 0 instead.
INPUT/DINPUT: Fix detection of quick shift key presses
INPUT/HID: Fix crash on macOS when disconnecting the controller a second time
INPUT/LINUX: Add illuminance sensor support to the linuxraw, sdl2, udev, and x11 input drivers
INPUT/Remaps: Sort and apply remaps based on the specific connected controller
INPUT/UDEV: Enable mouse buttons 4 and 5
INPUT/WAYLAND: Enable horizontal scroll and mouse buttons 4 and 5
INPUT/WAYLAND: Simulate lightgun input for cores
INPUT/WAYLAND: Support for cursor-shape-v1 and content-type-v1 protocol
INPUT/X11: Enable mouse buttons 4 and 5
iOS: Enable vibration by default
iOS: Better handling of physical mice/magic keyboard trackpad
iOS: Mouse grab fixes
iOS: Fix mouse cursor movement when button is held down
iOS: Fix microphone support request and entitlement
iOS: Enable compilation back to iOS 12
iOS: Fix OpenGL ES context usage on iOS 9
iOS/TVOS: Add Opera to App Store build
iOS/TVOS: Bring NEON defines in line with ARM64
iOS/TVOS: Flush save files on backgrounding
LIBRETRO: Support RETRO_ENVIRONMENT_GET_FILE_BROWSER_START_DIRECTORY
LIBRETRO: Support “/” as a file extension for loading a directory as content
FFMPEG: Fix crash when playing back a file with 96 kHz audio
MACOS: New display server, including support for ProMotion 120Hz V-Sync
MACOS: Create App Store build
MACOS: Generate key up events for command keys
MIDI: Fix long messages (SysEx) in WinMM driver
MIDI: Fix lingering notes on close in Alsa driver
MENU: Support local thumbnails in other image formats than png (jpg/jpeg, bmp, tga)
MENU: Delete also savestate thumbnails when savestates are garbage collected
MENU: Option to disable analog stick menu navigation
MENU: Fix pause toggle to not clear fast forward state
MENU: Fix search playlist index in XMB/Ozone
MENU: Fix renamed entry display
MENU: Filter unknown extensions also inside zip files
MENU: Add icons for present / missing firmware on core info page
MENU: Ignore other hotkeys when menu toggle is pressed
MENU: Fix menu jumping when using L3+R3 combo
MENU: System Information now only shows features relevant for the platform
MENU/GLUI: Make Show Sublabels options effective
MENU/GLUI: Icon fixes
MENU/XMB: Allow playlist icons to be individually customized, by looking for images in Named_Logos
MENU/OZONE: Add Selenium theme for Ozone
MENU/OZONE: Touchscreen improvements
MENU/OZONE: Add a touch-sensitive Resume button in the lower right corner
NETPLAY: Add East Asian relay server
OVERLAY: Add option to load overlay based on system name
PS2: Fix several broken cores depending on pthread
QT: Enable building with Qt6
QT: Fix input panel
RECORDING: New WAV recording driver (audio only)
REMOTE RETROPAD: Add gyro/acceleration/light sensor test screen
REMOTE RETROPAD: Add pointer test screen
REPLAY: Replay format extended to support external tools
TVOS: Support bluetooth keyboards on tvOS
TVOS: Fixes to run correctly on TVOS13
TVOS: Better handling of Siri remote
TVOS: WebDAV server for adding files more easily
TVOS: Add Settings.app option to reset retroarch.cfg
TVOS: Bring minimum tvos version down to 13.0
VIDEO: Show and use exact refresh rate (3 decimals) and interlace/doublestrike where available
VIDEO: Allow setting viewport bias to offset viewport horizontally/vertically
VIDEO: Support viewport bias also with integer overscale and custom aspect ratios
VIDEO: Use shader path from CLI for shader cycling
We are excited to introduce a new shader that significantly improves motion clarity on modern displays, without the typical drawbacks associated with black-frame insertion (BFI) implementations. This shader is the work of Mark Rejhon from BlurBusters (blurbusters.com) and Timothy Lottes (creator of the original FXAA shader and the crt-lottes shaders). It leverages RetroArch’s recently added “subframe” shader capabilities, enabling it to operate at multiples of the standard content framerate.
NOTE: Make sure you use RetroArch 1.20.0 or a more recent version (any nightly will do). Previous versions do not support the Shader Sub-frames feature that this shader relies on.
Acronyms used: BFI (Black-Frame insertion), FXAA (Fast Approximate Anti Aliasing)
If you have a high-refresh-rate monitor (120 Hz or higher) and want to try it in RetroArch, follow these steps:
Go to Settings > Video > Synchronization and enable the “Shader Sub-frames” option that matches your monitor’s refresh rate.
Do not adjust the “Rolling Scanline Simulation” option, as it is unrelated.
Load your desired core and content, then open the quick menu. Scroll down to Shaders and select Load Preset.
You can find the shader in the subframe-bfi directory, named “crt-beam-simulator.slangp.
If you’d like to combine this shader with others (e.g., your favorite CRT shader), you can usually prepend it to other presets without issue.
You can also select any of the pre-made presets that use the CRT beamracing shader. You can find these under shaders_slang/presets/crt-beam-simulator.
Once it’s up and running, the shader will need some tuning based on your specific display. It includes runtime parameters that allow you to adjust the gamma to achieve a neutral image (i.e., eliminating any unusual dark lines) and fine-tune the trade-off between brightness and motion clarity. For 120 Hz monitors (2 subframes), a value of ~0.5 works well, while ~0.7 is ideal for 240 Hz monitors (4 subframes).
Some of the key advantages of this shader over conventional BFI include:
Less flicker: The shader is much smoother and more forgiving of occasional frame drops.
Works with arbitrary refresh rates: RetroArch’s subframe feature is limited to integer values, but the shader automatically adjusts to match your subframe setting.
Prevents image persistence: It includes a small offset to cycle timing to prevent image persistence (often mistakenly called “burn-in”) on common IPS LCD panels. This issue is not permanent, like CRT burn-in, but can still be concerning.
Not all flat-panel monitors are at risk of image persistence, which is caused by voltage accumulation in the panel caused by the on/off flickering. OLED panels, for example, are unaffected, as are monitors running at odd integer multiples of 60 Hz, such as 180 Hz. If you’re using one of these displays, we’ve included a runtime parameter to disable the cycle timing offset, which stops the simulated raster line from rolling up the screen. There is also a parameter to adjust the position of the raster line, so you can place it in the least obtrusive spot for your setup.
If you encounter any issues with the shader, Mr. Rejhon has an FAQ and troubleshooting guide available on his GitHub repository: https://github.com/blurbusters/crt-beam-simulator/issues/4. You can also seek help through our usual support channels (Discord, Reddit, or the Libretro forums).
See also this video from a person quite knowledgeable in display technologies.
The PlayStation2 is a system designed almost entirely from the ground up for use with CRT TVs. Like any other game console built around analog video output, it is not designed around pixels or resolution, but scanlines and timing. Yes, there is a way to attach a VGA monitor for the official PS2 Linux toolkit so there are some VESA display modes as well, but this is more of an afterthought, and almost no real commercial game used this.
Acronyms used in this article: PS2 (PlayStation2), CRT (Cathode Ray Tube, old TVs that were replaced by HDTVs), GS (Graphics Synthesizer, the PS2’s GPU), PAL (European television signal for CRT TVs), NTSC (American television signal for CRT TVs in America/Japan), CRTC (Cathode Ray Tube Controller, the PS2 GPU has this), EDTV (Enhanced Definition TV or Extended Definition TV, an SDTV that supported progressive scan display modes), VU0/VU1 (Vector Unit 0/Vector Unit 1, two SIMD coprocessors of the PS2)
Sticking locked to 60fps to avoid bad image quality
The PlayStation2’s 4MB embedded VRAM for the Graphics Synthesizer (its GPU) was usually not big enough to hold a full 640×480 framebuffer (or something even bigger). Sony would insist developers not think of it as VRAM but rather a scratchpad, but there’s still only so much you can do with 4MB for render targets.
However, the bandwidth for the GS was unmatched, things like alpha blending, multipasses and framebuffer copies which are expensive on most other GPUs was nearly free on the PS2. In fact, many games like Driv3r abuse some of the GS’ strengths in ways that would bring any other GPU down to its knees. Thanks to its fully programmable geometry pipeline because of the two vector units (VU0 and VU1), the PS2 had hardware features like mesh shaders that we have only started to see being introduced on hardware like the Geforce RTX 20 series almost 18 years later. But we digress.
Developers were almost incentivized by the hardware to make sure their games maintained a solid 60Hz/60fps on NTSC (or 50Hz/50fps on PAL). How did Sony do this? It was perhaps not an intentional initiative but the end result was the same. For one, early versions of the SDK only supported interlaced scanline modes which required 60Hz to get 640×448. Later on, game developers had the option of either using frame mode (full frames) or field rendered mode (interlaced frames).
Field rendering being interlaced means the memory requirements per frame could be halved because the frame is output at 640×240 or even as low as 512×224. This was important because like we said before, the PS2’s GPU only had 4MB of embedded DRAM to work with, and you had to store your framebuffers there. A further benefit is the time needed to render the final output image is also reduced. So to many developers it seemed like field rendering mode was the way to go if you wanted to make a fast performing game on the PS2. So where is the catch? Here comes the big caveat and why PS2 games rarely skip a beat and try to ensure a perfectly locked 60fps. If you miss a frame and the previous one has to be displayed twice, you will see the whole image shift position Y by 1 line. It was therefore imperative to ensure this did NOT happen. So what most games would try to do is instead internally slow down the game by skipping frames when the game was in danger of not maintaining its 60fps target (like SSX 3) but continue to aim at a 60Hz/60fps target.
The other option was frame mode, rendering full frames. Render times obviously go up compared to field rendered mode because you’re rendering full fat frames (640×448 or 512×448), and therefore it might be harder to hit a consistent 60fps vs. field rendering mode. However, the system is more forgiving when you don’t render a new frame in time. The screen would just end up showing the second field from the previous frame.
So, to recap, if the game could maintain a consistently frame paced 60fps for a game, field rendering mode (i.e. interlaced mode) would look as expected, your CRT would blend the half frames and make it look like a full frame. The average enduser would be none the wiser about all the internal dealings of how a CRT assembles and finally outputs a picture, and you have the big advantage that this mode is faster than frame mode and therefore it’s easier to aim for a high framerate like 60fps. If the frame rate would be all over the place, it would lead to a bad picture like discussed in the earlier paragraphs, therefore it was on the developer to make sure you either slow the game internally down or you make sure it runs at a rock solid framerate.
Field rendering being a viable and fast option like this for PS2 as long as you could ensure 60fps/60Hz meant CRT saved the day and PS2 could get away with its generally unimpressive display resolutions.
It has not gone unnoticed by many that PlayStation2 has by far the largest amount of 60fps/60Hz games available (especially on launch day). Turns out there was a technical reason behind this that forced developer’s hand as much as it was developers really wanting to push themselves to the limit.
So if you ever wondered why PS2 games seem to so rarely miss their frametime targets while framerates jump all over the place on other consoles (even Xbox OG and GameCube, its two competitors from that generation), now you know.
We remember at the time PS2 launch games drawing heavy criticism at launch for jagged edges ( colloquially referred to as ‘jaggies’) and the lack of anti-aliasing, especially compared to the Dreamcast. What compounded this problem was that many game magazines and journalists could only do single frame capture. So when they took screenshots or pictures, they would only get half the fields in their pictures. So you’d get bad screenshots in magazines with only the odd or even lines being shown, leading to PS2 games looking much more jaggy in print than they actually did on a real screen. In reality the problem was not so bad, but the lower output resolution to fit in GS eDRAM probably did not help with the misunderstandings and misconceptions.
Widescreen, CRTs and the PS2
Let’s discuss widescreen display modes now and their use on CRT TVs. While a few PlayStation1 games had been adventurous and started implementing widescreen modes, it could be safely assumed that up until now the vast majority of console games were all designed around 4:3 aspect ratios. However, this was soon about to change, thanks in no small part to the PS2. The PS2 doubled as a DVD player and the term ‘anamorphic widescreen’ started being thrown around a lot. Widescreen 16:9 CRT TVs started becoming more mainstream around the early to mid ‘00s. Most games made for PS2 were still designed around a 4:3 aspect ratio of course, but gradually more and more started offering built-in widescreen modes as demand grew. There are 3 general ways the PS2 can go about displaying a widescreen picture (or in general really):
Hor+ (Hor Plus) – Extends the horizontal sides of the screen to fill out the screen. Usually the best approach (and almost never used on the real PS2, which is why we need all these widescreen patches)
Vert- (Vert Minus) – Chops off some of the top and bottom sides of the screen while zooming in on the center
Hor+ and Vert- (Hor Plus + Vert Minus) – A bit of both
The vast majority of PS2 games unsurprisingly opt for the ‘worst’ of these 3 options when implementing a widescreen mode, Vert-. In some rare cases you will see the 3rd option (Hor+ and Vert-) used as well. Games like Tekken 5 therefore have a ‘quasi-widescreen’ mode, where you lose parts of the screen at the top and bottom that are considered unimportant to the gameplay but then it zooms in slightly in the center to make it fit within a 16:9 aspect ratio. All Ratchet & Clank and Jak and Daxter games are Vert- as well.
It was of course possible to do a Hor+ widescreen game on a PS2, but the developer had to consider system resources, GS embedded VRAM usage, etc. Zooming/scaling was free on the GS and chopping off some parts of the image prob made sure things still fit within the 4MB GS VRAM, so Vert- was probably the easiest solution. With Hor+ also the horizontal resolution comes into play. The more you extend the horizontal sides of the screen, the higher your horizontal resolution needs to be to still maintain a good picture quality. And the PS2 already relied on the CRT’s ability to make interleaved scanlines look really good to get away with lower than average resolutions.
Below you see Tekken 5’s built-in ‘widescreen’ mode. This is how it would look like on a real PS2 with a widescreen CRT TV. As you can see, this shows all the signs of a Vert- aspect ratio. Parts of the top and bottom are cropped while the image is zoomed in on the center. The two characters appear much larger than they would in 4:3 mode. Widescreen on 6th generation consoles was often an exercise in frustration for the enthusiast. So many games would simply give you Vert- and not really take advantage of the extra screen estate.
Below you will see the ‘correct’ widescreen mode, this is an internal widescreen patch in the LRPS2 core. It corrects the widescreen mode to Hor+. Now more of the game world is being rendered onscreen because the image is extended horizontally, no cropping is being done.
Progressive scan
The PS2 released near the tail end of the CRT TV’s life. HD-ready LCD TVs would not start arriving until 2005 and so TV makers were still trying to push the CRT forward in ways they could. As we have established before, CRT TVs are analog video. To make the move to digital television (DTV) on a CRT, new specifications such as EDTV were necessary. EDTV stood for Enhanced-definition television or Extended Definition Television. Basically, in practice it meant that SDTVs were being made that could support 480p and 576p-line signals in progressive scan. Around 2001, progressive scan-capable CRT TVs started being sold, and games started taking advantage of this.
You needed either a component cable (on NTSC TVs) or RGB SCART cables (Japanese and European TVs) in order to be able to use progressive scan display modes. Composite and RF-AV cables did not support this feature.
By pressing and holding X and Triangle at startup, a progressive scan-supported game would ask the user to choose between normal and progressive scan mode. Progressive scan modes are non-interlaced full frame modes, therefore there would be none of the interlacing artefacts and you’d get full-height backbuffers.
The only disadvantage some of these progressive scan-capable games usually have is that sometimes they reduce the framebuffer depth to 16bpp or lower so that everything can still fit inside the Graphics Synthesizer’s 4MB embedded eDRAM. This is not a general rule but some games do make that tradeoff, so you’re trading no interlacing artefacts for a somewhat less high quality final output image (I.e. more color banding).
On average though, progressive scan would still look better than interlaced mode to most people. Some games like Valkyrie Profile 2 and Gran Turismo 4 would even offer 1080i progressive scan modes. Note that this is a bit deceptive. This mode doesn’t actually make the PS2 output at a full 1920×1080 resolution, it’s just a bit of advanced framebuffer shenanigans to make it ‘look’ higher res than it actually is. For these games, 480p progressive scan mode usually looks better on modern displays.
Let’s for instance analyze Gran Turismo 4’s ‘1080i’ mode. The internal render resolution is actually 640 x 540. The GS’ CRTC then magnifies this to ‘1920×1080’. 640 is ‘magnified’ to 1920 via a Magnification Integer (MAGH) of ‘3’. So 640 * 3 = 1.920. The vertical resolution 540 meanwhile is magnified either by a Magnification Integer (MAGV) of ‘2’ (540 x 2 = 1080), or the interlaced framebuffer switch. So it’s basically a bit of GS CRTC zoom scaling going on. On a CRT this probably looked convincing enough at the time.
Europe and progressive scan (or the lack thereof)
Note that for European versions of the game, progressive scan modes would sometimes be stripped out or removed (God of War 2, Soul Calibur 3). This was probably because of the low adoption rates of progressive scan-capable TVs.
Europe and PAL CRTs (50Hz vs 60Hz)
In fact Europeans had plenty of other issues on top. For those that don’t know, in Europe they used PAL signal CRT TVs while in Japan and the United States, NTSC signal CRT TVs were the standard. PAL ran at 50Hz while NTSC ran at 60Hz.
When PS2 launched in Europe, most Dreamcast games already offered the choice between a PAL 50Hz mode and a PAL60 mode. PAL60 (on TVs that supported it) would give a 60Hz image, thereby avoiding the 16.9% reduction in frame rate for many PAL conversions and the additional letterboxes. The added letterboxing was because PAL typically had a higher output resolution than NTSC. However, games most of the time would not bother taking advantage of this as they were either already nearing the ceiling on system resources or simply because they didn’t care about the European/PAL market enough to cater to them.
The situation on PS2 was more complicated. PAL60 was not a real standard so Sony refused to back it. This meant that most PS2 launch games (prob all of them) sadly did not have any 60Hz options, so we were stuck with 50Hz for a while.
Developers that were usually good about providing PAL-optimized games were UK developers like Psygnosis (Wipeout, Destruction Derby), Core Design (Tomb Raider) and Rockstar/DMA Design (Grand Theft Auto). You’d get a 50Hz mode with more scan lines being rendered than the NTSC version. So you’d get better image quality than the NTSC version. However, the game would still run slower because of 50Hz. Some developers would compensate for this by tweaking the game speed, but regardless in general it would almost usually always be worse than the same game being ran at 60Hz.
No PAL60 for PS2, only NTSC for you
Anyway, around 2002 more and more games started having options at startup allowing you to choose between a 50Hz and 60Hz mode, like ICO. How the PS2 dealt with this compared to the Dreamcast was that instead of allowing you to choose between PAL and PAL60 modes, the game would try to switch to NTSC 480i mode instead. Most televisions sold in Europe near the late ’90s actually supported both PAL and NTSC, so this wasn’t much of a compatibility issue. The games that still didn’t offer these PAL/NTSC selectors (like Silent Hill 2 and Metal Gear Solid 2) would put a bit more effort into their PAL conversions and not have the dreaded letterboxing. The 50Hz/60Hz mode was not an easy thing to crack for many developers. Developers like Square would complain about having to ship a 50Hz and 60Hz version of a FMV scene, and because their games were so front loaded with high-quality big FMV scenes, this was not really possible to fit on the DVD. This is the reason why games like Final Fantasy X sticked to 50Hz despite the developer being aware of the growing demand for NTSC 60Hz mode. Eventually the games that would not have these 50Hz/60Hz toggles would become the exception to the rule.
Moving to LCD/HDTVs in the mid ‘00s for the 7th generation
The industry-wide move from CRTs to LCD TVs was a rough one. This happened sometime around 2005 when new consoles were being prepared. The PS2 of course was still around and wouldn’t really die until like late 2007. There were definitely advantages for the upcoming 7th generation consoles, like the PlayStation3 and Xbox 360. Gone were the days of PAL vs. NTSC. Europeans would no longer have to worry if a game would implement a PAL60/60Hz mode. As long as you hook up your HDMI-capable game console to the HDMI-capable display, your game would output at 60Hz. And of course there was the promise of non-interlaced high resolutions by default. Not a lot of people ever had a progressive scan-capable TV, so this would be their first time seeing a 480p or 720p image on a television.
It would take time for people to catch on, but early LCD HD-ready TVs were often of very poor quality with high amounts of latency and ghosting. CRT-based game consoles (such as the PS2) looked especially poor on them. In fact, for the older sixth generation consoles, there were almost no advantages to be had using them on a non-CRT display. Feedback blur (used to great effect in many PlayStation2 games for motion blur effects) would look great on a CRT, but looked disastrous on these early LCD screens with the heavy ghosting they were known for. Some games like Soul Calibur 3 would have an in game setting (Software Overdrive) that would try to reduce the afterimage effects on LCD screens.
There was no fixing the latency though or the lack of motion clarity, and this problem would persist for decades. Motion clarity in fact is only now finally being addressed on modern displays for these consoles with the arrival of BlurBusters’ ‘CRT beam racing simulator’ (see our article here for more details). On a modern OLED screen in 202x we can finally enjoy near CRT-like latency with the motion clarity of a CRT (CRT beam simulator shader) AND the looks of a CRT (any advanced CRT shader).
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 to our users. This project exists because of your support and belief in us to keep going doing great things. We have always prioritized the endusers experience, and unlike others, we have never emburdened them with in-app ads, monetization SDKs or paywalled features, and we intend to continue to do so. 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!
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 to our users. This project exists because of your support and belief in us to keep going doing great things. We have always prioritized the endusers experience, and unlike others, we have never emburdened them with in-app ads, monetization SDKs or paywalled features, and we intend to continue to do so. 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!
Changelog
We never got to release 1.18.0 so we’re moving straight to 1.18.0. Therefore we include all the changes for 1.18.0 as well.
1.19.0
AI: Revert AI translation to previous version (fix for translation not working with HW rendered cores)
APPLE: Try to use system preferred language
APPLE: Correctly register for filetypes uniquely
APPLE/MFI: improved Switch Online controller support through MFi
AUDIO: Bring back audio toggling on menu toggle
CHEEVOS: Build a default RetroAchievements memory map when no RetroAchievements game is loaded
CHEEVOS: Update to rcheevos 11.3
CHEEVOS: fix hardcore acting as if it’s enabled when it isn’t
CLOUDSYNC/LINUX: Enable Cloud Sync by default on Linux builds with network (#16456)
CLOUDSYNC/WEBOS: Enable Cloud Sync by default on Linux builds with network (#16456)
CORE: Set compute fps stats logging to debug level
EMSCRIPTEN: Added M2000 to core selection dropdown
FFMPEG: Add compatibility with FFMPEG 7.0
GLSLANG: Remove unneeded ENABLE_HLSL code from glslang
GENERAL: Memory leak: Dynamic allocation from msg_hash_get_help_us_enum was not freed.
INPUT/KEYBOARD: Add support for multimedia keys – Extended RETROK_ values with 18 new items, commonly found on “multimedia” keyboards. Mapping added for SDL, X11, Wayland, dinput, winraw keymaps.
INPUT/MFI: Pressure sensitive left/right triggers
INPUT/MFI: Fix Start + L1/L2/R2 combinations
INPUT/MFI: Support strong and weak rumble
INTL: Fetch translations from Crowdin
INTL: Add Galician and Norwegian to list of languages
LAKKA: Display reboot/shutdown message also when not saving config on exit
LAKKA: Provide update URL and target name at buildtime
LIBRETRO: Add a debug message for the SET_ROTATION callback
macOS: Default Accessibility on if VoiceOver is on
iOS: default audio sync on again, also more mfi logging
iOS: Fix Import Content
iOS: Fix ios-arm64 nightly build crash
iOS: Import content from iCloud
iOS: Fix #16485 crash on startup
iOS: Display app icon in app icon picker in materialui
iOS/tvOS: Various QoL improvements
iOS/tvOS: Fix a couple more path name mangling bugs
iOS/tvOS: Better way of packaging Frameworks
iOS/tvOS: define PACKAGE_VERSION to be App Store MARKETING_VERSION
iOS/tvOS: Fix keyboard handling for app store builds
iOS/tvOS: Fix escaping the sandbox for jailbroken devices
iOS/tvOS: default accessibility on if voice over is enabled
iOS/tvOS: better way of reporting available memory
macOS/iOS/tvOS: enable text-to-speech using AVSpeechSynthesizer.
tvOS: Fix scaling for 720p
MENU: New function in Quick Menu: Add to Playlist
MENU/XMB: New theme: FlatUX, designed to merge FlatUI and Retroactive themes into a single, unified design
NETWORKING/RETROPAD CORE: Fix socket close method
PIXMAN: Update pixman-private.h – patch to fix build issue with musl
PLAYLIST: Cleanup ‘Add to Playlist’ (#16495)
SCANNING: Fix for scanning PSP ISOs (and probably few others)
SAVES: Fix core config saving
SAVES: Fix save new config name when core loaded
SAVESTATES: Increase save state chunk size for all platforms – Even a class 6 or class 10 SD card can handle reads and writes on the order of MB/s, which means a 4KB chunk size is just wasting time in syscalls. This could maybe be fixed with a buffering reader but I don’t feel comfortable tweaking libretro-common’s VFS to handle that. Instead, I thought it would be good to both remove an ifdef and increase the chunk size to 128KB. For cores with small states this will should make state saving virtually instantaneous, and for cores with large states it should be a 32x speedup.
VIDEO: Fix crash when using threaded video – for Mesa 23.2 and later
VIDEO/GL: Fix reinitialization of the threaded gl drivers
VIDEO/VULKAN: Add support for A2R10G10B10 HDR format
VIDEO/VULKAN: Implement HDR readback – screenshot support
WAYLAND: Ignore configure events during splash (fix not remembering window size)
WAYLAND: Use frontend signal handler to quit (fix quit by window close)
WAYLAND: Commit viewport resizes (window resize is more responsive)
UWP: Align MESA to alpha-2-resfix – Remove wrong resolution special handling for OPENGL
UWP: 4K fix: align MESA reading of ClientRect to retroarch procedure, this fixes max resolution being set to 1080p. As reading must be done inside an UI thread and is in fact an async operation which might delay frame generation, the reading itself is doen once and cached, give that changing resolution while the app is running is an unlikely corner-case use
WINDOWS: Windows mouse ungrab must release the mouse instead of confine it to the current desktop (#16488)
WINDOWS: Fix numlock/pause key release events
1.18.0
AI: Fix narrator language when AI translation and menu languages are different
DISK CONTROL: Add option to disable initial disk change
DISK CONTROL: Visibility option for disk control notifications
DRM: Fix mode vrefresh calculation. When using an interlaced/doublescan mode, the vertical refresh rate is mis-calculated.
EMSCRIPTEN: Fix mouse Y parameter translation in rwebinput
INPUT: Fix input state combos including R3 and false triggers of RETROK_UNKNOWN
INPUT: Add a new turbo mode, “Classic (Toggle)”
INPUT: Fix bind hold when axis does not rest at 0
INPUT: Limit axis threshold setting to sensible values
INPUT: Add Overlay Mouse, Lightgun, and Pointer
INPUT/ANDROID: Fix mouse grab behavior on Android
INPUT/LINUXRAW: Fix device name and hotplug reconnect
IOS: Minor iOS JIT availability information
IOS/TVOS: Pause application on applicationWillResignActive
LIBRETRO: Add Doxygen-styled comments to parts of the libretro API
LUA: Update Lua to version 5.3.6
MENU: Add sublabels for input bind common entries
MENU: Don’t load history and favorites if size is 0
MENU: Don’t disable fast forward when entering menu
MENU: Reorder and reduce depth of User Interface menu
MENU/OZONE: Fix sidebar wraparound, visibility after config load, crash after playlist delete
MENU/OZONE: Fix sidebar and sublabel animations
OSX/MACOS: Fix crash on non-Metal build
OSX/MACOS: Add portable.txt as flag for portable install
REMOTE RETROPAD: add display for analog axes, indication of inputs already pressed
SAVES: Allow combining saves in content dir with save sorting
SHADER: Added rolling scan line simulation based on the shader subframe feature. This is implemented with a scrolling scissor rect rather than in the shader itself as this is more efficient although may not work for every shader pass – we may need an option to exclude certain passes. The implementation simply divides the screen up by the number of sub frames and then moves the scissor rect down over the screen over the number of sub frames
TVOS: Force asset re-extraction when cache is deleted
TVOS: Add history and favorites to Top Shelf
TVOS: Fix crash when history item does not have a label
UWP: Enable HAVE_ACCESSIBILITY for UWP builds
UWP: Allow UWP build to work with a modified version of Mesa Gallium D3D12
VIDEO: Add subframe shader support for Vulkan/GLcore/DX10-11-12, enabling shaders to run at higher framerate than the content
VIDEO: Fix restoring fullscreen/windowed setting when unloading override
VIDEO/VULKAN: Fix HDR with Vulkan after reinit
VIDEO/VULKAN: Remove the use of oldSwapchain
VIDEO/GL2: Fix OpenGL ES version detection
WEBDAV: Fixed SEGFAULT in WebDav task sync + type changes
WEBOS: Fix build, add core location on webosbrew.org
WIN32: Fix Alt+Enter not working when menubar is disabled
Hi there, everybody! I’m Jesse Talavera, a libretro contributor. I’m primarily known in this community as the author of melonDS DS, but I’ve got some other exciting projects in the oven as well. Today I’d like to share with you something new that I’ve been working on for some time. Introducing McSoftServe, an emulator for the Taylor C713 soft-serve machines. The C713 is part of a line of soft-serve ice cream machines popularized by a well-known American fast food franchise. These machines are noted for their reliability, ease of use, and maintenance burden. Here’s the experience you can look forward to:
No firmware images required! All functionality is provided by built-in equivalents.
A timing-accurate warming sequence.
Helpful error messages to get you back on track when the emulated machine fails.
McSoftServe is full of surprises, and I can’t wait for you to see them. You can get it directly from within RetroArch today!