1. RetroArch
  2. News

RetroArch News

RetroArch 1.9.3 released!



The Steam version may differ from the Normal version. The following changes are written for general use. The RetroArch Playtest version will be updated at a later time today.

RetroArch 1.9.3 has just been released.

Grab it here: http://retroarch.com/?page=platforms

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


[h2]Core info file caching[/h2]

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



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

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)

RetroArch's AI Translation capabilities



Watch this great presentation by Microsoft Azure covering (among other things) RetroArch's AI Translation capabilities
[previewyoutube][/previewyoutube]

AI Service


Welcome to the future! Sometime ago, a #RetroArch bounty got posted proposing OCR (Optical Character Recognition) and Text To Speech services being added to RetroArch.

Some months later, and here we are – a bounty hunter valiantly took on the challenge and there is now a fully fledged AI Service up and running that works seamlessly with #RetroArch!

You use the AI Service like this – you enable the AI Service (should be enabled by default), you then setup the server URL (could be a local network address if you have the server up and running in your own network, or a public IP/URL in case you’re going through a service). After that, you only need to bind a button or key to the so-called “AI Service” action. You can bind this key by going to Settings – Input – Hotkeys.

In this video, you can see each of the two modes that the AI Service currently is capable of doing –

Speech Mode – Upon pressing the AI Service button, a quick scan is done of the text, and the recognized text is then translated to speech. You can press the AI Service button at any time and it will try to process the current snapshot of the screen it made. This mode is non-interruptable, meaning the game will continue running when you hit this button, and the output speech will take as long as it takes for the server to respond to your query and pipe the sound to RetroArch.

Image Mode – In image mode, it tries to replace the text onscreen with the output text. For instance, in the video you see above, the game is played in Japanese, so when we hit the AI Service button, it tries to replace the Japanese text with English translated text. This mode is interruptable – this means that when you hit the AI Service button, it pauses the game and shows you an image with the replacement text UNTIL you hit either the AI Service hotkey or the Pause hotkey again, then it will continue playing.

We encourage everybody that wants to submit feedback to us on this amazing revolutionary feature to go to our Discord channel and in specific the #retroarch-ai channel. We’d love to hear your feedback and we’d like to develop this feature further, so your input and feedback is not only appreciated but necessary!

[previewyoutube][/previewyoutube]

Final Burn Neo 1.0.0.02 release

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.


Read full update notes here.

Available cores updated to latest version


  • PCSX ReArmed
  • Genesis Plus GX
  • Genesis Plus GX Wide
  • mGBA Stealla
  • Kronos
  • Mupen64Plus Next
  • Mesen
  • Mesen S
  • Sameboy

RetroArch 1.9.2 released!



The Steam version may differ from the Normal version. The following changes are written for general 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!

http://retroarch.com/index.php?page=donate
https://www.patreon.com/libretro
https://github.com/sponsors/libretro
https://retroarch.creator-spring.com/
https://www.youtube.com/channel/UCjAimkVp-G_o6HK5MXujk9A/join



Release notes


PlayStation Vita users will be happy to learn that the issues with gpSP (Game Boy Advance emulator) are now resolved, and it should work as reliably as it did before 1.9.1 (and perhaps even better now thanks to increased performance). We hope you get a lot of mileage out of this core as a lot of work and effort went into it to really optimize the performance of this core over the past few months!

Text To Speech support is now enabled for the macOS Universal build. You can access this by going to Settings -> Accessibility and enabling ‘Accessibility Enable’.

Some nice changes under the hood that are more technical in nature: config file loading performance has been improved immeasurably which should help out with initial startup times of RetroArch, loading config files as well as loading shader presets. Core info file loading itself has also seen many performance improvements. We are aware that despite all this, loading all the assets in the more feature-rich menus like MaterialUI/XMB/Ozone can still take a long time on systems encumbered by slow disk I/O, but we have some special things in store for future versions that should increase asset loading performance significantly.

There is now multi soft-patching file support. We will explain this in more detail below.

Highlights


[h2]Multi soft-patching support[/h2]
If an IPS/BPS/UPS patch is found, will replace the last character in the filename with a counter and loop until another patch is found (in any format).

Example matching filenames:


Contra (Japan).nes
Contra (Japan).ips # Applied first
Contra (Japan).ips1 # Applied second
Contra (Japan).ups2 # Applied third



Notice that if one filename breaks the loop, the following patches won’t be applied too. e.g.:


Contra (Japan).nes
Contra (Japan).ips # applied
Contra (Japan) (Translation).ips1 # Partial name match, not applied
Contra (Japan).ups3 # Not applied either



[h2]Enhanced ‘Load Content’ file browser search functionality[/h2]

1.9.2 adds the same search filter functionality that currently exists for playlists to the file browser when selecting Load Content. This means:

  • When navigating the filesystem via the file browser, the user can press RetroPad X (or /, etc.), and enter a search term
  • This becomes a filter – all matching entries will be displayed
  • The user can then perform another search to further refine the results. Up to 8 filters may be stacked in this fashion
  • Pressing ‘cancel’ clears the last entered filter


For example:

[previewyoutube][/previewyoutube]

In order to support file browser navigation, the search filter implementation had to be rewritten. Instead of having a single menu-driver-level search filter, independent search terms are now stored for each menu list. This is a far more robust solution, and means that filters can be enabled for other menus far more easily (and without any hacks). To demonstrate this, 1.9.2 also enables search filters when selecting shader presets/passes via the file browser (I will try to add this in more places as time permits):

[previewyoutube][/previewyoutube]

Finally, 1.9.2 makes the following changes to existing search functionality:

  • Entering a search term consisting of a single Latin alphabet character will now always jump to the first entry whose first character matches – i.e. we no longer apply search filters in this case, since a single alphabet character filter is not useful. This means single character searches can be used for fast alphabet navigation
  • When searching file browser lists, the ‘utility’ entries (e.g. Parent Directory) are ignored, since they have no bearing on the actual list content (i.e. searching for p will now jump to the first p file – previously, it would always jump to Parent Directory…)
  • When performing non-filter searches, the entry labels used in each comparison now exactly match what is printed on screen by the menu driver. Previously, raw file_list values were used, which are often the same, but not always (e.g. in a number of cases, this is the difference between searching against full file paths vs. path basenames, which can produce erroneous results)


In addition to all this, 1.9.2 also enables search filter support when using the file browser to select cheats and overlays.

[h2]Optional menu screensaver animations[/h2]

[previewyoutube][/previewyoutube]

At present, when using XMB/GLUI/Ozone, enabling the menu screensaver will cause the screen to be blanked when the screensaver timeout has elapsed. 1.9.2 adds three optional animations that may be displayed instead – these can be selected via the new Settings > User Interface > Menu Screensaver Animation entry; animation speed may be adjusted via Settings > User Interface > Menu Screensaver Animation Speed. The options are as follows:

OFF: Screen will be blanked

Snow:
[previewyoutube][/previewyoutube]

Starfield:
[previewyoutube][/previewyoutube]

Vortex:
[previewyoutube][/previewyoutube]

These effects are rendered using font glyphs; the performance overheads of all the animations are therefore low. This should also give you some indication as to how we are planning to reduce file I/O overhead across the board when it comes to asset loading, but that is something that we will be unveiling for a future release!

When using GLUI/Ozone, the screensaver will be tinted (somewhat) according to the current menu colour theme (XMB uses a fixed screensaver colour, since it does not have a ‘proper’ colour theme implementation).

[h2]OpenDingux beta: Add 50Hz support[/h2]

All devices running OpenDingux Beta have native support for both 60 Hz and 50 Hz display modes. 1.9.2 enables 50 Hz functionality in RetroArch. The refresh rate can be toggled between 60 Hz and 50 Hz via the Settings > Video > Output > Vertical Refresh Rate menu entry; the value can be saved on a per-core/content directory/game basis via regular config overrides.

This makes OpenDingux devices (running the Beta OS) pretty much the only affordable/easily available handhelds that can run both NTSC and PAL content smoothly. The VICE core in particular benefits enormously from this addition.

[h2]OpenDingux beta: Fix IPU scaling when running GB/GBC/GG/NGP-resolution content[/h2]

Further testing of the OpenDingux Beta port has revealed several more resolutions which are mishandled by the IPU hardware scaler. 1.9.2 updates the resolution blacklists accordingly, fixing scaling for the following content:

  • Gameboy (+ Color)/Game Gear at native, x2 and x3 resolutions
  • Neo Geo Pocket (+ Color) at x2 resolution


[h3]Changelog[/h3]
1.9.2

  • 3DS: Enable graphics widgets / overlays
  • 3DS: Load texture images as BGR colors
  • 3DS: Change default asset directory
  • CHEEVOS: Allow rcheevos_patch_address to be called on game without achievements
  • CHEEVOS: Update achievement memory maps (add Supervision)
  • CONFIG/FILE: Use hash map to optimise key/value lookups
  • CORE INFO: Performance optimisations + code clean-ups/refactors
  • CRT/SWITCHRES: Fixed CRTSwitchRes framebuffer bug
  • DISCORD/RPC: Fix regression
  • DRM: set the correct video mode
  • FASTFORWARD: Enforce minimum fastforward_ratio of 1.0
  • FONTS/FREETYPE/STB_UNICODE/BITMAPFONT: Prevent texture bleed when rendering text at non-integer scales
  • INPUT: Ensure that ‘retro_set_controller_port_device’ is called when updating ‘Max Users’
  • INPUT/XEGL/MOUSE: Fix xegl_ctx.c mouse activation
  • INPUT/SDL: Fix crash in SDL input driver when analogs are bound
  • INPUT/POINTER: Add scaling to pointer input
  • INPUT REMAPPING: Fix regression on loading file
  • INPUT REMAPPING: Fix regression where disabling input remapping would disable input
  • IOS: Disable system button gestures on iOS 14
  • IOS: Prevent potential crash on controller connect – randomly would get a crash when connecting a game controller while RA was running
  • LAKKA: Add menu for time zone setting
  • LOGGING: RARCH_LOG_V checking for verbosity level is not necessary and can cause issues; removed said check.
  • LOGGING: Silence inappropriate cheatfile logging
  • IOS/MAC: Add CPU VFP unit detection for Darwin
  • MAC: Swallow ‘escape’ key being pressed – would previously make the game toggle between fullscreen and windowed
  • MAC: Intel and ARM64 timer change proposal.
  • MAC/ARM64: run_fast_mode disabled for 64 bits invalid instructions.
  • MAC/OPENGL: Fix codesigning issue
  • MAC/UNIVERSAL: Add TTS translation service support.
  • MENU: Add optional menu screensaver
  • MENU: Add search filter support to cheats and overlays file browser menus
  • MENU/FILEBROWSER: Enhanced ‘Load Content’ file browser search functionality
  • MENU/INPUT: Block accidental diagonals in menu navigation
  • MENU/RGUI: Add option to disable menu transparency
  • MENU/RGUI: Fix display of ‘Video > Scaling’ menu when ‘Lock Menu Aspect Ratio’ is enabled
  • MENU/MATERIALUI: Add icon to ‘Turbo Fire’ menu entry
  • MENU/OZONE: Ozone Dracula theme
  • OPENDINGUX/BETA: Fix IPU scaling when running GBA-resolution content
  • OPENDINGUX/BETA: Add 50Hz support
  • OPENDINGUX: Enable ‘SaveRAM Autosave Interval’ by default
  • PATCHES: Added multi-softpatching support + OSD messages for patches
  • RHMAP: Track the complete string in rhmap
  • VITA: Align VM block size to 1MB – should fix one of the issues with gpSP
  • WINDOWS/GDI: Fix non-ASCII text rendering
  • XEGL: Fix mouse not working when using OpenGLES with X11

Standalone Libretro Cores Updates

Reah here as well: https://www.libretro.com/index.php/libretro-cores-updates-pcsx2-alpha-release-for-windows-and-more/
Following updates may not cover Steam version. You can still use standalone version over Steam.
PCSX2 DLC not planned at this moment.



PCSX2 Alpha core available for Windows now!


https://www.youtube.com/watch?v=-EnWeztB8wI

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 QtWidgets 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