This is a followup article to our main release blog post, which can be read here.
Official support for OpenDingux devices such as the RG350M, RG280V and GCW-Zero was added last December; a full round-up of features and highlights can be found in the original announcement here. Version 1.9.1 represents the first stable release for this platform.
As an integrated member of the RetroArch family, the OpenDingux port benefits from all frontend development work – but a major addition for this release is a separate, optimised build for OpenDingux Beta (link here). This is an updated, modern firmware (compatible with many devices) which offers significantly improved performance. RetroArch is one of the first applications on OpenDingux Beta to enable configuration of the hardware IPU (Image Processing Unit), with menu-based control of aspect ratio/integer scaling and image filtering method (available on Beta releases after 16/03/2021). Users who prefer to remain on stable operating systems need not fear, however: RetroArch will always be optimised for both beta and stock firmwares.
Aside from RetroArch itself, expanding the library of available cores has been a major focus of this release. Launching initially with 20 hand-picked cores, a further seven have been added to the list:
Mr.Boom
O2EM (Magnavox Odyssey2 / Phillips Videopac+)
Potator (Watara Supervision)
ProSystem (Atari 7800)
ScummVM (Note: High resolution games unsupported)
Stella 2014 (Atari 2600)
TIC-80
All of these cores have excellent performance on OpenDingux devices (with the mild exception of TIC-80, which can be a demanding system on many platforms – yet a number of popular carts run full speed). It should also be noted that when building cores for OpenDingux, we don’t just hit compile and call it a day. This is a curated port, and care is taken to clean up code and add features wherever possible – and these additions improve the user experience on *all* platforms. For example:
O2EM
The model and region of the emulated console (Odyssey 2, Videopac+ G7400) can now be specified via core options
A volume control and optional low pass audio filter have been added, along with audio fixes/performance improvements
An ‘Interframe Blending’ option has been added, used to simulate CRT ghosting effects
A ‘Crop Overscan’ option has been added
Gamepad inputs can now be swapped (required for a number of games), and numeric keys have been mapped to gamepad buttons
The rendering of the virtual keyboard has been optimised, reducing performance overheads by 44%-63%
Save states have been fixed
Potator
This newly-added core was ported specifically for use on OpenDingux devices!
ProSystem
16 bit colour depth support has been added for improved rendering performance
An optional low pass audio filter has been added, along with general audio quality improvements
A dual stick controller mode has been added for games such as Robotron: 2084
Stella 2014
16 bit colour depth support has been added for improved rendering performance
An ‘Interframe Blending’ option has been added, used to simulate CRT ghosting effects and remove screen flicker
An optional low pass audio filter has been added
Full analog paddle support is now available
TIC-80
Comprehensive support for mouse input via gamepad has been added
And one more gift for OpenDingux users: the gpSP core now has a fully functional dynarec, courtesy of davidgf. This means full speed GBA emulation, with plenty of headroom for video filters, colour correction and inter-frame blending!
(gpSP has also seen many other fundamental improvements, too many to list here – further updates will be covered in a separate post)
The Steam version may differ from the Normal version. The following changes are written for general use. Since PCSX2 Core is WIP, it does not exist in Buildbot for now. The Steam DLC version is not on the agenda now. You can use Play! Core from Buildbot or build and use PCSX2 from source code. Those who have problems build from the source can write to me from Steam(id/Gadsby_/) or Discord(gadsby#6752), I can only share the x64 version. Because its core is WIP, it may not be ready for end user use. The RetroArch Playtest version will be updated at a later time today.
Remember that this project exists for the benefit of our users, and that we wouldn’t keep doing this were it not for spreading the love with our users. This project exists because of your support and belief in us to keep going doing great things. If you’d like to show your support, consider donating to us. Check here in order to learn more. In addition to being able to support us on Patreon, there is now also the option to sponsor us on Github Sponsors! You can also help us out by buying some of our merch on our Teespring store!
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
Genesis Plus GX Wide has been updated with new extra options for widescreen mode courtesy of @heyjoeway! See our updated blog post here for more details.
Missing Audio Plugins added for both Windows & Linux
Missing Video Plugins added for both Windows & Linux
RetroArch and LibRetro do not share any copyrighted content.
heyjoeway has made a custom fork of Genesis Plus GX with experimental widescreen (16:9) options, called ‘Genesis Plus GX Wide’.
Notes
This is an experimental feature right now. Some games might already output nicely with widescreen, while others will likely require patches to display properly.
It works only on Sega Genesis/Mega Drive games, and not Sega CD/Mega CD games.
RetroArch and LibRetro do not share any copyrighted content.
So ProjectFuture finally materialises! From the beginning, we have been unsatisfied with the general state of the retrogaming scene when it comes to being able to dump and play your own legally bought game cartridges. Solutions exist like the Retrode. There are some big issues with them though that limits their viability as something an average consumer can just buy readily off the shelf:
Super expensive.
No longer in production/out of stock
Rights to the product changing hands between sellers/store owners
Because of 3, usually one or two stores can only sell them.
The specs are closed so only a select few can assemble and sell them, limiting the ability of DIY homebrewers to make their own device.
While as a general rule of thumb, developers will always tell people to dump their own game cartridges, in reality there is nobody stepping up to the plate to make this either affordable, to integrate it well with existing software, or to make it possible for your homebrew hardware maker to easily build his own.
RetroArch Open Hardware is our attempt to shake up this sector of the retro games market, and our effort to revitalize the DIY market and shift it away from proprietary solutions. Our first Proof of Concept hardware device is an N64 cartridge adapter that you connect to any device with a USB Type-C cable. It will be relatively cheap to assemble and much faster than any existing competing device out there that does the same task.
RetroArch Integration
We have some high-level goals we aim to achieve with this project. We want seamless integration with RetroArch. When you attach this to RetroArch, it should be hopefully as simple to play the game as it is on a real game console when you plugged in the cartridge. That’s the level of integration we are aiming to achieve with this project, and none of the existing solutions out there really fit the bill.
When we mentioned before that we want RetroArch to be its own game console, we pretty much meant it. And being able to take your own game copies with you and run them with RetroArch seems like an obvious next step to take.
We have come up with a completely custom and lean design so that the person aiming to build this for themselves in DIY fashion will be able to build these relatively cheaply. We are convinced the transfer speeds are far in excess of any other similar product out on the market right now, which is just as well considering the biggest N64 game out there is 64MB in size.
The current transfer speed that we are achieving is ~4MB per second on a prototype device. Our target is a transfer speed of approximately ~ 4.5MB per second give or take.
In addition, Switch dock support will be there from Day One, working out of the box.
How does it work?
Attach it to any device and it will mount itself as a Mass Volume Storage device, mapping the cartridge as a bunch of files on the filesystem.
You insert the N64 cartridge into the cartridge reader and you connect it to a PC (or some other device) with a USB Type C-cable. The device will then map the contents of the cartridge itself as a Mass Storage device volume. EEPROM, Flash, ROM, and SRAM are mapped as separate files on this volume. (*) Playing the game should be as easy as just loading the ROM from this device. So already even without the aforementioned RetroArch integration, it already works. But our hope is that with the RetroArch integration, we finally get the promise of a true cross-platform game console where you can take your games library with you, whether it’s digital or physical, and just use it across the devices that you already have RetroArch on. This is the dream and promise we have been slowly building towards – the power lies in the user’s hands, not that of any corporation or organization.
* – This might be subject to change. We are still considering whether to change this to a dedicated protocol to allow using cartridge hardware in an emulator core without just reading all of the cart as one big contiguous ROM file.
Prototype
This project has been ongoing now for the better part of a year. We have some internal prototypes and so far we can definitely confirm high success rates with our own cartridge collection. SRAM support already works in the firmware, but no EEPROM/FlashROM support yet. Your SRAM should work as long as your SRAM battery is not dead yet anyway. Some of these cartridges are over 20+ years old by now after all so an SRAM battery being dead is not an unlikely prospect at this point.
Some cartridges will need their cartridge connectors cleaned in order to work properly with this device. It’s a common problem among N64 game preservationists that I’m sure should not be news to anyone at this point.
Q&A
I’m sure there will be many questions in response to this article. We will remain tight lipped for now until we feel the time is right to release more details. We hope that RetroArch Open Hardware will be a contagious project that will see many contributors and participants working towards one common goal – being able to interface with the games media they’ve bought for all these decades and just being able to make it work with the software they’re already using without having to buy new closed-spec proprietary devices that lock you out of the software you’re already using. Free software is one thing, but it’s only as good as the hardware you’re running it on. Consider this our valiant effort of trying to get both sides in order.
For now, here is a gallery of screenshots to a few of our prototypes, brought to you by Sasa and m4xw.
You know how badly we want to bring RetroArch to Steam. For now, we are evaluating what we have. Steam recently announced a new feature, PlayTest, an alternative version of this Beta access. We have published our PlayTest version to an access request. To obtain this version, you can go to our store page and click "Request Access" located there. This version will have the same features as the main version. DLCs will come as download. It is newest build with these cores included;
We're trying to get more people on RetroArch's Steam test. We would love to invite everyone, but there are regulations we need to follow... Tomorrow we will distribute the keys on www.libretro.com as first come, first served. We prepared dozens of keys! You can use this link for countdown or you can mark on your calendar this date: 20.10.202 Tuesday GMT 18:00 (06:00PM)
You can find the latest news from us by following the links below!
Those who know us know how much we love to make new improvements almost every day. In this case, we have made the following major and minorupdates.
We have updated RetroArch to the latest improvements. You can see the latest technical improvements here.
We have increased file Size limits for SteamCloud.
Added new save file type for SteamCloud.
Changing behavior of “gl” and “glcore” video drivers.
Let's take look for "gl" and "glcore" video drivers changes.
What are they ?
“gl” and “glcore” are 2 video drivers available on desktop computer :
“gl” is an OpenGL 2.0+ driver, when used with a version above 3.0 it’s called OpenGL Compatibility and can support up to OpenGL 4.6, but some GPU drivers don’t have that OpenGL Compatibility mode.
“glcore” is an OpenGL 3.1+ driver, it’s also called OpenGL Core, it supports up to OpenGL 4.6.
OpenGL is one of graphics API that can be used to draw 3D with you GPU, it is the most widely supported by devices and emulators.
What changed ?
Until now, when launching a core with an OpenGL renderer, RetroArch would consider both “gl” and “glcore” video drivers as valid choices, meaning you could launch a core internally using OpenGL Compatibility with the “glcore” video driver, and a core internally using OpenGL Core with the “gl” video driver. It’s not possible anymore, now cores will try to force the video driver matching what they want. This change only concerns platforms with OpenGL Core support, meaning platforms like android and many others aren’t concerned.
Why was this change needed ?
Maybe you are one of the lucky guys who didn’t encounter major issues with the previous behavior, but there are actually several reasons to change this :
some cores will glitch if the video driver doesn’t match the context they are requesting
cores will usually perform faster if you use the video driver they expect
OpenGL compatibility isn’t reliable for cores that require OpenGL versions above 3.0, because some GPU drivers don’t support this, so it’s safer to force OpenGL Core in those cases
to be honest, it makes more sense like this, it leverages user experience, and we shouldn’t ignore what is requested by the core
The first thing you should make sure, is that the setting “Allow cores to change video drivers” is turned on (that’s the default), as far as i know turning this setting off was used as a workaround for some of the issues fixed by those commits, so i don’t see a scenario anymore where it could be anything but harmful.
You should do if those changes prevent a core from working on your setup, is to mention @barbudreadmon on github or discord so that he can look into your issue.
Last but not least, there are 2 settings you might optionally consider changing :
if you are currently using the setting “shared hardware context”, you should probably consider turning it off, it adds rendering latency while it shouldn’t be necessary anymore with those changes (the cores that actually require this setting will force it).
if your GPU is less than 15 years old and your platform supports “glcore”, you should probably consider using “glcore” over “gl” as default OpenGL video driver, it generally produce better overall results.
You can find the latest news from us by following the links below!
We heard your complaints about the last key giveaway, so this time we come better prepared. On Saturday (9/26/2020) we will be handing out new keys for RetroArch Steam beta at https://libretro.com/