Written by jdgleaver
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!