We're happy to announce that Beetle VB has been added to RetroArch Steam as core DLC!
An emulator for a portable handheld console released in the mid '90s. It was a virtual reality handset console, and one of the first to showcase stereoscopic 3D graphics.
If you’d like to learn more about upcoming releases, please consult our roadmap here.
This post is an edited version of the article on our website, and it only includes changes relevant to the Steam version (and associated DLC). If you'd like to read the complete untouched article, visit this link here.
Highlights
Vulkan – Avoid hard crash when capturing screenshot in emulating mailbox
The emulating mailbox infrastructure is very hacky and needs a rethink to be able to properly support screenshots. Emulating mailbox is pretty nasty to begin with and should be considered a hack. The next version might have a setting to allow you to disable mailbox emulation entirely. Mailbox emulation as it is only takes effect in fullscreen mode.
Steam updates
We have been busy since 1.9.13! The following cores have been added:
Caprice32
RACE
gpSP
Prosystem
Beetle PSX
UAE
VICE
bsnes
RetroArch Steam now has 26 cores in total, and the 27th is about to be added soon, EasyRPG! Please look forward to future announcements of more cores coming to Steam soon.
Netplay improvements
Netplay has received plenty of improvements thanks to the efforts of Cthulhu. We have a lot more prepared for the next version, so consider this a prelude to the main event.
Added setting to allow/disallow players other than the host from pausing the game.
Added a sublabel for netplay max connections.
Changed unknown commands to be ignored instead of forcing a disconnection.
Fixed port override macro from not being set immediately after the port setting.
Fixed memory leaks.
Show passworded rooms on lobby. Small improvement to the lobby viewer – it should now make a distinction between passworded rooms and non-passworded rooms.
uPnP: Fixes more memory leaks
uPnP: Added a task_queue_wait to prevent executing two nat tasks at once, so it’s also thread safe now
uPnp: Fix UPNP port mapping failed error – switch to a permanent lease time, but request it to be removed when we do netplay_free
For the next version, we will finally address the relay MITM server issues.
WiiU improvements
* Keyboard support has been fixed. The problem was caused by changing the driver lookup point. The deferred lookup resulted in the WIIU trying to treat the keyboard as a gamepad which … didn’t work. This change short-circuits at the connection event by ignoring mouse & keyboard connection events.
Core improvements
As mentioned before, as part of Project IO, we are going over every core and performing some basic quality control checks. This already resulted in numerous Quality of Life enhancements to cores. Not all of the improvements listed below can be attributed to Project IO, but it’s fair to estimate over 90% of them are.
VICE
Updated to use VFS instead of straight file I/O (ProjectIO)
Core option sublabel adjustments
Audio detection for AutoLoadWarp
More moderate tape warp detection
Press play on tape change
Mapper additions
Dupecheck for disk append
More distinguishable light gun cursor
Diskwarp audio detection correction
Mute Datasette with Autoloadwarp
Diskwarp audio detection improvement
Autoloadwarp automuting fixes
Fix sound muting on rewind
Add Automatic Zoom Mode
Aspect toggle correction
Touch pointer cleanups
FCEUmm
Add automatic Crowdin synchronization Mapper 196: Support IRQ for The Ancient & Modern Heroes Mapper 319: Use hp898f.c only for the old incorrect UNIF bank order, and 319.c for all NES 2.0 ROMs. Add CNROM mode and solder pad switch to the latter. Mapper 57: Change default DIP for YH-xxx Olympic multicarts, always reset to menu Mapper 178: Always reset to menu. CNROM/UNROM: Only emulate bus conflicts when explicitly specified by NES 2.0 header Added support for mapper 383 Add UNROM modes and two-chip variant to mapper 242 Add Realtec 8099 PCB support to mapper 236
Nestopia
Add automatic Crowdin synchronization
QuickNES
Add automatic Crowdin synchronization
Beetle PSX
Add core options to change crosshair color + remove light gun warnings
Add automatic Crowdin synchronization
Prosystem
Fix base height. This system only have one resolution depending on if it is NTSC or PAL. Before it was even worse because it was always reporting a hardcoded 320×240 which is totally wrong, so better to output the correct one even if it is also hardcoded.
gpSP
Improved audio frame pacing
Previously, the core was susceptible to crackling audio, particularly when using low frontend audio latency settings.
This is because the core was handling audio output suboptimally. At the set audio sample rate, the frontend expected between 1097 and 1098 audio samples per frame – but the core was sending samples in multiples of 256. This means that the audio output becomes ‘desynchronised’ with retro_run() – sometimes 1024 samples will get sent to the frontend for the current frame, sometimes 1280 as the core either falls behind or overcompensates. As a result, when the frontend tries to synchronise on audio, jitter can occur – and if the frontend audio buffer is small (when using low latency values), it can sometimes run dry or reach capacity, causing crackling.
1.9.14 modifies audio handling such that the correct expected number of samples is sent to the frontend in proper synchronisation with retro_run(). This greatly improves audio quality, even on the notoriously crackly Mother 3.
To demonstrate the effect of this, here are a couple of figures measured from the core on a Linux desktop with an audio latency setting of 64 ms, averaged over 5k frames:
Time spent close to audio buffer underrun:
* Current master: 8.68 % * With this PR: 2.37 %
In addition, a Miyoo port has also been added.
PPSSPP
Move audio callback to the main thread (fixes the longstanding hang issues when using OpenGL)
64ms on desktop isn’t enough due to excess buffering going on in this emulator. Set default to 128ms instead for now.
Different audio approach is necessary due to the following: it sets a fixed framerate of 60, then sends either too many or too few audio samples per frame in order to force the frontend to run at the correct speed (.e.g. making the frontend run in slow motion for games that run at 30fps) – this is undesirable for libretro, we want a consistent amount of audio samples per batch.
Miscellaneous core improvements
Caprice32: [event] changed mouse pointer to absolute position Caprice32: [event] better first the default mouse mode code. Caprice32: [KoS] little fix to avoid render problem on WiiU Caprice32: Should work now on WiiU Caprice32: [KoS] changed to RETRO_DEVICE_ID_POINTER_PRESSED Caprice32: [dsk] clean base Caprice32: [fdc,slots] new loader endian compatible WIP Caprice32: [loader] compatible wiiu basic loader. FBNeo: (libretro) xybots remapping FBNeo: (libretro) llander remapping FBNeo: megadrive update from gab75 FBNeo: nes update from gab75 FBNeo: gijoe: all clones have a 4 players mode FBNeo: gaelco: modernize driver, fix thoop stg. 4 crash FBNeo: atarivad, fix runahead w/some games using this FBNeo: tempest: add some hacks FBNeo: msx update from gab75 FBNeo: d_taitof2.cpp: add Majestic Twelve – The Space Invaders Part IV (US) FBNeo: batman, more drums volume, vad offset, ssriders oops FBNeo: xmen6p, note about resetting FBNeo: In Your Face (inyourfa), fix priority FBNeo: ssriders, fix # of players FBNeo: speccy update c/o gab75 FBNeo: galaxian, update pisces date FBNeo: 7z: fix cpp ODR (second attempt) FBNeo: spectrum fix 48k’s ay FBNeo: vector, underp mode change FBNeo: video, less derpy mode changes for megadrive, etc FBNeo: grdnstrm: also fix clones’s dips FBNeo: grdnstrm: fix dips FBNeo: sms: update Voyage – A Sorceress Vacation to 1.05 FBNeo: ssv, buffer spriteram for every game in driver FBNeo: d_namcos2.cpp: added Mirai Ninja (Japan, set 2) [Corrado Tomaselli] FBNeo: d_cps1: marked forgottnj as a prototype, it’s an unfinished version of the game FBNeo: d_hyperpac.cpp: added New HyperMan (3-in-1 with Cookie & Bibi & Hyper Man) (set 2) [jordigahan] FBNeo: d_cps1.cpp: Fixed 2 players mode DIP switch for sf2cejx and sf2hfj. FBNeo: spectrum update from gab75 FBNeo: williams, add Playball!, fix lottofun FBNeo: lua: fix window not opening after closing a game w/lua console opened FBNeo: cbombers, undrfire: impl. contrast/luma settings as recommended by Tatsuya79 FBNeo: ssv, experimental lag fix plus fix pastelis 2p split screen mode FBNeo: d_m107.cpp: hiscore support FBNeo: ssv, add spritebuffering to stmblade to fix lines in stage 6, cleanup a little FBNeo: experimental cheat fix for midway (mk/umk3/etc) games FBNeo: md, updates from gab75 FBNeo: megadrive palette fix (0 bit ignored) FBNeo: sys16b doesnt have highlights, only shadows. i think? revert if breaks something FBNeo: add ktiger2p [DsNo] Genesis Plus GX: Fetch translations & Recreate libretro_core_options_intl.h mGBA: Add automatic Crowdin synchronization PPSSPP: Reimplement audio Picodrive: Fix loading of SMS/GG ROMs Picodrive: sound, fix ym2612 ladder effect, add option Picodrive: 32x, fix DMA mem-2-mem copying for big endian Picodrive: sound, add ym2612 channel clipping, ladder effect Picodrive: sms, set non-TMR images to region Japan SameBoy: Update the SameBoy core with latest changes SameBoy: Add GB_is_cgb_in_cgb_mode SameBoy: Add memory write callback, optimize memory access with likely/unlikely SameBoy: Add a safe memory read API SameBoy: Initial MBC7 support SameBoy: Mouse controls for MBC7 Yabause/Kronos: Add automatic Crowdin synchronization
ANDROID/PLAYSTORE: Bump up SDK level to 30 to comply with Play Store policies
AUDIO/MIXER: Increase sample buffer padding
CHEEVOS: Disallow achievements when spectating netplay
CHEEVOS: Fix need-to-activate achievement logic for non-hardcore
CHEEVOS: Don’t queue rewind re-init if already on main thread
CHEEVOS: Ignore unofficial achievements unless setting is enabled
CHEEVOS: Use SSL host when available
CHEEVOS: Validate hashes for secondary discs in multi-disc games
CHEEVOS: Ensure placard is initialized on main thread when game has no achievements
CHEEVOS: Audit achievement settings defaults and visibility
CHEEVOS: Show error message when no password provided
CHEEVOS: Use widget for game loaded achievement progress
CONFIG: Honor config_save_on_exit when Reboot/Shutdown is called
DISK CONTROL: Focus on current content entry in Disk Control append/insert
FRAMEDELAY: Auto Frame Delay Improvements – swap interval handling, D3DX handling, and delay target resets also on core restart. It should now work with high refresh rates and also with Direct3D 10/11/12 drivers
INPUT/GYRO/ACCELEROMETER/ANDROID: Re-enable Gyroscope & Accelerometer when RetroArch resumes or regains focus
INPUT/HID: Fix gamepad disconnect on unrecognized HID device
LAKKA: Patch to fix keyboard typing
LAKKA: CD-ROM eject menu item
LAKKA/BLUETOOTH: Add option to remove pairing
LAKKA/SWITCH: Disable rumble gain
LAKKA/SWITCH: Disable cpu scaling, uses its own CPU governor
LOGGING: Logging cleanups. A bunch of unifications and reformattings (capitalizations, dots, quotes, prefixes etc). Also added a few missing things, such as Run-Ahead error logging and LED interface init logging when it is enabled.
NETPLAY: Networking – should not print country for a local lobby
NETPLAY: Added setting to allow/disallow players other than the host from pausing the game.
NETPLAY: Added a sublabel for netplay max connections.
NETPLAY: Fixed port override macro from not being set immediately after the port setting.
NETPLAY: Show passworded rooms on lobby
NETWORK: Make HTTP header parsing case insensitive
NETWORK/UPNP: Fixed memory leaks
NETWORK/UPNP: Added a task_queue_wait to prevent executing two nat tasks at once, so it’s also thread safe now
NETWORK/UPNP: Switch to a permanent lease time, but request it to be removed when we do netplay_free. Switch to a permanent lease time, but request it to be removed when we do netplay_free.
NETWORK/UPNP: Only use a single interface for UPnP, return on the first one found instead of iterating over all of them and opening them one by one
OVERLAYS: Revert changes
RETROFW: Add OSS audio
VIDEO/ROTATION: Always return false if rotation can’t occur. RETRO_ENVIRONMENT_SET_ROTATION should return false when rotation has been forcefully disabled in frontend, that way the core can decide if aspect ratio should be rotated or not for vertical games. Useful for FBNeo for instance.
VULKAN: Avoid hard crash when capturing screenshot in emulating mailbox.
ANDROID/PLAYSTORE: Implement MANAGE_EXTERNAL_STORAGE permission ANDROID/PLAYSTORE: Bump up SDK level to 30 to comply with Play Store policies AUDIO/MIXER: Increase sample buffer padding CHEEVOS: Disallow achievements when spectating netplay CHEEVOS: Fix need-to-activate achievement logic for non-hardcore CHEEVOS: Don’t queue rewind re-init if already on main thread CHEEVOS: Ignore unofficial achievements unless setting is enabled CHEEVOS: Use SSL host when available CHEEVOS: Validate hashes for secondary discs in multi-disc games CHEEVOS: Ensure placard is initialized on main thread when game has no achievements CHEEVOS: Audit achievement settings defaults and visibility CHEEVOS: Show error message when no password provided CHEEVOS: Use widget for game loaded achievement progress CONFIG: Honor config_save_on_exit when Reboot/Shutdown is called DISK CONTROL: Focus on current content entry in Disk Control append/insert FRAMEDELAY: Auto Frame Delay Improvements – swap interval handling, D3DX handling, and delay target resets also on core restart. It should now work with high refresh rates and also with Direct3D 10/11/12 drivers INPUT/GYRO/ACCELEROMETER/ANDROID: Re-enable Gyroscope & Accelerometer when RetroArch resumes or regains focus INPUT/HID: Fix gamepad disconnect on unrecognized HID device LAKKA: Patch to fix keyboard typing LAKKA: CD-ROM eject menu item LAKKA/BLUETOOTH: Add option to remove pairing LAKKA/SWITCH: Disable rumble gain LAKKA/SWITCH: Disable cpu scaling, uses its own CPU governor LOGGING: Logging cleanups. A bunch of unifications and reformattings (capitalizations, dots, quotes, prefixes etc). Also added a few missing things, such as Run-Ahead error logging and LED interface init logging when it is enabled. NETPLAY: Networking – should not print country for a local lobby NETPLAY: Added setting to allow/disallow players other than the host from pausing the game. NETPLAY: Added a sublabel for netplay max connections. NETPLAY: Fixed port override macro from not being set immediately after the port setting. NETPLAY: Show passworded rooms on lobby NETWORK: Make HTTP header parsing case insensitive NETWORK/UPNP: Fixed memory leaks NETWORK/UPNP: Added a task_queue_wait to prevent executing two nat tasks at once, so it’s also thread safe now NETWORK/UPNP: Switch to a permanent lease time, but request it to be removed when we do netplay_free. Switch to a permanent lease time, but request it to be removed when we do netplay_free. NETWORK/UPNP: Only use a single interface for UPnP, return on the first one found instead of iterating over all of them and opening them one by one OVERLAYS: Revert changes RETROFW: Add OSS audio VIDEO/ROTATION: Always return false if rotation can’t occur. RETRO_ENVIRONMENT_SET_ROTATION should return false when rotation has been forcefully disabled in frontend, that way the core can decide if aspect ratio should be rotated or not for vertical games. Useful for FBNeo for instance. VULKAN: Avoid hard crash when capturing screenshot in emulating mailbox. WIIU: Make wiiu_gfx_load_texture code safer WIIU: Fix keyboard support.
We're happy to announce that Prosystem has been added to RetroArch Steam as core DLC!
The ProSystem emulator is an A7800 emulator. It was originally written in C++ using the Windows API and DirectX. It runs the ANTSC and PAL TV standards. It was originally written by Greg Stanton and then updated by others. For libretro it has been rewritten in C and made more portable, along with some additional enhancements.
We're happy to announce that gpSP has been added to RetroArch Steam as core DLC!
gpSP is one of the fastest emulators of a very popular 32bit handheld game console released in the early '00s. It was originally made for that console's biggest competitor, quite a feat at the time and as a result it is very hard to beat in terms of performance. It has also recently seen numerous improvements over the original release by dedicated contributors who keep improving this emulator.
We're happy to announce that Caprice32 has been added to RetroArch Steam as core DLC!
Caprice32 is a software emulator of the CPC 8-bit home computer series that were manufactured by the British company between 1984 and 1993. The hardware has great features, like an operating system, CP/M and a HIRES display mode of 80-column. Its custom Gate-array and CRTC chips, exclusively designed, allows scroll effects, custom graphics modes, overscan, and many more.
The emulator faithfully imitates the CPC464, CPC664, CPC6128, CPC6128+ and GX4000 models. By recreating the operations of all hardware components at a low level, the emulator achieves a high degree of compatibility with original CPC software.