Bliss-box 4-play advanced – RetroArch ready : Early bird offer inside

For a limited time you can pre-order yours before production begins. https://bliss-box.net/products/4-play-advanced

 

Compatibility

  • Works with the existing software
  • 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

 

LRPS2 – the new PlayStation2 core with a brand new Vulkan LLE renderer

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.

Videos

RetroArch 1.20.0 release

RetroArch 1.20.0 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 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
  • VIDEO: Pixel perfect integer scaling improvements: axis options, smart mode
  • VIDEO: Add upscale 1.66x filter
  • VIDEO/D3D: Fix GPU screenshots
  • VIDEO/KMS: Force fullscreen when KMS is used
  • VIDEO/OpenGLES: Improve version directive granularity
  • VIDEO/SHADERS: Fix memory leak when shader parameter step is 0.0
  • VIDEO/SHADERS: Add 2 uniforms, OriginalAspect and OriginalAspectRot.
  • VIDEO/SHADERS: Add CoreFPS and FrameTimeDelta uniforms.
  • VIDEO/SLANG: Support optional includes
  • VIDEO/VULKAN: Fix Vulkan window freezes when swapchain becomes suboptimal
  • VIDEO/VULKAN: Prefer IMMEDIATE mode without vsync
  • VIDEO/X11: Support inhibit of Xss screensaver
  • VITA: Enable analog L2/R2 triggers when a DS3 controller is used with PS Vita
  • WAYLAND: Fix segfault when relative pointer is not supported
  • WAYLAND: Use reverse DNS name for desktop file and icon
  • WAYLAND: Commit viewport resizes for more responsive display when resizing window
  • WINDOWS: Fix restart if path to executable contains non-ASCII symbols
  • WINDOWS: Hide directories starting with $ from file browser

RetroArch first program to support BlurBuster’s CRT beam racing simulator shader

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)

The original Shadertoy implementation can be found here: www.shadertoy.com/view/XfKfWd.

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.

PlayStation2 and the CRT TV

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

RetroArch 1.19.1 release

RetroArch 1.19.1 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 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.19.1

  • (WASAPI) Only write when running and fix deadlock

RetroArch 1.19.0 release

RetroArch 1.19.0 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 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
  • CLANG: Fix clang error incompatible-pointer-types-discards-qualifiers
  • 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: Widget position, size, color, icon adjustments
  • MENU: Fix savestate slots in Qt UI
  • 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

Introducing McSoftServe

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!

Vircon32 joins libretro/RetroArch

Written by: Carra

Hi! I’m Carra and I created Vircon32, a new game console. My Vircon32 core was recently integrated into RetroArch, so I thought this could be a good opportunity to talk about both the console itself and my overall experience creating a Libretro core.

What is Vircon32?

Vircon32 is a 32-bit virtual console that I designed from scratch. This console has been designed to be as simple as possible (to keep it accessible), but retaining enough features to allow for interesting games to play.

It is based on the 32-bit generation of home consoles (PSX, N64 and Saturn) but it has some modern “quality of life” features, like a 16:9 screen. In terms of power you could roughly think of Vircon32 as a PSX, but with no 3D capabilities. This console focuses on 2D instead, since even a minimal 3D engine would add too much complexity for a simplified machine like this.

If you are wondering how Vircon32 games look like, here are some screenshots.

Game screenshots from Vircon32

Game screenshots from Vircon32

Why did I do this?

Classic consoles are quite convenient to play: just insert the game! I’d love to have more new, retro-style games, but making games for old consoles can be quite challenging. This is because even something as basic as an NES is actually quite more complex than we think (and way more complex than Vircon32!).

Another option would be “fantasy consoles”. There are quite a few, but sadly most of these get abandoned early or have no games. And the most successful ones (Pico-8 and TIC-80) are too retro for the taste of most players. In my case I’d rather have polished, full-fledged games than experiment with 8-bit restrictions.

Game screenshots from Pico-8 (left) and TIC-80 (right)

Game screenshots from Pico-8 (left) and TIC-80 (right)

Libretro: Going universal

I’d like Vircon32 and its games to be enjoyed by as many people as possible. To this end the console and its games are free and open source. But this is not enough: getting to play Vircon32 should be easy. And for that I need it to be playable in as many platforms as possible.

I was able to make my emulator work in Windows, Linux and Mac. But not everyone will use a PC. What about smartphones and tablets? What about emulation handhelds? For that type of compatibility the easiest way was to develop a Libretro core.

What Libretro can do for you

Libretro is a programming interface. Its overall concept is simple: there is a front-end acting as a manager that will load and run “apps” called cores. Each core is a back-end that will exchange a series of messages with that front-end. Front-ends will take care of most system-specific tasks (initialization, timing, event handling…) and that makes cores much more platform-independent than regular programs.

There are several widely used systems with Libretro front-ends: RetroArch, Kodi, EmuVR… and they usually work on a wide range of platforms. This means that just having a Libretro core can make your content available in many different systems. And from a user’s perspective you also gain the benefit of convenience, since they can access tons of content all from the same place.

Last but not least, working as a Libretro core can give you access to several extended features. Some of them, like screen filters, come totally free. And with relatively low extra effort you can add things like savestates, rewind or netplay.

Vircon32 integrated in EmulationStation

Vircon32 integrated in EmulationStation

How hard is it to make a core?

This may vary for everyone, so I will write about my own experience. I believe that if you have some experience in programming, especially games, you should not find it hard to understand the Libretro API and the concepts is uses. However, be warned that the learning curve can get steep at the beginning until you find out where to start and get the general idea of how a core works.

There does not seem to be any good introductory guide showing a general explanation of how a core works, and the basic flow of messages for a minimal core. Other than a couple of samples at Github, most API features are only explained on the code comments in libretro.h. But of course libretro.h is huge, so all that info can be relatively useless for you until you know what to look for.

Also, keep in mind that many of those comments explain the feature but don’t tell how a core is supposed to use it. You will be expected to look at other cores and “reverse-engineer” what you need to do. Know, however, that most cores are quite complex. It won’t easy to isolate what you are looking for, and you can never be sure if a particular core is doing things the intended way, or using a weird hack.

Getting integrated in RetroArch

Creating a core is useful, but most users won’t actively go find and download your core. They expect to either have the cores they need preinstalled, or be able to download them automatically within RetroArch. You can have that getting your core integrated into RetroArch repositories. But know that this can take a substantial amount of extra work and time.

First you will need to have an online code repository that can be mirrored. You will also have to adapt your build system and learn about the YAML templates that libretro uses. After that, get ready for a good amount of testing. How much will depend on how many different systems you want your core to support. You will also need to prepare a core info file and get it merged. Along the process you may be talking with a few different people for each part of the process, but you can get help from them as well.

In my case, integration was a harder process than usual because I was not trying to integrate a new core for an existing console (like say, some new Game Boy core). Instead I wanted to add a whole new game system to RetroArch, and this involves some extra steps: a game database, thumbnails, the bios when needed, etc.

Build process for RetroArch’s cores: the Libretro Buildbot

Build process for RetroArch’s cores: the Libretro Buildbot

Road for the future

The current Vircon32 core is already compatible with all console games, but in terms of features it is still pretty basic. In time I plan to add a few more advanced features to it. Must haves for me are frameskipping and savestates. Eventually, if possible, it would be nice to also have rewinding and netplay.

About the console itself, the most important areas are already finished: the design is final, it is fully documented and there are working emulators and development tools. Even if all of these can be expanded and improved, the most clear path for Vircon32 to improve is to have more games, and better games!

Also on Steam

The core is also available on Steam here.

Geolith emulator ported to libretro

We have the pleasure of announcing a great new emulator core, the Neo Geo emulator Geolith. The upstream author of the Jolly Good Emulation project broke out this core and ported it to libretro to make it available to as many users as possible, and we’re happy to welcome it into the fold.

Historically, Neo Geo emulation has fallen under the general ‘arcade’ umbrella and has been handled very capably by FBNeo and MAME. However, arcade emulation is significantly more complex than the console emulation that most users are accustomed to (with ever-changing ROMsets consisting of many tiny files in strangely named zip files to keep up with; specific jargon, like “parent ROMs” and “non-merged sets”; and additional files that sometimes go alongside the game ROMs and sometimes need to live in other places), and this added complexity can be enough of a hurdle that some users struggle to have a good experience with all of the bells and whistles they have come to expect.

This is exactly where Geolith stands out, as it uses static, one-file-equals-one-game ROMsets in the .NEO format developed for the NeoSD, and also used by the FPGA-based MiSTer Neo Geo core (note: Geolith is NOT compatible with ROMs in the MAME/FBNeo zip format). So, if you have dumped your games to be compatible with those devices, they should benefit from full libretro database support and all that entails. That is, simple, one-click scan-and-import into a properly named playlist (with properly named games; you’ll see ‘Art of Fighting’ instead of ‘aof’ without any esoteric fiddling with DATs and so forth), with appropriate icons and boxart/thumbnails automatically applied. This separate, dedicated database and playlist makes it easier to find the games you want to play with less time devoted to setup.

Users who cleared the complexity hurdle of arcade emulation have grown accustomed to FBNeo’s tight and feature-filled libretro integration, which sets a very high bar for Neo Geo emulation by providing for a fast, accurate and bug-free experience with full support for some of RetroArch’s more finicky but high-value features, such as rollback-based netplay and runahead/preemptive-frames. Geolith’s author has put in the effort to provide a comparable, robust experience, so users don’t have to compromise when using this new core.

We’re still polishing up a few rough edges on the database (about 20% of games don’t pull thumbnails yet). Just make sure you stop by the online updater and update your core info files and databases before you get started, since Geolith uses some stuff that was added after RetroArch’s 1.17.0 stable release.

UPDATE: Geolith core is now available on Steam too!

RetroArch 1.17 – new netplay features

RetroArch 1.17 expands Netplay to support playing multiplayer games that were originally played on two or more separate consoles or computers connected together. This is currently supported by two cores: DOSBox Pure and gpSP.

In DOSBox Pure it is now possible to play DOS and early Windows multiplayer games that used IPX, Ethernet or a modem over the internet.

In gpSP, games that support the Wireless Adapter can also benefit from this feature, although only a subset of games work well at the moment (including Pokemon Fire Red/Green Leaf/Emerald). Those curious about more details can read David G.F.’s article about the gpSP implementation here.

In order to use this new functionality just use the regular Netplay menu, where you can host and/or join netplay games. It works seamless with the existing Netplay feature (including lobbies) with no additional settings required. Make sure however, that you use the same or compatible games, since this won’t be automatically enforced.

RetroArch 1.17.0 release


RetroArch 1.17.0 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 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

There are more changes than mentioned here, but for the sake of brevity, here is the changes since 1.16.0.

  •  
  • ACCESSIBILITY/TTS: fix target language and missing espeak handling on Linux
  • AI: AI service reworked: performance increase, automatic translation, configurable subtitle placement, and more
  • APPLE: Fix WebDAV crash with digest auth (Cloud Sync)
  • APPLE: Cloud sync fixes – ignore .DS_Store files and re-sync on app foreground
  • APPLE: Don’t re-create default directories
  • APPLE: Show Git information correctly
  • AUDIO/SYNC: Handle Hz skew adjustment for high refresh rates better (BFI, swap interval)
  • AUDIO/MIXER: Separate ffmpeg/mpv and audiomixer conditionals
  • AUDIO/WASAPI: Reworked shared buffer operation for more flexibility, fixed exclusive mode last buffer looping when entering menu
  • CONFIG/OVERRIDES: Fix setting savefile_directory in override file
  • CONFIG: Force fixed locale for numbers
  • CHEEVOS: Upgrade to rcheevos 11.0
  • CHEEVOS: Use rc_client for state management
  • CHEEVOS: Don’t track disc changes when achievements are disabled
  • CHEEVOS: Reinitialize rewind buffer after loading game with achievements
  • CHEEVOS: Inform user when server is unreachable
  • CHEEVOS: Fix crash on first load of game with achievements with threaded video
  • EMSCRIPTEN: Increase chunk size for reads/writes
  • EMSCRIPTEN: Modularize the JavaScript and clean up the web build
  • EMSCRIPTEN: Prefix core name with libretro_ for exports
  • EMSCRIPTEN: replace dashes with underscores in corenames (fix for vitaquake cores)
  • EMSCRIPTEN: Use ZipFS for web player asset bundle
  • EMSCRIPTEN: Change default audio rate to 44100
  • IOS: Fix widget on IOS17
  • IOS: Exit instead of crash on some errors
  • IOS: Fix ios-vulkan-ppsspp
  • IOS: Enable HDR support on IOS
  • IOS: Add option to disable respecting silent mode
  • IOS: Allow ignoring safe area (fullscreen over notch)
  • IOS: Default to not enabling keyboard gamepad
  • IOS: Fix XRGB8888 in GL driver
  • IOS: Allow changing the app icon
  • IOS: Add HAVE_ACCESSIBILITY to iOS builds
  • IOS/TVOS: Create GL context as GLES3 to fix some rendering performance problems
  • INPUT: Fix ghost input when setting RETROK_UNKNOWN
  • INPUT: Default ‘Bind Hold’ to 0 to prevent problems with controllers not resting at null state
  • INPUT: Add a setting to allow turbo d-pad directions
  • INPUT: Don’t save mouse buttons to autoconfig
  • INPUT/MENU: Add option for merging ‘Hotkey Enable’ device types
  • INPUT/mFI: disable secondary_joypad to prevent issues with controllers detected both as HID and mFI
  • INPUT/UDEV: Change event detection to polling in udev_joypad
  • INPUT/WAYLAND: Use unaccelerated pointer motion to prevent mouse dead zone
  • LAKKA: Add new menu options for Switch (overclock, CEC, BT ERTM)
  • LIBRETRO: Add environment command to get playlist path
  • LIBRETRO/NETPACKET: Switch environment call number from 76 to 78 (retire 76 as it was never used by any core). Simplify broadcasts by removing the option to send to all but one client, use an explicit RETRO_NETPACKET_BROADCAST constant instead. Separate explicit flushing and querying of incoming packet into two operations. Enable a core to specify a protocol version string which can get used instead of core version to determine compatibility between two players. Log and notify a separate message when there is a content crc mismatch while using this interface to convey it being less severe
  • MENU: Fix menu analog stick navigation (1.16.0.1)
  • MENU: Add option to find thumbnail images by playlist rom filename (1.16.0.2)
  • MENU: Don’t process menu events while input is being flushed (1.16.0.2)
  • MENU: Prevent proceeding to next bind when single binding (1.16.0.3)
  • MENU: Fix touchscreen menu false positives in case of overlap
  • MENU: Sort playlists ignoring extension (Playstation 2 should come after Playstation)
  • MENU: Treat System Volume Information folder as hidden on all platforms
  • MENU: Add Belarusian language option
  • MENU: Fix savestate thumbnail behavior when navigating back to playlist while content is still running
  • MENU: Fix word wrapped widget length
  • MENU: Add help text to controller drivers
  • MENU: Fix quit on content close option
  • MENU: Fix thumbnails in History for content loaded through Load Content
  • MENU: Flexible thumbnail matching (ROM name – database name – short name)
  • MENU: Remove legacy thumbnail pack downloader
  • MENU/GLUI: Icon corrections
  • MENU/OZONE: Thumbnail related fixes (missing thumbnail bar, fullscreen thumbnail flashing, sidebar focus)
  • MENU/RGUI: Fix text scaling in 16:9
  • MENU/XMB: Background images take precedence over color themes, default image opacity set the same as color theme opacity
  • MENU/XMB: Fix segmentation fault when background image is missing
  • MENU/XMB: Several corrections and cleanups
  • MENU/XMB: Layout/thumbnail fixes – Thumbnail layout adjustments, Header title improvements, Handheld layout adjustments
  • NETWORKING/NETPLAY: Add support for joining MITM servers from command line
  • NETWORKING/NETPACKET: Interface connection flow improvements
  • OSX: Fix mouse support for MelonDS DS on OSX
  • OSX: Option to create a portable build
  • PATCHES: Add support for XDelta-formatted patches.
  • PATCHES: Fix patching for cores that support contentless mode
  • PS2: Fix for no sound
  • PS2: Fix 0-byte logs and add memory stats
  • PSP: Fix memory leak in audio driver
  • RUNLOOP: Frame Rest, experimental sleep feature aiming to lower CPU usage and temperature when using certain CPU hungry vsync modes
  • RPI: Fix videocore + switchres compile failure
  • SCAN: Do CRC check on PSP/PSP(PSN) content
  • TVOS: Enable overlay support
  • VIDEO/BFI: Black Frame Insertion added to DirectX10/11/12. BFI Hz range now covers every 60hz multiple under 1000hz. Variable Strobe length via new ‘Dark Frames’ option, algorithm to auto select ‘decent’ Dark Frames choice.
  • VIDEO/GLSL: Add FinalViewportSize support to GLSL
  • VIDEO/GLSL: Change rotation type to int to maximize compatibility
  • VIDEO: Use video refresh rate instead of core refresh rate for menu frame limiting
  • VIDEO: Limit paused video refresh rate
  • VIDEO: Enforce swap interval 1 in menu if vsync is on
  • WII: Enable Cheevos for Wii builds
  • WIIU: Fix config file and core info reading
  • WIIU: Fix “Up” and “Left” directional input for both Analog sticks for GC Adapter
  • WIIU: Fix 3 USB controllers (NES/SNES/Retrode)
  • WIIU: Fix file descriptor leak
  • WIN32: Prefer D3D11 and WASAPI as default video and audio drivers
  • WIN32: Fix window size when aspect ratio is < 0
  • WIN32: Fix screen resolution always tied to the main monitor
  • WAYLAND: Enable fallback for screensaver inhibit via D-Bus
  • WAYLAND: Introduce wp_fractional_scale_v1 protocol for proper fractional scaling
  • WAYLAND: Update wayland-protocols version to 1.31

Dark Souls Remastered – InfiniDetail mod

This was a fun research sideproject. It did not take any development resources away.

Download this on NexusMods here.

This mod does the following:

  • Reduce/eliminate texture LOD (Level of Detail)
  • Increase draw distances, less pop-in of mappieces and objects
  • Untie special effects/particle effects from mappieces/collisions.

This mod takes a conservative and disciplined approach. It does not seek to alter
the game’s look, it does not add additional lighting, it does not remove spot lights or
remove baked shadows. In other words, it tries to look authentic to the original game,
and yet a still noticeable visual upgrade.

REQUIREMENTS

  • A copy of Dark Souls Remastered (PC version)

HOW TO INSTALL

  1. Extract the contents of the zip archive to the Dark Souls Remastered directory (usually C:\Program Files (x86)\Steam\steamapps\common\DARK SOULS REMASTERED).
  2. Start Dark Souls Remastered from Steam, or run DarkSoulsRemastered.exe from the install dir.
  3. This will start Dark Souls Remastered with the InfiniDetail mod

MEDIA

See some before/after screenshots here.

Screenshot #1
Screenshot #2
Screenshot #3
Screenshot #4

Full screenshot gallery here.

TODO
* Make more enemies visible all of the time
* Replace more low LOD fake mappieces with full LOD mappieces
* Fix up more rendering oversights from the original game

TOOLS USED
* DSMapStudio

CREDITS
* Fromsoftserve, for his inspirational videos and modding tips.
* DSMapStudio authors for the amazing tool. This mod would not have been possible without it.

FAQ
* Can it be used with DSR Graphics Overhaul mod?
No. DSR Graphics Overhaul by fromsoftserv is a far more ambitious mod that seeks to overhaul the game’s look and modernize it by removing baked shadows and replacing it with dynamic shadows, and also other artistic changes / edits. This mod has a more narrowly defined scope by comparison in that it wants to remain somewhat authentic and at the same time also remove some of the obvious visual rough edges from the original game that probably should have been addressed by the remastered version in the first place.
* How does it affect performance?
This mod can likely be optimized further, consider this a first pass. However, a performance test was done on Steam Deck. It ran at a smooth locked 60fps at the Steam Deck’s native resolution.

WHAT’S NEXT
InfiniDetail mods for Dark Souls 3 and Sekiro were developed alongside this mod, and will appear in the near immediate future.

Dark Souls 2: Scholar of the First Sin – InfiniDetail mod

(InfiniDetail) Mappieces rendered which were not visible before

This was a fun research sideproject. It did not take any development resources away.

Download this on NexusMods here.

This mod does the following:

  • Reduce/eliminate texture LOD (Level of Detail)
  • Increase draw distances, less pop-in of mappieces and objects

  • Draw some mappieces that were inside the level files but never rendered ingame

This mod takes a conservative and disciplined approach. It does not seek to alter
the game’s look, it does not add additional lighting, it does not remove spot lights or
remove baked shadows. In other words, it tries to look authentic to the original game,
and yet a still noticeable visual upgrade.

NOTE: Mappieces that have shadow source/target disabled have not been altered.
There will be a second version of the mod in the future that will enable shadow
source for certain mappieces. Enabling it for all mappieces at once did not turn
out to be a good idea, so it has to be done judiciously.
Altered objects meanwhile do have shadow sources enabled

REQUIREMENTS

This mod will not work with vanilla Dark Souls II.

HOW TO INSTALL

Easy mode

  1. Extract the contents of the zip archive to the Dark Souls II: Scholar Of The First Sin directory (usually C:\Program Files (x86)\Steam\steamapps\common\Dark Souls II Scholar of the First Sin\Game).
  2. Start Dark Souls II: Scholar Of The First Sin from Steam, or run DarkSoulsII.exe from the DS2 install dir.
    This will start the InfiniDetail mod with ModEngine (supplied in the zip archive)

Hard mode

There is a way to run this mod without ModEngine too.

  1. Extract the contents of the zip archive to a temporary directory.
  2. Download UXM (https://www.nexusmods.com/sekiro/mods/26)
    Run UXM, point it to the DS2 SOTF exe (usually C:\Program Files (x86)\Steam\steamapps\common\Dark Souls II Scholar of the First Sin\Game\DarkSoulsII.exe). Click on ‘Unpack’ and wait until it’s done. Close UXM.
  3. Take the contents of the ‘InfiniDetail’ directory (see Step 1), and copy them over to the DS2 SOTF directory (usually C:\Program Files (x86)\Steam\steamapps\common\Dark Souls II Scholar of the First Sin\Game).
  4. Run UXM, point it to the DS2 SOTF exe (usually C:\Program Files (x86)\Steam\steamapps\common\Dark Souls II Scholar of the First Sin\Game\DarkSoulsII.exe). Click on ‘Patch’ and wait until it’s done. Close UXM.
  5. You can now start Dark Souls II: Scholar of The First Sin with the mod applied.

TODO

  • Stop enemies from animating at half rate from a far distance
  • Improve the quality of light shafts
  • Improve cascade shadow render distance (max shadowmap resolution in the game seems to be 4096×4096, would need to be able to go beyond this)

TOOLS USED

  • ACB Editor
  • DSMapStudio

MEDIA

See some before/after screenshots here.

Screenshot #1
Screenshot #2
Screenshot #3
Screenshot #4
Screenshot #5
Screenshot #6
Screenshot #7
Screenshot #8
Screenshot #9
Screenshot #10
Screenshot #11

FAQ

  • Can it be used with DS2 Lighting Engine mod?
    Yes, it works fine. First install the DS2 Lighting Engine mod, then walk through this mod’s installation instructions (How To Install).

WHAT’S NEXT

InfiniDetail mods for Dark Souls Remastered, Dark Souls 3 and Sekiro were developed alongside this mod, and will appear in the near immediate future.

(InfiniDetail) Extended draw distance
(InfiniDetail) Extended draw distance

RetroArch 1.16.0 release


RetroArch 1.16.0 has just been released.

Grab it here.

If you’d like to learn more about upcoming releases, please consult our roadmap 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 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

There are more changes than mentioned here, but for the sake of brevity, here is the changes since 1.15.0.

1.16.0

  • 3DS: Update __system_initArgv
  • 3DS: Update SquirrelJME 3DS Core information along with icons.
  • ANDROID: Rewrite input handling to better support AINPUT_SOURCE_STYLUS
  • ANDROID: Prevent the android quick tap mouse click emulation while pressing a button on the on-screen overlay
  • AUDIO: Fast-Forward Audio Resampling
  • AUDIO: Reinit audio on audio sync toggle
  • AUDIO: Count audio samples in stats when rate control is disabled
  • AUDIO/PULSEAUDIO: Support device list for PulseAudio
  • AUDIO/WASAPI: WASAPI Frame Delay fix + cleanups
  • AUDIO/WASAPI/MIDI: Frame Delay correction
  • ARCHIVE/ZIP: Improve ZIP decompression This reduces the amount of memory Retroarch needs to extract a ROM file. It will only need the size of the ROM plus 128KiB to extract the file from the ZIP. Previously it needed as much as twice that amount if the compression ratio was not great. This is useful on memory constrained platforms and has no impact on platforms with plenty of memory. Handles all cases correctly (with and without MMAP, for cores that require fullpath or not, small and big ZIP files).
  • APPLE: Add default keyboard overlay directory to platform_darwin
  • APPLE: Update to MoltenVK 1.2.4
  • APPLE: Don’t include MoltenVK library in Load Core menu list
  • APPLE: Enable AltServer JIT for builds installed by Xcode
  • APPLE: The default pthread stack size on Apple is too small for detect_ps2_game, so increase it
  • CHEEVOS: Upgrade to rcheevos 10.7
  • CHEEVOS: Don’t initialize rcheevos memory unless used
  • CHEEVOS: Add progress tracker widget
  • CHEEVOS: Eliminate leaderboard tracker stutter
  • CHEEVOS: Expand leaderboard visibility settings
  • CHEEVOS: Collapse trackers with same value definition
  • CHEEVOS: prevent frame step when hitting rewind button while paused in hardcore
  • CHEEVOS: disallow video_swap_interval and black_frame_insertion in hardcore
  • CRT/SWITCHRES: Don’t always force core aspect ratio
  • CRT/SWITCHRES: Fix aspect ratio for tate games on a horizontal screen
  • CRT/SWITCHRES: Add PAL threshold option for automatic refresh rate switch
  • CRT/SWITCHRES/KMS: Add KMS modeswitch
  • COMMAND: Make cmd interface more useful for replay information
  • CONFIG: Allow all systems to check for backslashes (Windows) as last slash in path. Improves portable core logic
  • D3D11: Fix memory corruption in d3d11_gfx_init
  • D3D12: Enable blending when drawing the menu
  • D3D12: Move fence signaling out of d3d12_gfx_sync
  • D3D12/LIBRETRO: Add D3D12 HW_render support
  • DOWNLOADS/THUMBNAILS: Prevent directory creation on bogus thumbnail downloads
  • EMSCRIPTEN: Fix Emscripten sleep function/macro
  • EMSCRIPTEN/RWEBAUDIO: Fix RWebAudioInit race condition
  • EMSCRIPTEN/OPENAL: Make openal default audio driver
  • FFMPEG: Fix RetroArch fails to restart streaming when video re-inits and instead starts recording
  • FRAMESKIP: Use refresh rate instead of core fps for frameskip timing
  • INPUT: Combo hold + ‘enable_hotkey’ correction. Fixed issue with having menu toggle hold combo in different button than ‘enable_hotkey’, which caused ‘enable_hotkey’ to also act as menu toggle if held long enough, and simplified and unified duplicate code in start+select holds to a single function.
  • INPUT: input_keyboard_event: Don’t check hotkey binds when device is RETRO_DEVICE_POINTER
  • INPUT: Add input_keymaps_translate_rk_to_ascii() for correct character input to input_keyboard_event
  • INPUT: input_overlay_poll: Delay clearing INPUT_OVERLAY_BLOCKED flag until there is no overlay input (Avoids stray input after osk_toggle)
  • INPUT: Send keyboard events for modifiers before other keys (for correct modifier+key input if hitboxes overlap)
  • INPUT: Remember currently set keyboard mapping bits during same config read, because otherwise customized keybinds can get cleared out of the bits on the next iteration, causing keyboard events to get passed to the core when they should get blocked.
  • INPUT/AUTOCONFIG: Reinit after updating autoconf profiles
  • INPUT/LINUX/UDEV: Log mouse devices in info level
  • INPUT/LINUX/UDEV: First working version of udev driver with touchscreen support and gestures.
  • INPUT/WAYLAND: Add wayland to input driver list
  • INPUT/MENU: move port X binds into retropad binds submenu and add appropriate help text and sublabels to discourage people from messing around in there unnecessarily
  • INPUT/MENU: Add menu icons to ‘RetroPad Binds’
  • INPUT/MENU/OSK: Allow more keyboard actions with menu osk
  • INPUT/REMAP: Remap label fix when no autoconf profile active
  • INPUT/REMAP: Add ‘Save As’ option for remaps and overrides
  • INPUT/OVERLAY: Add overlay parameter to control x/y separation in auto-scale mode
  • INPUT/OVERLAY: Revive/rewrite Keyboard Overlay and OSK Toggle. Add keyboard overlay preset, keyboard submenu, and osk_toggle hotkey. Use overlay caching for osk_toggle.
  • INPUT/OVERLAY: Overlay Caching. Adds overlay_cache_ptr to keep a disabled overlay in memory when it’s expected to be shown again. Most input_overlay_deinit calls are replaced with input_overlay_unload, which caches the overlay unless initing/deiniting core or disabling overlays. Loading a cached overlay is done as a swap, intended for osk_toggle.
  • INPUT/OVERLAY: Add input_overlay_check_mouse_cursor() to preserve show/hide mouse behavior
  • INPUT/OVERLAY: Don’t apply input_overlay_show_mouse_cursor in windowed mode (controlled by mouse grab only)
  • INPUT/REMAPPING: Stop always reseting to defaults on remap delete
  • INPUT/SDL: Fix rumble on PS4/PS5 controllers connected via bluetooth
  • IOS: JIT support in iOS
  • IOS: Use AltKit to try to enable JIT on iOS
  • IOS: Fix thumbnails in history on iOS
  • IOS: Enable option to rumble iOS device instead of controller
  • IOS: Fix including audio/video filters on iOS
  • IOS: Haptic feedback for overlay on iOS
  • IOS: On iOS, stop/start audio on interruptions
  • IOS: Add accelerometer and gyroscope sensors to iOS
  • IOS: iOS needs to targets 13 due to some keyboard emulation, but tvOS does not
  • IOS/TVOS: Rework JIT availability checks
  • IOS/TVOS: When updating playlist with detected core path, used resolved core path
  • IOS/TVOS: Implement memory queries on iOS/tvOS
  • IOS/TVOS: Netplay discovery through bonjour/mdns
  • IOS/TVOS: Improve some log formatting on iOS/tvOS
  • IOS/TVOS: Preliminary MetricKit support on iOS/tvOS
  • TVOS: Fix analog stick handling after adding Siri remote tap support
  • TVOS: Also handle tap events on tvOS
  • TVOS: Back up retroarch.cfg to NSUserDefaults on tvOS.
  • TVOS: tvOS has its own beautiful screensavers and I would like them
  • TVOS: tvOS Siri remote handling
  • TVOS: Fix accidental left/right keypresses on tvOS
  • TVOS/CONFIG: Avoid a crash if there is no backed up config file on tvOS It’s not really usable as a game controller, but it is good for going through the menu as a simple LRUD. This also adds better support for names of mFI controllers, as well as being able to do the expected tvOS behavior of “backing out” of the app.
  • TVOS: AltKit support for tvOS
  • INTL: Fix language detection in Canada to English
  • LANGEXTRA: Enable language autodetect for all builds with LANGEXTRA
  • LIBRETRO: Add new context hardware render enums – enables autodetection of DX12 for PS2 core
  • LIBRETRO: Add API to check JIT availability on iOS
  • LIBRETRO: Allow RETRO_ENVIRONMENT_SET_MEMORY_MAPS also after core startup. Change the comment in libretro.h about the removed limit and handle the environment call during core runtime in RetroArch.
  • LIBRETRO/MICROPHONE: Add new API for microphone support.
  • LIBRETRO: Add new API for querying the device’s power state.
  • LIBRETRO/VFS: Rewrite retro_vfs_file_remove_impl
  • LINUX: Input driver fix 8+ joypads. It was reported that controllers beyond 8 worked only partially (analogs yes, but not buttons), and the found fix was also confirmed.
  • MIDI: Show MIDI output first
  • MENU: Reorganize ‘Saving’ menu
  • MENU: Start directory browsing from current value
  • MENU: Fix menu toggle combo hold with same ‘enable_hotkey’
  • MENU: Add menu scroll home+end actions
  • MENU: Move ‘systemfiles_in_content_dir’ from Saving to Core
  • MENU: Menu navigation acceleration adjustments
  • MENU: Audio synchronization menu cleanup
  • MENU: Menu value label cleanup
  • MENU: Show playlist history/favorites icons by default
  • MENU: Remove advanced option flag from video rotation + orientation
  • MENU: Combine audio resampler menu with audio output menu
  • MENU: Microphone menu cleanup
  • MENU: Add missing menu visibility option for content dir override
  • MENU: Fix menu refresh in action_ok_network
  • MENU: Video settings menu cleanup
  • MENU: Try to declutter Quick Menu
  • MENU: Change network port menu options to ‘allow_input’ mode
  • MENU: Preselect current core in “Set Core Assocation” menu for more carefree usage
  • MENU: Focus back to “Set Core Association” item after returning from the menu instead of first item
  • MENU: Replaced hack fix for focusing the first item after returning from core suggestion “Run” menu after association reset
  • MENU: Fixed setting core association in history/favorites after resetting it and running without setting
  • MENU: Relocate playlist manager core association options to prevent accidental resets with Start
  • MENU: Fraction setting wraparound rounding correction
  • MENU: Add more missing sublabels
  • MENU: ‘Updater Settings’ relocation
  • MENU: Search box usability improvements
  • MENU/RGUI: Implement ‘Remember Selection’ option
  • MENU/RGUI: Fix savestate thumbnail fullscreen cancel action
  • MENU/RGUI: Fix and add toggle for playlist thumbnails
  • MENU/OZONE: Update Dracula theme
  • MENU/OZONE: Return to sidebar from playlist manage quick access
  • MENU/OZONE: Sidebar multiline scrolling
  • MENU/OZONE: Avoid crash if ozone sidebar_index_size is 0
  • MENU/OZONE: Prevent metadata and footer overlap
  • MENU/OZONE: Sublabel width tweak
  • MENU/OZONE: Mouse hover selection fix
  • MENU/XMB: Message/help box adjustments
  • MENU/XMB: XMB menu playlist index bugfix
  • MENU/XMB: Playlist label limit fixes
  • MENU/XMB: Prevent playlist label truncating long items even when right thumbnail is not enabled/visible
  • MENU/XMB: Prevent playlist label length resetting to full width on every item change while thumbnail is pending
  • MENU/XMB: Stop showing playlist entry index outside of playlists
  • MENU/XMB: Fix menu focus issue when returning from “Set Core Association” if playlist index is greater than the previous menu
  • MENU/EXPLORE: Prevent flashing when browsing fullscreen thumbnails
  • MENU/EXPLORE: Match label ticker length behavior with playlists
  • MENU/SOUNDS: Fix certain audio drivers from hanging when menu pause is enabled with menu sounds
  • MENU/SOUNDS: Fix menu sounds stopping after fullscreen toggle / video reinit
  • MENU/QT/WIMP: Cleanup Desktop Menu welcome text
  • MENU/OVERLAYS: Reorder overlay menu
  • MICROPHONE: Add support for microphones.
  • MICROPHONE/ALSA: Add alsa and alsathread microphone drivers.
  • MICROPHONE/SDL: Add sdl2 microphone driver.
  • MICROPHONE/WASAPI: Add wasapi microphone driver.
  • MOBILE: On mobile in portrait mode, don’t override custom viewport
  • NETWORKING: Enhance netpacket interface
  • NETWORKING/NETPLAY: Enable core host to refuse connecting new players to limit the number of connected players
  • NETWORKING/NETPLAY: Enable a core to flush outgoing packets and read incoming packets without waiting for the next frame (can be used for lower latency or blocking reads)
  • OPENDINGUX/RG350: Enable networking for RG350
  • OPENGL/WAYLAND: Add frame callback after egl_swap_buffers to improve latency when max_swapchain <= 2
  • OSD/STATISTICS: Show current video + audio drivers in statistics
  • OSD/STATISTICS: Ensure statistics text is aligned left
  • OSX/MACOS: Fix steam OSX core path
  • OSX/MACOS: Add HAVE_STDIN_CMD support
  • OSX/MACOS: fix mouse grab in windowed mode
  • OSX/MACOS/IOS/TVOS: Enable SSL in macos/ios/tvos builds
  • PLAYLIST: Change default playlist last played time format
  • PS3/PSL1GHT: Add overlay support
  • RUNLOOP: Don’t count frames while paused
  • SERENITYOS: Add SerenityOS to the list of supported operating systems
  • SCANNER: Improve scanner console output
  • SCANNER: More scanner console output coloring
  • SCANNER: Improve CLI scan console output
  • SCANNER: Add content import/scan via CLI
  • SCANNER/PS1: Serial extraction is now considered a failure if PSX.EXE is found, allowing CRC fallback and actually fixing the game scanning
  • VIDEO: Correct rotated core provided aspect ratio
  • VIDEO: Minor adjustments to refresh rate switch behavior
  • VIDEO: Fix windowed viewport with libretro rotation
  • VIDEO/SDL2: Use “nearest” scaling in menus
  • TASKS: Fix corrupt task progress percentage
  • XVIDEO/MENU: Add menu support to xvideo gfx driver, making it usable
  • UWP: Fix modifier keys ( shift, ctrl, alt ) as well as F10 not being detected on the UWP platform
  • VULKAN: Ignore Fast-Forward Frameskip option
  • VULKAN/KHR_DISPLAY: Support screen refresh rate with Vulkan KHR_Display context
  • WIN32: Increase maximum window limit
  • WIN32/WINDOWSXP/MSVC2010: Fix invisible menu display
  • WAYLAND: Remove splash screen
  • WAYLAND: Check for pointer before locking it
  • WAYLAND: Add mouse grab/lock functionality
  • WAYLAND: Get system wayland-protocols path via pkg-config

Server incident resolved

The cause of the intrusion has been found and isolated. We have no indications that other systems including core distribution was accessed, so there is no immediate cause for concern there. Sites should be operational right now and everything should work fine right now.

PSA: If people downloaded RetroArch on Windows earlier today they should check their history for mediafire. Trusted downloads from Libretro always originate from http://buildbot.libretro.com and/or http://bot.libretro.com. We will never upload files to any third party file sharing site.

More to share on this later on.

DirkSimple core added on Steam + RetroArch update

DirkSimple core added to Steam


We added a new core, DirkSimple. This brings the total number of available cores on Steam to 60 now.

DirkSimple is a core written from scratch by icculus, one of the original creators/maintainers of popular open source projects like SDL. It can play some of the 1980s LaserDisc arcade games.

See our Steam article here.

RetroArch 1.15.0 updated

A maintenance update/fix has been pushed for 1.15.0. This replaces the current 1.15.0 version.

New changes:

  • INPUT/AUTOCONFIG: Check for ‘enable_hotkey’ also from autoconf binds
  • LIBRETRO-COMMON/VFS/FILESTREAM: Fixes filestream_vscanf regression
  • MENU/XMB: Horizontal icon animation fix
  • OSD/STATISTICS: Notification font + statistics adjustments
  • OSD/STATISTICS: Finetuned statistics layout to be more compact and aligned
  • OSD/STATISTICS: Group Run-Ahead and Frame Delay as “Latency”
  • OSD/STATISTICS: Try to scale font as small as possible/readable if stats won’t fit
  • OSD/STATISTICS/FONT: Allow reseting notification font with RetroPad Y to “null”, which uses the fallback pixel font
  • OSD/STATISTICS/FONT: Show “Default” instead of empty with default font
  • OSD/STATISTICS/FONT: Start browsing font from assets instead of root
  • WIN32: Ignore window limiting with fixed position. The other resizing part already took this into account, but WM_GETMINMAXINFO did not.

RetroArch now on Windows Package Manager!

Windows 10/11 users now have an even more convenient way of installing RetroArch! RetroArch is now available from the Windows Package Manager (see here).

  • Stables are identical to the ones found on our website/buildbot.
  • They are digitally signed, meaning they pass the Windows Defender SmartScreen Protection. You will not get a warning from SmartScreen when attempting to install RetroArch this way. Useful if you are in a protected environment where your system administrator has locked down your ability to install unsigned third-party applications on your system.

The video will show you how to install it.

First, start up the Command Prompt. You can go the Start Menu and type in ‘Command Prompt’ and then click on it to start it up, or simultaneously press Windows key + R key, and then type in ‘cmd’.

How to search for RetroArch

Once on the command line, you can search for packages to see if they exist. To search for RetroArch, tyep in the following:

winget search RetroArch

Lowercase ‘retroarch’ will work as well. An entry should show up.

How to install RetroArch

Now that we know the package exists on the package manager, we should be able to install this. Simply type on the commandline:

winget install RetroArch

It will now install RetroArch without requiring any user interaction. Note that this version of RetroArch will not attempt to install the DirectX9 SDK in case it doesn’t already exist. We assume on modern Windows you will use the Direct3D 10/11/12 or Vulkan/OpenGL drivers anyway.

Once installed, you should be able to find it from the Start Menu as a recently added application.

How to uninstall RetroArch

Uninstalling RetroArch once installed is similarly easy. Simply type the following on the commandline:

winget uninstall RetroArch

RetroArch’s presence on app stores

Our aim with RetroArch is to be available on as many storefronts and outlets as possible. We have made some impressive progress over the years.

  • RetroArch is available on Steam for Windows and SteamOS/Linux (see here).
  • RetroArch is available on the Windows Package Manager for Windows 10/11 (see here).
  • RetroArch is available on the Google Play Store for regular Android devices (see here). A Plus version with additional features is also available here.
  • RetroArch is available on the Huawei AppGallery for Huawei branded Android devices (see here).
  • RetroArch is available on the Samsung Galaxy Store for Samsung branded Android devices (see here).
  • RetroArch is available on the Amazon App Store for Amazon branded Android devices (see here).
  • RetroArch is available on itch.io (see here).
  • RetroArch is available on Canonical Snapcraft (see here).
  • RetroArch is available on Flathub (see here).
  • RetroArch has a Humble Bundle page (see here).
  • We have even more plans to expand that we cannot talk about yet!

RetroArch now on the Samsung Galaxy Store!


We keep expanding!

We’re happy to announce that RetroArch is now available on the Samsung Galaxy Store! For free, of course.

Q&A

How can I download RetroArch from the Galaxy Store?

The Galaxy Store should be pre-installed by default on Samsung phones. It is a storefront available exclusively for Samsung-branded devices.

Open the app on your device, type in RetroArch in the search bar, and download it from there.

How does this version differ from the Google Play Store version?

The version available on the Galaxy Store is identical to the version you can download from our website.

It has a couple of big advantages over the Google Play Store version:
* There is no set core limit. For RetroArch Plus on the Play Store, it is up to 127 cores that can be installed. We have to hand-pick these cores specifically so that users can install them on the Google Play Store.
* Cores are distributed from the Libretro buildbot infrastructure. There are far more cores available than on the Play Store.

Should I use this version or the Google Play Store version?

On a Samsung phone, you have the choice to choose between either version. Regardless, we highly recommend you use the Galaxy Store version over the Google Play Store version. Reasons are listed above, but on top of that, the Google Play Store version has not been updated for a while because of increasing restrictions and requirements that we haven’t caught up with yet.

Bottom line, we anticipate the Google Play Store version to become more and more nerfed as time goes on unfortunately. There is nothing we can do about this, these are restrictions and limitations imposed by Google to have the software available for distribution on the Play Store. To get a more full-featured version, download the Galaxy Store version.

RetroArch should now be available on the Google Play Store, Amazon App Store, Huawei App Gallery, and Samsung Galaxy Store. No matter what device you are on and which ecosystem you are in, we try to have you covered.

RetroArch 1.10.3 release!


RetroArch 1.10.3 has just been released.

Grab it here.

If you’d like to learn more about upcoming releases, please consult our roadmap 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 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!

Core Updates

FBNeo, LRMAME2003 Plus, UAE and VICE have seen the regular weekly updates/improvements. We can’t list all the changes there, so we just suggest you go to the respective Github repositories and check out the chanes there.

LRMAME

LRMAME updated to version 0.242 (latest). LRMAME is now also available for ARM Macs now. You can get it from the Core Downloader.

Nestopia

FourScore support (4 player multitap) has been added for the following games:

  • Spacey McRacey
  • NNNNNN
  • Arkade Rush
  • Justice Duel
  • BMX Simulator
  • Way of the Exploding Fist

PCSX ReARMed

This core has a new auto frameskip mode (based on free audio buffer space).

The Lightrec dynamic recompiler has been updated, and it should fix several crashes and bugs that occurred before. This would only affect users on x86/x86_64 and MIPS architecture processors, as ARM architecture-based systems continue to use the Ari64 dynarec instead.

There has been a GunCon overhaul, the following input descriptors have been added:

  • Add Trigger, Reload, Aux A, and Aux B as mappable buttons in RetroArch menu for players 1 and 2.
  • GunCon trigger, A, and B buttons are mapped to Gun Trigger, Gun Aux A, and Gun Aux B instead of hard coded to left click, right click, and middle click.
  • Force cursor to corner of screen for offscreen reload so that reloading works on all four edges of the screen.
  • Allow Gun Reload RetroArch input to emulate an offscreen shot.
  • Switch gun coordinates from “Pointer” type to “Lightgun” type.

GW (Game & Watch)

The GW (Game & Watch) Libretro core is now available for the MSVC 2005 and 2010 Windows versions. These versions can run on older Windows OS versions than the regular version.

gpSP

The gpSP Libretro core now uses a small translation cache for the Miyoo platform.

Cap32

An emulator of the Amstrad CPC 8bit home computer range. This has seen several improvements.

  • DB: new games from retroachievements
  • UI: added DB icon DSK to status bar
  • DB: you could add direct tokens using $ (for joystick keybinds or cleans)
  • DB: added DB v1 using clean-cpc-db info
  • CORE: added model 664 to allow DSK and BASIC 1.0
  • CORE: detect some configurations from filename
  • VIDEO: minor fixes (requires more work)

SMS Plus GX

The SMS Plus GX Libretro core should now be more stable on RetroArch PSP. We achieve this by avoiding unaligned memory access. Previously, after starting a game, the console would have a tendency to locks itself and shut down.

Other related changes – we replaced ALIGN_LONG with ALIGN_DWORD for Miyoo and RetroFW to match
the standalone versions. This fixes Master System background rendering. It was dropped from 3DS as ARMv6 allows unaligned memory access and defining that macro had no effect anyway. ALIGN_DWORD was dropped from Raspberry Pi (ARMv6/7/8), Classic (ARMv7), OS X non-PPC (x86, ARMv8), Vita (ARMv7) and Switch (ARMv8) as those platforms support unaligned memory access.

Beetle Virtual Boy

Fixed a couple inaccuracies in the VSU modulation emulation, fixing a few sound effects in “Virtual Boy Wario Land”.

Mesen

The Nintendo Entertainment System emulator core has seen a couple of improvements.

Before, the core would upload audio by using the audio batch callback multiple times per frame, unduly ‘stressing’ the frontend audio buffer and leading to poor AV synchronisation.

We now ensure that the audio batch callback is only used once per frame (unless the frontend does not support batches of sufficient size, in which case the samples will be split appropriately).

We also did the following:

  • Sets the default audio sample rate to 48000 Hz. The previous default of 96000 Hz is so high that RetroArch is required to flush the audio driver twice per frame, which is bad for AV synchronisation.
  • Removes the 192000 and 384000 sample rate options, since these are in fact unsupported by the underlying emulator code…

Add 4:3 (Preserved) & 16:9 (Preserved) aspect ratios
Mesen by default preserves the aspect ratio in all cases when cropping the overscan, which results in a difference between the core provided 4:3 and 16:9 ARs, and RetroArch’s own 4:3 and 16:9 ARs, which doesn’t always results in a ideal image (specifically 16:9 on a 16:9 display will look weird when cropping is applied).

We now separate Mesen’s preserved 4:3 and 16:9 ARs into their own selections for the core provided aspect ratio so people can choose whenever or not they want the aspect ratio to be preserved when using either one of the selections as their core provided aspect ratio.

bsnes Mercury/bsnes C++98

The Super Nintendo Entertainment System emulator core has seen a couple of improvements.

Before, the core(s) would upload audio in packets of 64 samples – which means the audio batch callback is used multiple times per frame, unduly ‘stressing’ the frontend audio buffer and leading to poor AV synchronisation.

We now ensure that the audio batch callback is only used once per frame.

REminiscence

This Flashback game engine core has now been added for the Miyoo platform as well.

ScummVM

Several serious crashes should be fixed now as a result of us updating the libco coroutines middleware library.

FCEUmm

This Nintendo Entertainment System emulator core has seen several improvements.

More mapper additions and improvements
Improve mappers 49, 215/258, 340, 341, 351 and 444. Add newly-(re)assigned mappers 294 and 310. Add new mapper 467.

Expose internal audio RF filter option
The core already contains a low pass audio filter designed to recreate the ‘muted’ sound of the NES when connected to a television via the RF modulator – but for some reason this functionality is not enabled/exposed.

We have simply wired it up to a new Audio RF Filter core option. When enabled, the (subjective) improvement in audio quality is quite dramatic. The filter has a negligible performance impact.

(This filter produces the effect discussed here: https://forums.libretro.com/t/lowpass-filtering-for-nes-rf/37258)

Add optional ‘fake’ stereo sound effect
We added a new Stereo Sound Effect core option which may be used to simulate stereo sound by delaying the right audio channel (relative to the left) when upmixing the mono output from the NES. The delay can be configured from 1 to 32 ms.

The effect is identical to the fake stereo currently available in the Mesen core.

minivmac

minivmac is an emulator for the Mini vMac, a miniature Macintosh. We added this core now for ARM Macs. It can be downloaded from the Core Downloader.

Genesis Plus GX

Genesis Plus GX is a Sega Master System/Sega Game Gear/Sega Megadrive/Sega Genesis emulator core.

We are using the low memory codepath now for Miyoo systems. As this platform only has 32MB RAM, like the RS-90.

xRick

The Rick Dangerous game engine core has been added for the Miyoo platform.

Snes9x 2005

This Super NIntendo Entertainment System emulator core has seen several improvements.

Before, the core had bad audio sample pacing:

  • Neither variant of the core sent a number of samples per frame that would match the nominal expected values given by the sample rate and fps set in retro_get_system_av_info()
  • Due to integer rounding errors, the non-plus core always would send too few samples
  • The ‘plus’ version of the core would send the ‘correct’ number of samples, in terms of actual emulation – but this does not tally with the sample rate reported to the frontend. Moreover, the ‘plus’ core would call the audio batch callback twice per frame, which unduly stresses the frontend audio buffer.

As a result, the core had bad audio/video synchronisation, affecting frame pacing.

We fixed several issues:

  • The audio sample rate is now reported as 32040 Hz
  • The non-plus core uses an accumulator to ensure that ‘fractional’ audio samples are accounted for and sent when required
  • The plus core now uploads audio samples only once per frame

In addition, we did the following

  • Fixed three memory leaks that were found in the core
  • Modified the Console Region core option to require a restart (since it has never been possible to change this at runtime…)

Snes9x2005 Non-Plus: Add optional low pass audio filter
Apart from a substantial difference in audio emulation accuracy, probably the most obvious difference between the ‘plus’ and ‘non-plus’ versions of the core is that the latter has an inadequate level of low pass audio filtering, leading to tinny/scratchy sound.

We added a simple optional low pass filter at the output stage of the ‘non-plus’ core. When enabled, audio is more mellow/bassy, and the generated sound is closer to that produced by the ‘plus’ version – with only a negligible increase in performance requirements.

Snes9x 2010

This Super NIntendo Entertainment System emulator core has seen several improvements.

Use audio batch callback only once per frame

Before, the core would upload samples in batches of ~64, which means the audio batch callback is used many (~9) times per frame. This ‘overstresses’ the frontend audio buffer and leads to bad AV synchronisation.

We have fixed the issue by ensuring that the audio batch callback is used to send all available samples only once per frame.

Improve save state efficiency + fix save state size

At present, every time that retro_serialize_size() is called (i.e whenever save states are used), the core determines the save state size by allocating a temporary 5 MB buffer and writing into this an actual save state. Moreover, it then fails to report the actual size correctly due to a bug in the memory stream wrapper code – which means save states are always 5 MB in size. This represents a terrible inefficiency.

Now, the save state size is now calculated independently of regular save state creation. No temporary buffer is required, and there is no need to actually write a save state to memory – and save states now have the correct size (~830 kb)

SwanStation

This Sony PlayStation1 emulator core has been updated.

  • Remove ‘Force Pop’n Mode’ & ‘NeGcon Steering Axis Deadzone’ options

60Hz modes for > 60Hz emulated platforms

Big improvements for WonderSwan, Lynx and PokeMini emulator cores for the majority of systems that don’t happen to have VRR displays!

Beetle WonderSwan

At present the core runs at ~75Hz, matching the native refresh rate of the WonderSwan hardware. This is fine if the core is run on a VRR display (or one that natively supports 75Hz…), but on regular 60Hz panels it can cause issues. In particular, screen tearing is very likely to occur. You can experience this on Linux (when not using a compositor and without vsync forced at the driver level) and on 3DS. The tearing is so bad on 3DS that we would previously consider the core to be unusable on that platform…

We now added a new 60Hz Mode core option, which can be used to force the core to run at 60Hz (actually 60.38Hz, but RetroArch handles this nicely via dynamic rate control). Note that the core still runs at the ‘correct’ speed when this option is enabled – internally, the core is running the nominal ~75 frames per second, but every 5th frame is ‘dropped’. This reduces video smoothness, but then 75Hz on a 60Hz display is not smooth either. More importantly, enabling this option eliminates screen tearing.

In addition, we have also made the following minor changes:

  • The frontend reported framerate is now set correctly in 75Hz mode (previously this was truncated, leading to a slight tendency for the frontend audio buffer to under-run)
  • The internal audio samples buffer has been reduced from a ~64kb (!) static array to a tiny, dynamically created array of just the correct size
  • On 3DS, the video buffers are now allocated in linear memory (for improved performance)
  • The 96000, 192000 and 384000 audio sample rate options have been removed, because they are nonsensical and harm AV synchronisation

Thanks to this 60Hz mode, Beetle WonderSwan is now perfectly playable on RetroArch 3DS. We have enabled this option by default. If you are using a VRR display or if you are running at a native 75Hz resolution and would like to change it back to the native refresh rate, you can just turn this option off in Quick Menu -> Options.

We have also added the core for RetroArch PS2, although it can’t reach fullspeed. It’s debatable whether it’s worth including, but for now we keep it in.

There is also a new optional audio feature. The WonderSwan has a tendency to produce rather harsh/abrasive chiptunes. The low pass audio filter softens and ‘mellows out’ the generated sound.

PokeMini

At present the core runs at 72Hz, matching the native refresh rate of the Pokemon Mini hardware. This is fine if the core is run on a VRR display (or one that natively supports 72Hz…), but on regular 60Hz panels it can cause issues. In particular, screen tearing is very likely to occur. We could experience this on Linux (when not using a compositor and without vsync forced at the driver level) and on 3DS.

We have now added a new 60Hz Mode core option (enabled by default), which can be used to force the core to run at 60Hz. Note that the core still runs at the ‘correct’ speed when this option is enabled – internally, the core is running the nominal 72 frames per second, but every 6th frame is ‘dropped’. This reduces video smoothness, but then 72Hz on a 60Hz display is not smooth either (and few Pokemon Mini games are ‘smooth’ to begin with…). More importantly, enabling this option eliminates screen tearing.

Handy

This Atari Lynx emulator core has seen several big improvements.

Fix frame pacing
Before, this core had entirely broken frame pacing. The core reported a fixed refresh rate of 75Hz to the frontend, but the Lynx (and the internal emulation code) has a variable refresh rate of 0-75Hz; games can render at any rate they please. In retro_run(), the Lynx is always emulated until the next ‘end of frame’ event occurs – if a game renders at e.g. 25 fps, this means retro_run() will actually correspond to (1/25) seconds worth of Lynx runtime instead of the expected (1/75) seconds. In this case, the game is emulated too quickly – but it appears to run at the correct speed in the frontend because the core uploads an ‘oversized’ audio buffer (1/25 seconds worth of samples). RetroArch syncs on audio in such a way that when too many samples are received, the frontend runs in ‘slow motion’ – so the ‘too fast emulation’ + ‘too many audio samples’ effectively cancel out. But the results are awful. This is a significant violation of the libretro API, and it destroys the frontend’s ability to properly synchronise audio and video, and to pace the frames correctly.

We now modified the run loop such that a fixed number of CPU cycles are emulated on each call of retro_run(), corresponding to the actual frontend output video refresh rate (which can be set via a new Video Refresh Rate core option). Thus the Lynx is always emulated at the correct speed, audio is always uploaded in batches of the correct size, and generated video frames are captured and output when available (and when the frontend can accept them).

The default Video Refresh Rate has been set to 60Hz, which provides smooth results for most games (and also eliminates screen tearing on 60Hz displays, which was an issue when the core only reported a 75Hz refresh rate). If a game has a higher frame rate than this (rare, but e.g. the intro and menus of California Games run at the full 75 fps), then ‘excess’ frames will be dropped. Users with 75Hz+ VRR displays can set higher refresh rates to improve video smoothness in these cases.

Improve save state efficiency
Before, the retro_serialize() function determines the save state size by allocating a temporary ~310kb buffer, writing an actual save state into it, then fetching the resultant buffer occupancy. This is terribly inefficient – and retro_serialize() is called 3 times every time a state is saved or loaded…

We modified the serialisation memory stream code to allow a ‘virtual’ save state to be made – no buffer is required, and no data are copied. This means retro_serialize() can now fetch the save state size with no memory allocations and no wasted effort.

Add optional LCD ghosting filter

We added a new LCD Ghosting Filter core option which can be used to apply an LCD ghosting effect by blending multiple successive frames. The number of blended frames can be set from 2-4; using more frames improves the quality of the effect at the expense of increased performance requirements.

LCD ghosting is particularly beneficial for the Lynx because many games run at very low frame rates, and some blurring helps to smooth out the frequently ‘jerky’ screen updates.

RetroArch Updates

See the Changelog below for a detailed breakdown of all the changes that have happened.

One of the biggest changes for Steam users by far is the new Steam Discord Rich Presence support. NOTE: You will need to use the desktop client in order for this to work. It won’t work with the webbrowser client.

Changelog

1.10.3

  • ANDROID: Decouple Play Core dependency to bring app into compliance for F-Droid
  • AI/SERVICE: Disable AI Service setting by default
  • BLUETOOTH/LAKKA: bluetoothctl: add / modify pairing steps
  • CHEEVOS: Disallow manual frame delay setting in Hardcore Mode
  • DATABASE: Serial scanning for Wii now includes WBFS
  • INPUT/MAPPING: Fix offset + crash when clearing input port binds
  • INPUT/MAPPING: Fix saving of ‘Analog to Digital Type’ when configuration overrides are used
  • LOCALIZATION: Add Valencian language option
  • LOCALIZATION: Updates
  • MENU/SETTINGS: Move ‘Show Menu Bar’ under ‘Windowed Mode’ settings
  • MENU/SETTINGS: Add sublabels for ‘Subsystems’ and ‘Input Deadzone/Sensitivity’
  • MENU/SETTINGS: Move ‘On-Screen Notifications’ to top
  • MENU/XMB: Unified the shadow alpha value to a slightly darker one for better readability
  • MENU/XMB: Corrected the option label and sublabel for actual behavior
  • MIYOO: Enable ALSA audio driver and default to it
  • PSP: Take out extra languages/localization, adds about 4/5MB to the binary, and RAM is limited on PSP (32MB and 64MB RAM models)
  • STATIC PLATFORMS: Populate all history list metadata when launching content from playlists
  • STEAM: Introduce Steam Rich Presence
  • VIDEO: Fast-Forward Frameskip improvement
  • VIDEO/THREADED: Stability fixes
  • WINDOWS/WINRAW: Fix multiple light guns
  • WIIU: Fix USB get_device_name(), don’t truncate to three chars

RetroArch 1.10.2 release!


RetroArch 1.10.2 has just been released.

Grab it here.

If you’d like to learn more about upcoming releases, please consult our roadmap 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 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!

Highlights

Big improvements for Steam and Steam Deck users


We’re gearing up for Steam Deck, and in the process we are finally starting to turn the RetroArch Steam version into something more than just a plain port (courtesy of Mats).

We came up with a SteamWorks shim that allows RetroArch Steam to interface with the Steamworks API. Mist, our middleware tool, runs in a separate process, runs concurrently wtih RetroArch Steam, and functions as a bridge between this separate process interfacing with Steamworks and the GPL application itself running in an entirely different process. This is 100% GPL compliant and the same approach has been employed by numerous other examples on Steam, including the aforementioned Icculus.

Thanks to Mist, here are some of the big new features for Steam users (and in particular, Steam Deck users):

  • You can now install and uninstall cores directly from inside RetroArch by going to ‘Manage Cores’ from inside the menu. No longer do you have to manually browse Steam with your webbrowser and download random core DLCs for RetroArch, you can do it from within the convenience of the app running itself.
  • On Steam Deck, the native OSK (Onscreen Keyboard) will appear now instead of the RetroArch default OSK. This should give a more seamless experience. We have decided against enabling the Steam OSK with Big Picture since it seems partially broken and instantly dismisses itself (or at least those were our testing results on a Steam Deck).

As a result of these changes, the Steam port is starting to become its own thing rather than just a straightforward no-frills port of the Windows/Linux versions.

Improved audio sample pacing / latency in many cores

Big improvements have been made to several cores concerning improved audio latency and audio sample pacing.

Not only should performance be better, but you should also be able to lower audio latency buffers now while still getting perfect sound.

Here are some of the cores that have received work recently on this front:

  • Cannonball
  • Flycast
  • Gambatte
  • Nestopia
  • Snes9x
  • Snes9x 2002
  • Snes9x 2005
  • Snes9x 2010
  • SwanStation
  • UAE
  • VICE

For example, frame time deviations in a core like Snes9x 2010 are now extremely low with a default 64ms audio buffer. We measured 0.4 to 0.3% deviation, and this figure could likely be optimized even further by fiddling some more with audio buffer latency, or changing the audio driver.

Other measures have also been taken to further improve audio latency. Some cores have been updated now so that audio gets pushed to the frontend (i.e. RetroArch) AFTER the video frame has been uploaded. This is just in case the audio upload blocks for too long due to audio processing and syncing performed by the frontend. Uploading the video frame as soon as possible after the emulation loop is generally a good idea since it potentially avoids unnecessary input latency.

Steps have also been taken in cores to minimise use of the audio batch callback (for example, Tyrquake and Snes9x 2010), leading to better audio sample pacing, less overhead and better overall performance.

For Miyoo users

The following cores have been added for Miyoo platform users:

  • BlueMSX
  • ECWolf
  • FCEUmm

For OpenDingux users

The following cores have been added for OpenDingux platform users:

  • Dinothawr
  • NXEngine
  • XRick

UI/UX improvements


RGUI, MaterialUI and Ozone menu drivers now have new color themes. ‘Gray Dark / Gray Light’ themes have been added.

For XMB users, vertical fade adjustments have been made so that it functions a bit better like the original. Title margin can now also be adjusted, so that the title won’t cut off anymore on display devices with overscan (i.e. CRT TVs).

For RGUI users, 6×10 extended ASCII and Latin Extended A and B fonts have been added. These will enable most Latin alphabets to be displayed in RGUI.

For Ozone users, a thumbnail scaling option has been added (Settings->User interface->Appearance). This option scales the size of the thumbnail sidebar, which in turns means the thumbnails are scaled along with it. It should scale the thumbnails so that they should fill up more screen real estate now in the right sidebar. See the picture below for an example.

Manage Input Remapping Files

1.10.2 adds a new Manage Remap Files submenu to Quick Menu > Controls:

This updates correctly in real-time (the previous save/remove remap menu entries do not…), and only shows relevant options. When removing a remap, existing files are re-scanned and the one with the next highest priority (if found) will be loaded.

In addition, the currently active remap file will be saved automatically when closing content – i.e. it is no longer necessary (or indeed possible!) to save the file manually after each change.

We have also added a new Reset Input Mapping entry under Quick Menu > Controls > Manage Remap Files:

We have also fixed a nasty bug that could cause remap file corruption (incorrect or unwanted entries) when saving a remap after resetting one or more binds.

Prevent ‘global’ configuration of input libretro device type

Before, RetroArch allowed the input ‘libretro device type’ to be set globally per-user. This was nonsensical for a couple of reasons:

  • Input device type has no meaning unless a core is actually running, so the option to set it globally does nothing but confuse users
  • A global device type may be set that is incompatible with cores, leading to disabled input in-game. e.g. setting the global type to ‘RetroPad with Analog’ breaks Beetle PSX, since that is not a valid device type recognised by the core

1.10.2 fixes the issue by:

  • Removing the global option Settings > Input > Port N Controls > Device Type (device type can now only be set while a core is running, via Quick Menu > Controls > Port N Controls)
  • Ensuring that the ‘global’ device type is reset to the default RETRO_DEVICE_JOYPAD on startup and when closing cores (unless a device type override is set via the existing command line interface)

Note that device type is no longer stored in the main RetroArch config file, only in input remap files.

WiiU – Optimize for Gamepad

RetroArch WiiU adds a new option (Settings -> Video -> Output -> Optimize for GamePad). When enabled, it uses a 960p viewport if the user is on either 720p or 1080p (if they’re on 480p, they’re already optimized for GamePad). It defaults to off, so the native TV resolution is still preferred out of the box.

Explanation

The Wii U is a weird case with RetroArch because of the two screens (TV and Wii U GamePad). The Wii U can be configured to output video at 480p, 720p or 1080p (or interlaced equivalents), whereas the GamePad has a native 480-line display. While it is possible to send different images to the TV and GamePad, RetroArch currently sends the same image to both. This creates a bit of a conundrum as 480 does not divide evenly into any of the other available resolutions.

When running 240p content, setting the Wii U to 720p just works, because a 3x integer scale (240*3 = 720) on the TV also happens to be a 2x integer scale (240*2 = 480) on the GamePad. However, when running 480p content, having the Wii U set to 720p will result in a poor image all around, with non-integer scaling from 480->720 on the TV, and then even worse, 480->720->480 on the GamePad.

Running the Wii U at 1080p, you get the worst of all worlds. Absolutely nothing divides evenly into 1080, so no matter what content you’re playing, you’ll need either large borders or a filter/shader to stretch to that non-integer resolution, and putting that 1080p image back on the 480p GamePad makes it even worse again. Many users only use 720p because of the poor results you get from 1080p currently.

By running 1080p with a 960p viewport, you can do things like a 4x integer scale of 240p content which becomes a 2x integer scale on the GamePad, or a 2x scale of 480p content which becomes a 1x native display on the GamePad. Even more exotic resolutions like the Game Boy Advance (160p) are enhanced, with 160 dividing 6x into 960 or 3x into 480. This one change makes 1080p a lot less useless on Wii U.

  • when “Optimize for Gamepad” is OFF: use the system output resolution (previous behavior)
  • when “Optimize for Gamepad” is ON, pick the closest resolution based on the system resolution

And more

Not listed here of course are all the countless improvements made to individual cores since the last version. We might go into more detail on that sometime later, but rest be assured that cores are updated on a daily basis and receive heavy improvements, so keep updating your core library to get the latest benefits at all times!

Changelog

1.10.2

  • 3DS: Add a menu toggle for switching between old and new 3DS speeds, located in the ‘Power Management’ menu. Enabled by default, hidden on old 3DS devices.
  • AUDIO/MIXER: Free audio voices properly
  • CHEEVOS: Update to rcheevos 10.3.3
  • CHEEVOS: Support for Arduboy
  • CHEEVOS: Fix tab sequences in rich presence being turned into t character
  • CHEEVOS: Fix overflow when parsing float value that has more than 9 digits after the decimal
  • CHEEVOS: Fix memory mapping when disconnect mask breaks a region into multiple blocks
  • CORES: Enable manual selection of which cores are displayed in the ‘Standalone Cores’ menu
  • DATABASE/EXPLORE: Added more categories to the Explore menu
  • INPUT: Fix analog stick not working with ‘Unified Menu Controls’
  • INPUT/MAPPING: Add ‘Manage Remap Files’ submenu + automatically save input remaps when closing content
  • INPUT/MAPPING: Add ‘Reset Input Mapping’ option to ‘Manage Remap Files’ menu
  • INPUT/MAPPING: Fix keyboard device remap nulling
  • IOS/IOS13+: Support a toolbar that allows toggling of onscreen keyboard and touch mouse
  • LIBRETRO: RETRO_ENVIRONMENT_SHUTDOWN fix – ensure core is properly unloaded when RETRO_ENVIRONMENT_SHUTDOWN is called
  • LIBRETRO: RETRO_ENVIRONMENT_SHUTDOWN fix – ensure menu stack is properly flushed when RETRO_ENVIRONMENT_SHUTDOWN is called
  • LINUX/MALI FBDEV: Fix segfault switching video threaded from quickmenu
  • LOCALIZATION: Add Czech language support
  • MMAP: Handle disconnect bits on both sides of len
  • MIYOO: Improve CPU architecture and model name identification for Miyoo
  • MENU/SETTINGS: Remove ‘Advanced Settings’ flag from ‘Settings > Core’ menu
  • MENU/MATERIALUI: Add ‘Gray Dark + Light’ themes
  • MENU/RGUI: Add 6×10 extended ASCII and Latin Extended A and B fonts. These will enable most Latin alphabets to be displayed in RGUI.
  • MENU/RGUI: Add ‘Gray Dark + Light’ themes
  • MENU/XMB: Add title margin adjustment
  • MENU/XMB: Vertical fade corrections
  • MENU/OZONE: The size of the thumbnail bar can now be changed though a new option (Settings->User interface->Appearance) up to double its normal size.
  • MENU/OZONE: Add ‘Gray Dark + Light’ themes
  • MENU/OZONE: Add thumbnail scale option
  • HOTKEYS: Added hotkey for toggling sync to exact content framerate
  • HOTKEYS: Prevent log spam when using rewind hotkey with cores that don’t support rewind, if rewind functionality itself is disabled
  • HOTKEYS: Add hotkey for toggling sync to exact content framerate
  • PS3/PSL1GHT: Add RSX graphics support
  • PS3/PSL1GHT: Add libco support
  • PS3/PSL1GHT: Add experimental PSMove support
  • RS90: Optimise layout of sdl_rs90_video
  • STEAM: Use native OSK (Onscreen Keyboard) instead of built-in RetroArch version
  • STEAM: New built-in core DLC downloader
  • STEAM: Swap OK/Cancel buttons by default
  • VIDEO/HDR: Removed redundant copy of buffer in HDR mode if the shader has already a HDR format i.e. R10G10B10A2 (updated Vulkan/D3D11/D3D12 drivers)
  • VIDEO/HDR: Fixed crash when using stock shader and HDR and previous optimisation
  • WAYLAND: Dynamically load libdecor at runtime
  • WAYLAND: Fix splash screen when using xdg_toplevel
  • WAYLAND: SHM anti-collision for the splash screen
  • WAYLAND: Skip splash screen if window is not ready
  • WII: Fix find_connection_entry(): needs unsigned int Otherwise the USB gamepad cannot be found, if VID/PID has leading zero. This issue happened with Retrode gamepad adapter
  • WII: Rework Retrode gamepad implementation to support multi_pad interface
  • WII: Fix – Unplugging and re-plugging now works again
  • WII: vWii- Only gamepad 1 is supported, because multi_pad is currently only relevant in the Wii U implementation
  • WIIU: Implemented the multi_pad interface according to input/connect/connect_wiiugca.c
  • WIIU: Add Optimize for Gamepad option
  • WIIU: Fix USB gamepad support

Lakka 4.0 release

Original article here.

New version of Lakka has been released!

We are happy to announce the new and updated version of Lakka.

Release summary

Changes since version 3.7:

  • Build system based on LibreELEC 10.0.2
  • RetroArch updated to 1.10.1
  • Cores updated to their most recent versions
  • superbroswar: added new libretro core
  • sameduck: added new libretro core
  • Mesa updated to 22.0.0
  • Mainline kernel updated to 5.10.103 (PC, Amlogic, Allwinner, NXP)
  • Raspberry kernel updated to 5.10.95
  • Most ARM devices switched to aarch64
    Rockchip RK3288, RK3328 and RK3399 switched to mainline kernel 5.10.76
  • Added support for additional Allwinner and Amlogic devices (not tested on our side, as we do not own many of these devices)
  • Nintendo Switch: complete rewrite of the port with many fixes and enhancements
  • Tinkerboard and MiQi now use common system RK3288 (hence the change of the image names); you need to place empty file named .nocompat in the /storage/.update folder / Update Samba share
  • Dropped support for RPi4.arm

This is our first release with the updated build system. We tried to port all our changes to this new build system, but we might have missed some of our optimizations and enhancements. Please report us any regression or missing features or drivers via our issue tracker.

Not all platforms have been ported to the new build system yet. For these platforms we have released a maintenance update (3.7.1) with RetroArch and libretro cores updated to the same versions as in 4.0 release. Lakka users with Hardkernel’s Odroid XU3/4, Odroid Go Advance / Super, and Anbernic’s RG351M / RG351P / RG351MP / RG351V devices get update as well.

Known issues

See GitHub for information about currently open bugs and issues and also for possible workarounds for these bugs/issues.

Final notes

You can download the latest release from Lakka download page. If you want to follow the development of Lakka more closely, you can download latest Lakka nightly builds.

If you want to show your support for further development of the Libretro projects and ecosystem, you can learn more here.

Happy retro-gaming!

Libretro/RetroArch New Cores – A5200/WASM4/Arduous/SameCDi/JumpnBump

Libretro and its various contributors have certainly been busy these past few weeks. We bring to you a wide range of new cores, available for use in RetroArch, and/or any other Libretro-compatible frontend.

a5200

The a5200 core is an optimised Atari 5200 emulator based on Atari800 2.0.2. Originally developed for the GCW Zero, it runs full speed on even the weakest hardware (e.g. o3DS) – yet with a design focussed on ease of use and tight libretro integration it provides a simple ‘plug and play’ solution for Atari 5200 content on all platforms. The core debuts with robust input handling (including analog and number pad entry), audio filtering, CRT ghosting effects, an optional internal open-source BIOS and full save state support. Further enhancements are planned over the coming weeks.

WASM-4

WASM-4 is a low-level fantasy game console for building small games with WebAssembly. Game cartridges (ROMs) are small, self-contained .wasm files that can be built with any programming language that compiles to #WebAssembly.

You can now play these games/programs from within RetroArch, or any other Libretro-compatible frontend.

You can find more information at here.

Arduous

A Libretro core for the #Arduboy. The Arduboy is a handheld game console with open source software, based on the Arduino hardware platform.

SAME_CDi

SONY DSC

SAME CDi is a S(ingle) A(rcade) M(achine) E(mulator) for libretro, forked from MAME libretro, which is in turn a fork of MAME. It includes only the Philips CD-i driver, and simplifies the loading of CD content to provide a ‘plug and play’ experience. It emulates exclusively the Philips CD-i game console/settop box device from the early ’90s.

You can find more information at here and here.

Jump ‘n Bump

 

Jump ‘n Bump has finally been ported to Libretro/RetroArch. This is a game for the whole family. You play as a cute fluffy little bunnies and hop on each other’s heads.

At the beginning you are in the menu, where you have to let each active player jump over the tree trunk to enter the play area, and then walk to the right. You will then enter the arena. The aim is to jump on the other bunnies’ heads…

Jump ‘n Bump was originally a DOS game by Brainchild Design, which was open sourced under the GPL license and ported to SDL, and then SDL2.

How to use it
You can play Jump ‘n Bump by loading one of the .DAT files (levels) from Load Content. A fair few of them are available on Libretro/RetroArch’s ‘Content Downloader’.