RetroArch 1.9.1 – shines brightly on OpenDingux

Written by jdgleaver

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)

Coming soon – RetroArch for OpenDingux release (GCW Zero/RG 350/etc)

Written by jdgleaver

RG350 is but one of the many MIPS-based devices on the market today running OpenDingux.

OpenDingux is a Linux distribution used by a number of open source handheld gaming consoles such as the GCW-Zero, and more recently the popular RG350, RG350P and RG350M range of devices. An initial ‘experimental’ port of RetroArch for OpenDingux was made in January, but it was left unfinished. Over the past two months we have been working hard to rectify this situation.

We are pleased to announce that RetroArch now treats OpenDingux as a first-class citizen, and an official release will be included with the rollout of the new build infrastructure. While targeting the RG350M as a flagship platform (its 640×480 display offers a wealth of upscaling potential), all JZ4770-based devices should be supported. The release highlights include:

  • A reworked and well-optimised SDL-based graphics driver, with numerous features that were missing from the original experimental port (e.g. OSD notification text, graceful handling of invalid display modes, VSYNC control, fast forward support).
  • Full leverage of the hardware IPU (Image Processing Unit), with menu-based control of aspect ratio/integer scaling and image filtering methods (bicubic, bilinear, nearest neighbour).
  • A custom gamepad driver that integrates seamlessly the peculiar input configuration of OpenDingux devices (a hybrid of virtual keyboard inputs and analog sticks) and which offers full rumble support.
  • Many ‘under the hood’ enhancements such as support for battery level monitoring, memory usage reporting, a clean up of irrelevant menu entries, RGUI fixes, directory path rationalisation and a number of carefully tested compiler optimisations. This is a ‘lean and mean’ build tuned specifically for the hardware, with no unnecessary bloat.

We are launching with a modest collection of cores, each one hand-picked for performance and compatibility:

  • FB Alpha 2012 CPS-1
  • FB Alpha 2012 CPS-2
  • FB Alpha 2012 Neo Geo
  • FCEUmm
  • Gambatte
  • Genesis Plus GX
  • gpSP (Note: Currently lacks a dynarec)
  • Handy
  • Beetle PCE Fast
  • Beetle WonderSwan
  • mGBA (Note: GB/GBC/SGB content only)
  • PicoDrive
  • PokeMini
  • PrBoom
  • QuickNES
  • RACE
  • Snes9x 2005
  • Snes9x 2005 Plus
  • TyrQuake
  • VICE x64

We understand that some users may question the validity of expending two man-months of development time on such a ‘niche’ set of devices. It is the nature of RetroArch, however, that work on one platform frequently benefits others. All of the following RetroArch and core improvements have come about as a direct result of this endeavour:

– RetroArch now has a robust mechanism for implementing automatic frame-skipping based on audio buffer occupancy. This is something that stand-alone emulators have had since time immemorial, but RetroArch has always lacked (leading to the infamous ‘crackling audio’ so often reported). Auto frame-skip is a literal game changer, making a variety of previously unusable cores viable on underpowered hardware. Thus far it has been added to:

  • FB Alpha 2012 CPS-1
  • FB Alpha 2012 CPS-2
  • FB Alpha 2012 Neo Geo
  • FBNeo
  • Genesis Plus GX
  • gpSP
  • Beetle PCE Fast
  • Beetle WonderSwan
  • mGBA
  • PicoDrive
  • Snes9x 2005
  • Snes9x 2005 Plus

– As a platform without shader support, video filters are a vital part of the OpenDingux RetroArch experience. To this end, a number of new filters have been added – including several high quality LCD (and Game Boy style) effects that rival shaders, and are useful even on the desktop. In addition, many filters have been optimised intensively for maximum performance on OpenDingux, which of course reduces overheads on all platforms. And finally: OpenDingux work revealed a long-standing bug (now fixed) which disabled video filters entirely on Android.

– Snes9x 2005/Snes9x 2005 Plus has gained colour operation optimisations from Snes9x 1.60 and MIPS-specific assembly code from PocketSNES, which combine with auto frame-skip to significantly enhance performance on low end hardware. Two critical save state bugs have also been fixed.

– Our low-powered arcade cores (FB Alpha 2012 CPS-1/CPS-2/Neo Geo) have been substantially cleaned up and improved, with core option sublabels, aspect ratio correction, low pass audio filters and software-based screen rotation for devices without hardware rotation support. With auto frame-skip, even bottom-tier devices can run arcade content smoothly.

– Interframe blending in Gambatte and mGBA has been optimised, reducing performance overheads by ~70%. The same blending method has also been added to gpSP (along with optional colour correction).

– Beetle WonderSwan now has software-based screen rotation for devices without hardware rotation. In addition, colourisation palettes similar to those in Gambatte have been added for monochrome content (raw black and white is often uncomfortable to view on devices without shaders!).

– OpenDingux has rumble functionality, but we were lacking cores with which to exercise it. We therefore added rumble support to Gambatte and PrBoom, and improved the existing haptic feedback in PokeMini and TyrQuake.

This OpenDingux RetroArch port has been a passion project, born out of sheer amazement that so many of our cores run so beautifully on such limited hardware. We hope that offering a full-fat RetroArch experience will help to revitalise the community surrounding these interesting little devices. And we hope that our non-OpenDingux users will also profit from the optimisations and enhancements!

All this and more will be coming to you as part of our new range of ‘supported’ platform stable/nightly releases once the new infrastructure is about to go public. Stay tuned for more on that during the holidays!