Libretro Cores Updates – PCSX2 Alpha release for Windows and more!

PCSX2 Alpha core available for Windows now!

Today we’re releasing an alpha version of the PCSX2 libretro core on the buildbot. It’s available for Windows only right now, but the same core has been tested to work on Xbox One/Series systems as well.

Important things to know

  • Create the following directory in your system directory – “pcsx2”. You can put all the asset files there from your regular PCSX2 install. See pic below for an example.

    You need a working BIOS inside /pcsx2/bios. PCSX2, unlike Play!, will not work without a real BIOS.

  • It’s still an alpha version. Things are rough around the edges. Expect bugs and things to be incomplete.
  • There’s a working OpenGL renderer and a Direct3D11 renderer option. Direct3D 11 renderer can be faster than OpenGL but also has less features. Pick whichever works best for you. On Xbox you will only be able to use Direct3D11 anyways.
  • This core uses the x86_64 dynarec which was added to PCSX2 a year ago. It is still less compatible than the 32bit x86 dynarec in PCSX2, so keep that in mind. It’s for similar reasons that the software renderer right now won’t work (it’s not compatible yet with x86_64, not in upstream either).
  • There’s a bug that can happen right now upon closing content or exiting RetroArch with the PCSX2 core on Windows – the RetroArch process might not completely cleanly shut itself off and you might still be able to see a 0% CPU process remaining in the Task Manager. We have not been able to figure out how to fix that yet as the PCSX2 codebase is a definite case of ‘here be dragons’, but for now when this happens, you can just bring up the Task Manager and close it manually. It shouldn’t have a real detriment on performance but it is of course far from ideal and hopefully something we can fix soon with the help of some contributors. We have found this happens the most with the Direct3D 11 renderers.
  • Switching resolution at runtime right now can be a bit unstable, so does switching fullscreen resolution. We might just make resolution switching require a restart since this tends to be too unstable for now.

Update policy for this core
Hard-forked core for now. Govanify is going through many (necessary) refactors in PCSX2 upstream to make the code more portable, and he has also expressed his interest in an upstreamable libretro core somewhere down the line when the final refactoring of the GUI is complete. So either of two things can happen when that happens, if this is more closely aligned to upstream core is better in every way including performance, this will be replaced. If not, we will likely have two cores, one being the upstream-friendly core and this being the hard-forked one. As of this moment a lot of work remains to be done on PCSX2 to sort out all the internals that are chockful of nonportable code. Therefore, for now, the experimental PCSX2 core kinda is doing its own thing. PCSX2 still has a lot of inherently nonportable code in it, from WxWidgets to libglib. It’s for that reason that we don’t have a Linux core yet on our buildbot. We hope that we will be able to figure out a proper portable core for Linux users soon.

Expect a lot of Quality of Life enhancements to this core soon. We wanted to share this with you now rather than sit on it for even longer, now that it’s on the buildbot we can at least push regular updates to it, people can report issues and developers can contribute. Everyone wins.

Play! (experimental PlayStation2 emulator) is back on the buildbot!

The Play! libretro core is back on our buildbot! It took some time for this to be readded to our modern new buildbot but here it is!

Available right now for: Android (AArch64/ARMv7/x86), macOS (Intel), Linux (32bit/64bit), and Windows (32bit/64bit).

Update policy for this core
Upstream. Updates are pulled straight from the upstream repository.

DuckStation/SwanStation core updated

The DuckStation/SwanStation core has been updated to a build from a week ago.

Update policy for this core
This will remain a shallow fork and attempts are being made to make the surface area for patches small so that we can easily pull in updates. Some new contributors have jumped onboard and they want to ensure this core remains updated.

Mainline MAME available for iOS11 and up/tvOS !

The mainline MAME core is now available for iOS and tvOS users! It is also available for Mac Intel x64 users, and we hope that we can make it available for ARM Mac users soon as well.

Also important to note we will be updating to version 0.330 soon.

Update policy for this core
This is pretty much a shallow fork. It just attempts to pull in the latest changes from upstream without making many changes.

gpSP (Game Boy Advance emulator)

Many changes have been made under the hood to significantly increase performance of gpSP. One of the big changes that led to at least a 5-6% performance improvement was the removal of libco (a library used for cooperative threading). 3DS users especially should be in for a treat with gpSP, but realistically everyone benefits across the board, whether you’re on an ARM or x86 system. We can quite comfortably state you will be hard pressed to find a better and more well performing version of this emulator anywhere else right now.

* Support for generic MIPS (including Dingux)
* Built-in BIOS that ships internally and requires no external files/dependencies
* Removal of libco (5-6% perf or so) and some performance fixes for x86/arm/mips (for perf)
* Fixed the x86 dynarec and the ARM dynarec, that were pretty much broken. Good speedups (or power savings on portable devices)

Immediate roadmap for gpSP: PS2 support (coming soon (TM)), rumble and tilt sensor support, AARch64 dynarec (mid-term goal)

One caveat right now is that these changes have unfortunately caused it to no longer work on PS Vita. However, the plan is to fix this soon, and for this to be only a temporary thing.

Update policy for this core
Hard fork, self-maintained.

Picodrive (Sega Mega Drive/Master System/Sega CD/32X emulator)

This has received many speed improvements and enhancements courtesy of irixx, 32X support has seen plenty of improvements, and the results speak for themselves. Works wonderfully on OpenDingux-based devices and PS Vita, some of the lower end systems out there.

A separate blog article might be written about all the changes soon.

Update policy for this core

Hard fork, self-maintained

FCEUmm (Nintendo Entertainment System emulator)

Some important new updates from New Rising Sun that adds more mapper support (PR notes are his):

Add features to mapper 332/BMC-WS:

  • implement additional outer bank bit to support multicarts twice as large as WS-1001 (“Super 40-in-1”)
  • implement CNROM-128/-256 mode using two or four inner banks switched via CNROM-like latch at CPU $8000-$FFFF
  • implement solder pad/DIP switch change via soft-reset, resulting in different multicart menus
  • soft-resetting resets to menu as on real hardware, not just the currently-selected game.
    Tested with the HH-xxx series of multicarts, some of which available on LIBG, as well as the previously-supported WS-1001.
  • I wanted to add a couple of multicart mappers that use the J.Y. Company ASIC and fix a few bugs while doing so. I ended up rewriting the whole thing by porting the code from NintendulatorNRS. This improves the modularity of the code by wrapping the PRG and CHR sync functions with mapper-specific ANDs and ORs, which is necessary for multicart use, and hopefully improves the readability (though I understand that’s a matter of taste). Previous save states had to be invalidated in any case since the previous code only saved four of the eight CHR LSB registers.

    Source organization changes:

    Combine duplicate code from 90.c, bmc13in1jy110.c and sc-127.c into one new file jyasic.c.
    Features/corrections:

    Window text not shown at the beginning of Tiny Toon Adventures 6 (“Baabs is dreaming about becoming an actress”).
    Bad cursor sprite on “Mighty Morphin’ Power Rangers III”‘s title screen.
    Some mapper 295 multicarts not working, such as SC-126.
    Added Adder to ALU (not used by any game).
    Add IRQ mode 3 (writes to CPU address space).
    Save all eight CHR LSB registers (previous code only saved the first four).
    Ignore writes to x800-xFFF except 5800 and C800, needed for Final Fight 3 on SC-128.
    Allow DIP setting to be read from all possible locations: 5000, 5400, 5C00, necessary for a few multicarts.
    Adds the following mappers: 282, 358, 386, 387, 388, 397, 421.

    Remaining issues:

    IRQ timing is not as perfect as the NintendulatorNRS code from which it was taken, which had been verified against real hardware. This is due to there not being a true “PPU Read Handler” in the mapper interface (as far as I can see), and PA12 timing in the core PPU emulation being not accurate enough to replace the “clock IRQ eight times per horizontal blanking” solution that I kept from the previous code.
    There remains one J.Y. ASIC-using mapper: 394, which mounts both the J.Y. ASIC and an MMC3 clone and uses extra register bits to switch between the two. That is a bit difficult to code and will be for another day.
    Successfully tested with:
    Mapper 35:
    Warioland II (JY039)

    Mapper 281:
    (晶太 JY-052) 1996 Super HiK 4-in-1 – 新系列阿拉丁雙Ⅲ组合卡
    (晶太 JY-052) 1997 Super HiK 4-in-1 – 新系列叢林泰山組合卡
    (晶太 JY-053) 1996 Super HiK 4-in-1 – 新系列獅子王超强组合卡
    (晶太 JY-054) 1996 Super HiK 4-in-1 – 新系列快打旋風Ⅱ组合卡
    (晶太 JY-054) 1997 Super HiK 4-in-1 – 超級新系列大金鋼4代組合卡
    (晶太 JY-055) 1996 Super HiK 4-in-1 – 新系列阿拉丁Ⅲ.致命武器組合卡
    (晶太 JY-066) 1996 Power Rangers HiK 4-in-1 – 新系列金鋼戰士專輯組合卡
    (晶太 JY-066) 1997 Power Rangers HiK 4-in-1 – 新系列金鋼戰士專輯組合卡
    (晶太 JY-068) 1996 Super HiK 3-in-1 – 新系列阿拉丁Ⅲ.激龜Ⅲ組合強卡
    (晶太 JY-080) 1996 Super HiK 3-in-1 – 新系列中國兔寶寶全輯組合卡
    (晶太 JY-088) 1996 Super HiK 5-in-1

    Mapper 282:
    (晶太 JY-062) 1996 Super Mortal Kombat Ⅲ Series – 新系列真人快打三代組合卡 18-in-1
    (晶太 JY-064) 1996 新超強 18-in-1 阿拉丁組合系列卡 – Super Aladdin Ⅲ Series Card
    (晶太 JY-069) 1996 Super HiK 4-in-1 – 新系列忍Ⅲ.沼澤怪獸組合卡
    (晶太 JY-070) 1996 Super HiK 3-in-1 – 新系列眞人Ⅲ.兔寶寶組合強卡
    (晶太 JY-071) 1996 Super HiK 3-in-1 – 新系列眞人Ⅲ.小新2.明王組合卡
    (晶太 JY-079) 1996 Super HiK 3-in-1 – 新系列眞人Ⅲ.金鋼4.蜜蜂組合卡
    (晶太 JY-084) 1996 Photo Gun 9-in-1
    (晶太 JY-098) 1997 Super HiK 6-in-1
    (晶太 JY-101) 1997 Super HiK 18-in-1
    (晶太 JY-105) 1997 Super HiK 21-in-1
    (晶太 JY-114) 1998 Super HiK 5-in-1
    (晶太 SC-128) Super 25-in-1 Final Fight
    (晶太 SC-130) Super Photo-Gun 13-in-1

    Mapper 295:
    (晶太 JY-010) Super Ball Series 18-in-1
    (晶太 JY-014B) 1996 Soccer 7-in-1 – 足球專輯 (rev0)
    (晶太 JY-014B) 1996 Soccer 7-in-1 – 足球專輯 (rev1)
    (晶太 JY-050) 1997 Super HiK 8-in-1 (rev1)
    (晶太 JY-095) 1997 Super HiK 4-in-1
    (晶太 JY-096) 1997 Super HiK 7-in-1
    (晶太 JY-097) 1997 Super HiK 8-in-1
    (晶太 JY-099) 1997 Super HiK 4-in-1
    (晶太 JY-100) 1997 Super HiK 5-in-1
    (晶太 JY-109) 1997 Super 9-in-1
    (晶太 JY-110) 1997 Super 13-in-1
    (晶太 SC-126) 方塊專集 HiK Block 14-in-1

    Mappers 90/209/211:
    (晶太 CK-124) Super HiK 8-in-1
    (晶太 JY-118) 1998 Super 3-in-1
    (晶太 JY-120A) 1998 Super 45-in-1
    (晶太 JY-122) 115 超強合卡
    Aladdin – 阿拉丁
    Aladdin III, Popeye II꞉ Travels in Persia
    Contra Spirits (1995)
    Donkey Kong Country 4
    Final Fight 3
    Mickey Mania 7
    Mighty Morphin’ Power Rangers III
    Mighty Morphin’ Power Rangers IV꞉ The Movie
    Mike Tyson’s Punch-Out!! (JY021)
    MK3 – Special 56 Peoples
    Mortal Kombat 2-in-1
    Mortal Kombat II Special
    Super Aladdin꞉ The Return of Jafar
    Super Mario & Sonik 2 (rev1)
    Super Mario World
    Super Mortal Kombat 2-in-1
    Tiny Toon Adventures 6
    中國兔寶寶 Rabbit
    真 Samurai Spirits 2꞉ 覇王丸地獄変
    鉄拳 – Tekken 2

    mappers 358/386/387/388/397/421:
    (晶太 JY-016) 1997 Super Game 7-in-1
    (晶太 JY-056) 1996 Super HiK 4-in-1 – 新系列真人快打Ⅱ特別版 (rev0)
    (晶太 JY-056) 1996 Super HiK 5-in-1 – 新系列眞人快打Ⅲ56人特別版 (rev1)
    (晶太 JY-082) 1996 Soccer 6-in-1
    (晶太 JY-087) 1996 Super HiK 4-in-1
    (晶太 JY-089) 1996 Super HiK 4-in-1
    (晶太 JY-090) 1996 Super HiK 5-in-1
    (晶太 JY-093) 1996 Super HiK 4-in-1
    (晶太 JY-094) 1996 Super HiK 4-in-1
    (晶太 JY-113) 1998 Super HiK 5-in-1
    (晶太 JY-117) 1998 Super HiK 6-in-1
    (晶太 SC-129) 98 街頭快打格鬥 15-in-1

    bSNES HD Beta/bsnes mainline available for iOS/tvOS/ARM64 Mac

    Widescreen SNES emulation on your iDevice and ARM Mac is now available!

    Update policy for this core
    Upstream, gets built straight from DerKoun’s upstream repository.

    Genesis Plus GX Wide available for iOS/tvoS/ARM64 Mac

    Another welcome addition to the Apple fold – the widescreen-enhanced version of Genesis Plus GX! For more on that, read this article here.

    Update policy for this core
    Hard fork, as it makes many sweeping changes to Genesis Plus GX to achieve widescreen support, which would make resyncing with upstream very hard to do.

    Other cores which have received updates

    Here is a list of other cores that have received updates, but for which we cannot post any changelogs due to lack of time. We might go into some more of the changes here later on.

    Beetle PSX
    FB Neo
    MAME 2003 Plus
    VICE
    P-UAE (Amiga emulator)

RetroArch 1.9.1 released!


RetroArch 1.9.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 with our users. This project exists because of your support and belief in us to keep going doing great things. If you’d like to show your support, consider donating to us. Check here in order to learn more. In addition to being able to support us on Patreon, there is now also the option to sponsor us on Github Sponsors! You can also help us out by buying some of our merch on our Teespring store!

RetroArch back in action!

Today marks an important day for our project. We consider the migration to the new infrastructure to be almost 95% done. We have left the old infrastructure behind, it is done and dusted and a thing of the past.

From now on, you can expect periodic stable releases again for all platforms. Expect our project to be hitting on all cylinders from this point on!

One blog post is not enough to go through all the milestones that have been reached, so expect many followup blog posts in addition to this. In this blog post instead we will try our best to summarize most of the highlights.

What remains to be done:

  • Some cores will still need to be added (mainly cores that require compilation with CMake for iOS)
  • Windows binaries right now are still unsigned and not codesigned. We have ordered an Extended Validation code signing certificate which will allow our Windows binaries in the future to pass through SmartScreen with no issue. This will cost us a pretty penny each year but we consider the additional cost worth it for our users. We hope that by the time the next stable rolls out of the door, these binaries will all be signed, as will the nightlies.
  • Because of this, be aware that while installing RetroArch on Windows with the Installer, you might be greeted by a SmartScreen filter that the application is unsafe. You can safely ignore this.

Here’s some additional new platform releases since this new stable:

  • For the first time ever, we have rolling nightlies and stables for iOS (ARM64/Aarch64), tvOS, and macOS.
  • For the first time ever, we have an Apple Silicon/Mac M1-compatible build of RetroArch. Download the Universal Metal build if you intend to use RetroArch on one of these new Macs.
  • For the first time ever, we also have a new backwards compatible version of RetroArch for iOS 9 users. iOS users can choose between an iOS 9 version (which is 32bit ARM only) and an iOS 11 version (which is 64bit ARM only). We intend to follow this up in the near future with an iOS 6 version. We here at RetroArch believe in the promise of backwards compatibility and we always intend RetroArch to be an omnipresent platform that can be run on any device you want. We love the ability of users being able to turn their obsolete iDevices into capable little RetroArch handheld machines.
  • For the first time, macOS stables and nightlies are codesigned and notarized. So you no longer need to resort to workarounds in order to install them on your Mac.
  • We have nightly and stable releases for OpenDingux now, including a special release for a beta firmware. This version should have significantly better performance. Supported devices for this platform include (but are not limited to): GCW Zero, RG350M, RG280V, and possibly more.
  • There are now nightly and stable releases for Linux available for both 64bit and 32bit x86 PCs in the form of AppImage bundles. These bundles come with a portable home directory with assets included, or you can use them with your existing settings and assets from the typical ~/.config/retroarch location. There are two available packages: one that includes the Qt desktop menu and one without, in case your system-installed Qt libs conflict with the ones it comes bundled with. The AppImage builds should work with most distros that were released in the last three years or so.

Release notes

  • There is no PCSX ReARMed core available for the Switch port as of yet. This will be added later.
  • The Direct3D 11 video driver now defaults to the ‘flip model’. There will be a setting added later that will make it possible to switch between ‘flip model’ and ‘blit model’. Flip model is supposed to be more performant and allow for better performance in windowed/borderless fullscreen modes.
  • As mentioned earlier, Windows installers/executablers are currently not codesigned, so expect SmartScreen to warn you about them. We hope to be able to fix this as soon as our Extended Validation codesigning certificate is fully operational.
  • There is currently no Windows 95/98 version of RetroArch available, or any of the MSVC2003 cores in fact. Expect these to be added back later.

Some highlights

  • Overlay improvements:
    • Full position/scaling configuration, automatic scaling, automatic hiding when a controller is connected
    • A new high quality default gamepad overlay: neo-retropad(-clear)
  • File browser improvements: most menu entries now (optionally) remember last selected directory/file (load content, shaders, etc.)
  • Support for saving per-directory core options and deleting core option overrides
  • Improvements to input configuration: new drop-down lists, proper menu ordering of input binds, cosmetic clean-ups (basically all of sonninnos’s stuff)
  • Option to automatically enable ‘game focus’ mode when running/resuming content
  • Many new video filters for platforms without shader support
  • RGUI: CJK and Russian language support

Changelog

We can’t possibly list everything since it has been such a long time since the last stable. Nevertheless, here is the changelog broken down as best as we could.

1.9.1

  • 3DS: Graphics widgets support
  • 3DS: On error, only init gfx on salamander build. This prevents graphical issues if the gfx is already initialized. Which should always be the case if called from a running core
  • 3DS: Update error applet
  • 3DS: Enable online Core Updater
  • 3DS: Guard threading
  • 3DS: Allow sideways screen rotation
  • 3DS: Enable threading and add a threaded audio driver
  • ANDROID: Implementation of fullscreen over notch function (for Android 9.0 and up)
  • ANDROID: Add Play Store module support.
  • ANDROID: Add option to switch all installed cores to Play Store versions
  • AUDIO: Memalign audio buffers to 64 bytes. This is the most common cache line size, helps with performance. Also fixes issues with platforms like PSP that wrongly assume that malloc returns aligned buffers (to 16bytes). This recently broke the PSP builds
  • AUDIO/ALSA: Fix float format detection
  • AUDIO/JACK: Deinterleave in the process callback. This allows us to avoid the extra copy to the deinterleave buffer and lets us use only a single jack ringbuffer
  • AUDIO/JACK: (Audio/JACK) Fix non-blocking write. Previously we would wait on the condition variable even in the non-blocking case. This improves fast-forward performance massively and brings JACK in line with other backends in that regard
  • AUDIO/XAUDIO2: Fix threaded audio bugs with cores like Dinothawr
  • CONFIG: Add support for saving per-directory core options and deleting core option overrides
  • CONFIG: Enable saving of changed parameters when ‘#include’ directives are used
  • CONFIG/DIRS: Enable configuration of the directories used for Favorites, History, Images, Music and Video playlists
  • CONFIG/REMAPS: Allow loading core remaps without content
  • CONFIG/OVERRIDES: Fix empty override paths when launching without content
  • CHEATS: Maximum search value corrections
  • CHEEVOS: Generic memory mapping using rcheevos
  • CHEEVOS: Ensure badge textures are released before video driver is deinitialized. Should fix crashes with slang shaders.
  • CHEEVOS: Include achievement runtime state in save states
  • CHEEVOS: Prevent hardcore toggle when emu-handled cheats are active
  • CHEEVOS: Add confirmation submenu to achievements hardcore toggle
  • CHEEVOS: Calculate leaderboard widget spacing based on video resolution
  • CHEEVOS: Show unsupported core message when viewing achievement list for unsupported core
  • CHEEVOS: Allow disabling leaderboard notifications and trackers separately
  • CHEEVOS: Add display widget for active leaderboards
  • CHEEVOS/CORE OPTIONS: Core options blacklist. Disables hardcore mode when certain core options are set
  • CLI: Add option for quitting on close content
  • CONTEXT/DRIVER SWITCHING: Allow context switching from gl to glcore
  • CORE OPTIONS: Add option to reset all core options for current core/content
  • CORE OPTIONS: Add per-folder core options
  • CRT/SWITCHRES: Improvements
  • CRT/SWITCHRES: Low resolution switch bug fix – This allows resolutions lower that 32×224 like 256×224 to work
  • CORE DOWNLOADER: Enhanced core downloader search functionality
  • D3D10: Should now be able to use shaders with hardware-accelerated libretro cores
  • D3D11: Should now be able to use shaders with hardware-accelerated libretro cores
  • D3D11: Skip shader/stock blend when we don’t have a texture. This happens if the core calls video_cb with the frame set to null on the first frame, and was causing black screens/driver resets. The ffmpeg core seems to do this.
  • D3D11: Fix shaders with scaled framebuffers
  • D3D11: Add flip model support – fallback to blit model for OSes where flip model is not supported (windows 7 and earlier). Will add a menu option later allowing the user to switch inbetween the two
  • D3D12: Should now be able to use shaders with hardware-accelerated libretro cores
  • D3D10/11/12: Increase sprite capacity, we need this so that the hardware rendered menu drivers doesn’t glitch out
  • DRM: Fix race condition in drm_surface_set_aspect
  • DRM/KMS: add support for custom HDMI timings / modes
  • DATABASE: Fix crash that could happen when selecting cursor
  • DATABASE/EXPLORE: Fix – Prevent segfault when accessing ‘Explore’ menu
  • EMSCRIPTEN: Only report back one screen pointer for rwebinput, fixes lockup when clicking on an overlay
  • FILEIO/PERFORMANCE: Only attempt to call dir_check_defaults once per runtime session
  • FILEIO/PERFORMANCE/3DS: Increase file buffer size and savestate chunk size. This seems to help with saving large savestates
  • FONTS: Improve handling of Arabic and Persian text
  • FONTS/FREETYPE: Use fontconfig to select fonts if available
  • INPUT: Add hold mode for turbo fire ‘Single Button’
  • INPUT MAPPING: Refresh bind list on device type change
  • INPUT MAPPING/REMAPPING: Minor bugfix – Remap file browsing starts navigation at input_remapping_directory even if the core-subdir (where saved files go) exists Having remaps for many different cores makes finding the active core files cumbersome, especially because remaps are not compatible between different cores (but maybe for cores emulating the same hardware)
  • IOS: Take out ‘Core Downloader’ from iOS 9/iOS 11 builds
  • IOS: IOSApp doesn’t crash anymore when a file is shared to it
  • INPUT: Keyboard device mapper rework
  • INPUT: New input bind order scan/clear fix
  • INPUT: Duplicate key event blocking additions
  • INPUT: Prevent duplicate key events with hotkeys + keyboard device type
  • INPUT: Keyboard LED driver
  • INPUT/AUTOCONFIG: Allow controllers with no/empty names to work.
  • INPUT/GAME FOCUS: Add option to automatically enable ‘game focus’ mode when running/resuming content
  • INPUT/HOTKEYS: Hotkey for Close Content / Unload Core
  • INPUT/LIBCEC: Map libcec-daemon keys to RETROK
  • INPUT/X11: Enable keyboard input when mouse cursor is not inside the RetroArch window but window still has focus
  • INPUT/X11: Fix mouse input when mouse is grabbed
  • INPUT/UDEV/RUMBLE: Fix rumble.
  • INPUT/WINDOWS/DINPUT: Simultaneous shift sticky fix
  • INPUT/WINDOWS/DINPUT: Prevent Win-key from opening Start Menu
  • INPUT/WINDOWS/DINPUT: Option for disabling Windows hotkeys
  • INPUT/WINDOWS/DINPUT: Mouse grabbing/clipping with Alt-Tab
  • INPUT/WINDOWS/DINPUT: Mouse grab fixes
  • INPUT/WINDOWS/RAWINPUT: Key position fixes
  • INPUT/WINDOWS/RAWINPUT: Mouse grab fixes
  • INPUT/WINDOWS/RAWINPUT: Prevent outside window mouse clicks when grabbed
  • INPUT/WINDOWS/RAWINPUT: Option for disabling Windows hotkeys
  • INPUT MAPPING/REMAPPING: Major bugfix – Remap file having a different device type requires manual intervention after loading for the core to register the type properly
  • JSON: New faster json parser/writer library rjson
  • JSON/RJSON: Replace rapidjson parser/writer in discord-rpc with rjson
  • LIBRETRO: Add API extension for cores to query the number of active inputs provided by the frontend
  • LIBRETRO: Ensure RARCH_CTL_CORE_OPTIONS_LIST_GET returns false if no core options are available
  • LIBRETRO: Add API extension for overriding frontend audio latency
  • LIBRETRO: Add API extension for cores to monitor frontend audio buffer occupancy
  • LINUX: Also show /run/media or /run/media/$USER in drives list
  • LINUX: Adjust brightness according to the limit. Seems like some platforms feature non-standard maximums, but the variable is correclty exported for us to use
  • LOCALIZATION: Add Finnish language
  • LOGS/SHADER: Shader log spam reduction
  • LOGS/CONFIG: Config logging cleanup
  • LOGS/SAVESTATE: Config logging cleanup
  • MAC: Apple Silicon/Mac M1 support
  • MAC: Code signing/notarization
  • MAC: Fix a leak with NSTemporaryDirectory() on ARC (Automatic Reference Counting) code
  • MAC: Support bundle assets extraction on macOS
  • MAC: Universal Metal build for both ARM and Intel Macs
  • MAC/UNIVERSAL: Add CoreAudio3 audio driver for Metal Universal build
  • MAC/IOS: Only extract assets once on first install
  • MENU: Add ‘L2 + R2’ menu toggle gamepad combo
  • MENU: Menu text improvements; clarifications, consistency, text mistakes,
  • MENU: Tweak menu scroll initial hold delays
  • MENU: Restrict menu acceleration to navigation buttons
  • MENU: Add ‘Menu Driver’ setting to ‘User Interface’
  • MENU: Relocate ‘Menu Scroll’ settings.
  • MENU: Separate ‘Turbo Fire’ menu.
  • MENU: Dropdown menu for ‘Custom Aspect Ratio’ setting.
  • MENU: Reorder Mouse Index next to Device Index
  • MENU: Submenu for Device Index/Mouse Index
  • MENU: Reorganize User Interface menu
  • MENU: Add ‘Remove DSP Plugin’ menu entry
  • MENU: Hide ‘Auto-Shader Delay’ menu setting when shaders are unavailable
  • MENU/ANIMATIONS: Fix non-smooth text ticker + reduce line ticker code duplication
  • MENU/ANIMATIONS/OZONE: Add cursor wiggle animation
  • MENU/ANIMATIONS/OZONE: Implement wiggling for main menu when wrap-around is disabled
  • MENU/NOTIFICATIONS: On-Screen Notifications’ menu clean-ups
  • MENU/NOTIFICATIONS: Add option to show/hide Refresh Rate notification
  • MENU/FILEBROWSER: Start auto-selecting last used path for more file browser menu entries
  • MENU/INPUT: Input port label adjustments
  • MENU/INPUT/XMB: Proper control port icons
  • MENU/INPUT/OZONE: Proper control port icons
  • MENU/QUICK MENU: Add remap clearing ability under Quick Menu controls
  • MENU/QUICK MENU: Cap ‘State Slot’ drop-down list to a maximum of 1000 (+Auto) entries
  • MENU: Customizable menu scroll hold delay.
  • MENU/DESKTOP: Fix mouse cursor limited by window range on F5 press
  • MENU/DESKTOP: Add simple shader option
  • MENU/DESKTOP/WINDOWS: Remove broken ‘Update RetroArch’ functionality for Windows. We want this to not only be system agnostic if we bring it back, but also work outside of the Qt desktop interface
  • MENU/OZONE: New Theme – Twilight Zone
  • MENU/RGUI: Add 3:2, 5:3 and 3:2/5:3 (centered) aspects
  • MENU/RGUI/TEXT RENDERING: Add Russian language text support
  • MENU/RGUI/TEXT RENDERING: Add support for CJK punctuation glyphs
  • MIDI/WINMM: Recover from MIDI messages not handled by the device
  • MIDI/WINMM: Fix winmm midi driver hanging on content closing
  • NETWORK: Add READ/WRITE_CORE_MEMORY network commands
  • NETWORK: Fix backwards condition in socket blocking behavior
  • NETWORK/NETPLAY: Attempt IPv4 when IPv6 fails
  • OGA/VIDEO: support for OGS
  • OGA: This keeps the tradition DRM driver along with the OGA one. The probe function skips the driver if the screen is non rotated to fall back to the regular DRM driver.
  • OGA: Fix messages from not disappearing
  • OGA: Implement RETRO_ENVIRONMENT_GET_CURRENT_SOFTWARE_FRAMEBUFFER. This is a faster rendering codepath for software rendered libretro cores that some libretro cores use right now. Video drivers in RetroArch have to explicitly implement this for this codepath to work at runtime.
  • OPENDINGUX: Add/Optimise rumble interface
  • OPENDINGUX: Fix frozen video when enabling fast forward
  • OPENDINGUX/SDL: OSD font clean-up
  • OPENDINGUX/SDL: Enable selection of image interpolation method when using ‘sdl_dingux’ gfx driver
  • OPENDINGUX/SDL: Enable integer scaling when using the ‘sdl_dingux’ gfx driver
  • OVERLAYS: Add option to scale overlays automatically (with aspect ratio correction)
  • OVERLAYS: Hide Overlay When Gamepad is Connected. Overlays will be hidden automatically when a gamepad is connected in port 1, and shown again when the gamepad is disconnected.
  • OVERLAYS: New default overlays for mobile (neo-retropad)
  • OVERLAYS: In addition to overlay scale, the user can now set an Overlay Aspect Adjustment factor. Most overlays are designed for 16:9 displays, which means they become stretched/ugly on modern wide aspect phones and suchlike. By changing the Overlay Aspect Adjustment factor, a user can scale the overlay width/height to achieve a uniform appearance regardless of display resolution.
  • OVERLAYS: Since scaling a gamepad overlay can result in buttons being squished too close together (or being pulled too far apart), the user can now adjust the effective spacing of the different ‘halves’ of an overlay via Overlay Horizontal Separation and Overlay Vertical Separation factors. Overlay Horizontal Separation divides the overlay in two vertically (left/right, at the centre point), and applies a spacing offset (positive or negative) between the UI elements on each side; Overlay Vertical Separation does the same, but the split is horizontal (top/bottom)
  • OVERLAYS/FIX: The Overlay X Offset and Overlay Y Offset options have been fixed, and now work correctly
  • OVERLAYS/FIX: All of the above options (and Overlay Scale) are configured and saved independently for landscape and portrait display orientations – so adjusting everything for a nice landscape layout won’t break the portrait display
  • OVERLAYS/FIX: When using the Vulkan gfx driver, memory is leaked every time an overlay is freed
  • OVERLAYS/FIX: When threaded video is enabled, loading overlays with no images (i.e. utility-type overlays, where everything is hidden until the screen is touched) can generate segfaults due to improper usage of realloc()
  • OVERLAYS/FIX: When Show Inputs on Overlay is enabled, ASAN reports bit shift errors due to an incorrect range check when handling turbo inputs – essentially, there is no upper limit to the considered input id range, which means overlay hotkeys (menu toggle, etc.) are incorrectly treated as having turbo support, causing bit shifts using wildly inappropriate id indices
  • PLAYLISTS/PORTABLE: Fixed first load initialization
  • PS2: Added Multitap support (up to 8 players)
  • PS2: Fix for not recognized digital and other non-standard controllers
  • PS2: Fix Quitting from RA
  • PS2: Add Audio mixer
  • REWIND: Prevent ‘Rewind Frames’ from being set to ‘1’ incorrectly on load content
  • RUNAHEAD: Add Run-Ahead Toggle hotkey with notifications
  • RBUF/ANIMATIONS: Simplify gfx_animation by switching from dynarray to rbuf
  • RBUF/CORE UPDATER: Replace static entries array with dynamic array via RBUF library
  • RBUF/M3U: Replace static entries array with dynamic array via RBUF library
  • SENSORS: Android (crash-)fixes/improvements + add option to disable sensor input
  • SDL2/VIDEO: Get the SDL2 video driver to work in Wayland/KMS
  • SAVESTATES: Adding savestate garbage collector for autoincrement stavestates. As some issues indicate, there’s an issue with the autoincrement save slot feature: slot index will increase and very old saves won’t be deleted. This adds support to delete old save states with a user defined save state limit (global). Instead of wrapping around the slot counter it will simply delete the oldest save, since it is simpler. For now there’s a limit of one deletion per save, which ensures a user cannot delete many saves by accident if they set the limit too low.
  • SAVESTATES/SAVEFILES: Ensure save file and playlist compression is disabled by default
  • SHADERS: Add option to remember last selected shader preset/shader pass directories
  • SHADERS: Use last selected shader preset directory when changing shaders via previous/next hotkeys
  • SHADERS: Remove Parameters line
  • SHADERS: Shaders fix for duplicate parameters loading bug
  • SHADERS: Fix Crash change num shader passes in UI
  • SHADERS/SLANG: Fix slang shaders with rotation
  • STREAMING/FFMPEG: Add Facebook Game Stream option (for embedded ffmpeg core-enabled RetroArch builds)
  • SWITCH: Fix input bind icons being off by one line
  • SWITCH: Fix audio issues
  • TLS/SSL: Add BearSSL support, as alternative to mbedTLS
  • VIDEO: AddVariable BFI (Black Frame Insertion)
  • VIDEO/DRM GO2: Dynamic resolution support
  • VIDEO FILTERS: Video filter optimisations
  • VIDEO FILTERS: Add several LCD-effect video filters
  • VIDEO FILTERS: Gameboy/Dot_Matrix video filters: Add XRGB8888 support
  • VIDEO FILTERS: Add Normal4x video filter
  • VIDEO FILTERS: Add ‘Upscale_256x-320×240’ video filter
  • VIDEO FILTERS: Add ‘Upscale1.5x’ video filter
  • VITA: Disable temporarily VitaGL
  • VITA: Fix bubble name
  • VITA: proper handling of boot params
  • VITA: Default menu scale 1.5x to improve readability
  • WIFI/LAKKA: Add a proper WiFi menu, with Enable/Disable & Disconnect options. This also allows WiFi passwords to be remembered. The underlying tool (connman) allows to store passswords (that’s why it auto connects whenever you boot a Lakka device), so we expose this so that the user does not have to re-input the pass when connecting to a saved wifi.
  • WII/HID: Added HID support for HORI mini wired ps4 gamepad
  • WINDOWS: Add support for accelerators to main win32 message loop
  • WINDOWS: Add accelerators for Open (Ctrl+O) and Fullscreen (Alt+Enter)
  • WINDOWS: Fixes some file I/O failures on Windows when paths are longer than 260 characters.
  • WINDOWS: Fix crashing on startup on Windows when using Chinese Simplified language.
  • WINDOWS/XP: The OpenGL 1 video driver is now the default for maximum backwards compatibility upon first startup. It’s of course always possible for the user to change this.
  • WINDOWS/MENUBAR: Load accelerators, Localize Win32 menu items to current language, and display shortcut keys
  • WINDOWS/MENUBAR: Add ‘Reinit’ to Menubar
  • WINDOWS/MSVC: Fix rewind crash on MSVC build when using SSE2
  • UWP: Don’t default to XMB menu by default, default to Ozone instead
  • UWP/VFS: Use Win32 file APIs when possible – better file I/O performance
  • WIIU/FILEIO/PERFORMANCE: Faster startup times – remove the path_is_valid() call when loading textures
  • WIIU: Fix touchscreen mouse emulation