RetroArch 1.9.3 released!


RetroArch 1.9.3 has just been released.

Grab it here.

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

Release notes

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

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

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

Highlights

Core info file caching

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

Things you should know about the core info file caching

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

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

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

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

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

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

Important caveats:

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

Changelog

1.9.3

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

Final Burn Neo 1.0.0.02 release

Final Burn Neo (FBN/FBNeo) is the follow-up of Final Burn Alpha (FBA/FBAlpha), an alternative to MAME for arcade emulation. It’s more focused on playability than on accuracy/preservation. The team is composed of dink, iq_132, JacKc, kev and me. It supports most libretro features (netplay, runahead, retroachievements, …).

Some words about accuracy & FBNeo

Regularly, I see misunderstandings about our playability focus. It doesn’t actually mean we don’t care about accuracy, when we add a new system we usually make it as accurate as possible, and we also revisit old systems for accuracy improvement purpose. In some edge cases we even end up being more accurate than MAME, it’s always a bit funny when someone comes reporting that “something is different from MAME, so that must be a bug”, and after investigating about the actual cabinet, we learn that FBNeo is actually the one emulating the game properly (in those cases, we let the MAMEdevs know, so I believe the inaccuracies are fixed shortly after on their side).

I can only remember of a few occurrences where we are intentionally inaccurate:

  • Samples vs Netlist emulation : we prefer keeping samples for now, netlist is a nice feature, but ultimately we don’t think samples sound bad (we even have some systems where we offer alternative sound emulation through samples while the actual sound device is also emulated), so enforcing the emulation to be twice slower for this didn’t seem right to us. From time to time I see people saying “yeah but I’m missing sounds because of those samples” : that shouldn’t be the case, most likely they are just using the wrong samples pack.
  • CPS3 emulation : Around 2 years ago, we noticed a frame on SF3-1’s VS screen had wrong colors, after more investigation & tests we learnt that the fix would involve making the emulation twice slower on every CPS3 games, so since there was no evidence that fixing this single frame would improve anything else on CPS3, we decided to leave things like this for now.
  • ZX Spectrum emulation : We didn’t like the original sound from the buzzer, so we re-made it to our liking.
  • Garbage noise : Sometimes, we notice garbage noise that actually happens on real hardware, since we consider this noise as an unpleasant game bug, we filter it out, i remember “Burger Time” and “Narc” being in that list.

New supported games and other emulation improvements

Midway

Our tms340x0 cpu core got rewritten, which allowed to add support for pretty much any midway game that was missing and not running on 3D hardware, the more recent additions include “2 on 2 Open Ice Challenge”, “Judge Dredd”, “NBA Hangtime”, “NBA Jam”, “NBA Jam TE”, “NBA Maximum HT”, “WWF: Wrestlemania”, “High Impact Football”, “Super High Impact”, “Narc”, “Smash TV”, “Strike Force”, “Terminator 2 – Judgment Day”, “Total Carnage”, “Trog”, “Revolution X”, and the recently dumped “Power-up baseball”.

Sega

Support for Sega System 32 was added : “Air Rescue”,  “Arabian Fight”, “Golden Axe: The Revenge of Death Adder”, “Dark Edge”, “Spider-Man: The Videogame”, “Dragon Ball Z V.R.V.S.”, “Holosseum”, “SegaSonic The Hedgehog”, “Alien3: The Gun”, “Burning Rival”, “F1 Super Lap”, “F1 Exhaust Note”, “Jurassic Park”, “Rad Mobile”, “Rad Rally”, “Slip Stream”, “Super Visual Football: European Sega Cup”, “Soreike Kokology”, “Soreike Kokology Vol. 2 – Kokoro no Tanteikyoku”, “Hard Dunk”, “OutRunners”, “Stadium Cross” and “Title Fight”. One of the hightlights of our emulation is the controls on racing games like “Rad Mobile”, they are very playable (apparently, the controls are a bit tricky on MAME).

Jaleco

Support for Jaleco Mega System 32 was added : “Tetris Plus”, “Tetris Plus 2”, “P-47 Aces”, “Best Bout Boxing”, “Desert War”, “The Game Paradise – Master of Shooting!”, “Gratia – Second Earth”, “World PK Soccer V2”, “Hayaoshi Quiz Grand Champion Taikai”, “Hayaoshi Quiz Nettou Namahousou”, “Idol Janshi Suchie-Pai II”, “Ryuusei Janshi Kirara Star”, “Mahjong Angel Kiss”, “Vs. Janshi Brandnew Stars”.

Namco

Support for Namco NA-1/NA-2/NB-1/NB-2 systems was added : “Bakuretsu Quiz Ma-Q Dai Bouken”, “Cosmo Gang the Puzzle”, “Emeraldia”, “Exvania”, “Fighter & Attacker”, “Super World Court”, “Tinkle Pit”, “Knuckle Heads”, “Numan Athletics”, “Nettou! Gekitou! Quiztou!!”, “X-Day 2”, “Nebulas Ray”, “Point Blank / Gun Bullet”, “Great Sluggers”, “Great Sluggers 94”, “Super World Stadium”, “Super World Stadium ’96”, “Super World Stadium ’97”, “J-League Soccer V-Shoot”, “The Outfoxies” and “Mach Breakers”

Seibu

Support for Seibu SPI system was added : “Senkyu / Battle Balls”, “E Jong High School”, “Viper Phase 1”, “Raiden Fighters”, “Raiden Fighters 2 – Operation Hell Dive”, “Raiden Fighters Jet” and “E-Jan Sakurasou”

Sinclair ZX Spectrum

While the driver had been there since 2018, because of how bad it was (a parting gift from a certain person…) it was basically rewritten from scratch, nowadays I believe it’s a very nice alternative to FUSE. Also, I mentioned it above, we intentionally decided to be inaccurate on buzzer emulation.

Fairchild ChannelF

Another home console gets emulated.

PGM

Thanks to the efforts of an external contributor (eziochiu), the last 2 unplayable pgm games (and their clones) finally became playable : “Dragon World 3” and “Photo Y2K 2 (3-in-1)”.

Taito

We now support “Gladiator”, “LSA Squad” and “Daikaiju no Gyakushu”

Electronic Arts / Rare

“Battletoads” is now supported, this game is actually the main reason our tms340x0 cpu core was rewritten.

Gottlieb

“Exterminator” is now supported, that’s yet another game using tms340x0 (actually, 2 of them !), this is an odd game to say the least.

Art & Magic

Yet another system using tms340x0, their games – “Cheese Chase”, “Stone Ball” and “Ultimate Tennis” – are actually pretty cool.

Improvements to the Libretro port

Some features that were left over from standalone until now got implemented in the Libretro port :

  • LowPass Filter : It’s available from the core options, I know something similar is available from RetroArch’s DSP plugins but you might want to check out this one too. Technically it’s a 2x resonant lowpass filter which is set-up to mimic the amp section found on most PCB’s. For a good 95% of games, it makes the sound a bit more rich/bassy, and for the remaining 5% let us know so that we can fix them. You’ll probably never want to turn this option off after getting used to how nice it sounds.
  • Cheats : They have been supported through the Libretro API for some time, but now you can also directly use a cheat.dat from MAME, more information about this here.
  • Macros : First, some words about macros, the reason macros from standalone aren’t supported is because there can be dozens of them for a single player on a single game, however you currently can’t map that many actions with the Libretro API (and this is not only a problem for macros, handling service menu when it involves several buttons can be tricky too) because all inputs need to be assigned to a button from the get go. In the past, there was some workaround for this through core options, but it had its own share of issues so it was removed later. I recently decided to re-implement support for a select few macros, for now it only includes 3xPunchs and 3xKicks on SF-like games but implementing a few more could be done if I can get some help sorting out the ones that’ll be the most useful so that they’ll fit within the RetroPad model.

 

And much more! This article is far from being exhaustive.
If you want to help FBNeo, keep sending us bug reports when you see something wrong.
Our forum : https://neo-source.com/
Our github : https://github.com/finalburnneo/FBNeo
Our discord : https://discord.gg/8EGVd9v