RetroArch/Libretro Technical brochure

Here is a PDF slideshow giving a nice overview of Libretro, RetroArch and the road ahead for the project –

http://www.libretro.com/wp-content/uploads/2014/03/RetroArch-Libretro-Technical-Brochure.pdf

Tomorrow updated versions of RetroArch for iOS, Android and Wii will follow- some hotfixes here and there (FBA core missing in Android, graphics glitches with Glide64 in Mupen64 iOS, resolution setting not saving in RetroArch GX, etc).

RetroArch 1.0.0.2 Changelog

In this post I’ll try to summarize all the changes made to RetroArch since the last version (1.0.0.1). It’s by no means complete but it gives a general overview of what has changed.

Note that the iOS version is still upcoming.

Cores

Mupen64 – W coordinate for vertices now properly set according to per-game depth bias. Should fix most of the texture wobbling issues in games.

Mupen64 – Fixed ‘No Controller connected’ issue in Banjo-Tooie.

Mupen64 – Uses refactored audio RSP plugin, includes numerous fixes such as improved MusyX support, etc.

Mupen64 – Glide64 refactoring  – Optimized dither noise code – is now done on the GPU entirely.

Mupen64 – Glide64 refactoring – codebase has been cleaned up significantly, code duplication cut down on.

Mupen64 – (Non-mobile versions) – Three-point filtering option instead of just bilinear filtering. The N64 used an inferior form of bilinear filtering called 3-sample (or 3-point) filtering. Textures were made with this in mind so many look a lot better with point filtering vs. bilinear.

Screenshot comparison here: http://imgur.com/a/M9nRP

Genesis Plus GX – Aspect ratio changes are now applied correctly.

Genesis Plus GX – Other changes.

Mednafen VB – Added Core Options for Virtual Boy – Anaglyph/Palette.

Mednafen (All) – Should correctly save SRAM to save directory now.

SNES9x – Memory leak fixes and some other improvements.

Nestopia – Core updates.

3DEngine – New core. A combination of all other 3D tech demos so far along with advanced libretro features like camera support, GPS/location services, etc. Can also be used to display still pictures (JPEG/PNG). JPEG support is buggy right now.

VBA-M – Adds Code Breaker/Game Shark support (by using cheat files).

FBA core – No more hardcoded 1024×1024 frame buffer – is now set dynamically. Should in most cases free up around 3MB of system RAM.

RetroArch GX – Gamecube/Wii

– More screen resolutions.

– Overlay support.

– Faster blitting – inlined lots of GX functions.

RetroArch OSX 

– Joypads should work now.

– Analog mapping to D-pad works now for all cores.

– All the changes made to RGUI since the last release (Core Information, reorganized Settings, possible to map frontend actions to gamepad buttons/analog axes, etc)

RetroArch Android

– Should fix App Not Responding issue that happened with overlays and threaded video.

– All the changes made to RGUI since the last release (Core Information, reorganized Settings, possible to map frontend actions to gamepad buttons/analog axes, etc)

RetroArch going all PSP – PSP Version for Next Next release?

RetroArch PSP

This one generated more interest than I had expected. The PSP code in the RetroArch codebase has been dormant for quite some time now, but I never felt like hooking it up until some weeks ago.

Aliaspider did most of the final touches on video/audio after the initial port was up and running. Implemented right now is video, audio, input, RGUI, and most of the features you’d expect from RetroArch. I’ve already been asked about whether or not RetroArch PSP will include shaders or filters, and the answer is ‘no’. PSP’s GPU is fixed function and it has no shader capabilities whatsoever. CPU filters on the other hand would be far too CPU intensive for what is already a pretty weak CPU.

So how is performance with cores? Right now, Gambatte, NXEngine, Doom and some others are running at fullspeed. Aliaspider wrote a custom resampler for Gambatte since even Themaister’s blipper turned out to be too slow for PSP. Nestopia turned out to be surprisingly slow on PSP (about half the framerate of the Raspberry Pi – around 30fps or so) and FBA is also ‘not there’ yet for performance (currently maxing out at 50fps or so for CPS2 games). The latest version of Picodrive seems to be around 50 to 55fps with Sonic 1 – so definitely still a bit slower than the last Picodrive PSP version that was released by notaz back in 2007. It deserves mentioning that most of these cores right now are pretty unoptimized – it is all just generic C code.

Anyway, given that we’re dealing with a very weak CPU here, the need for custom cores arises. My plan is to make libretro versions of NJEMU, gPSP and others so that we can have full-speed CPS1/CPS2/GBA emulation at least on PSP. Aliaspider and me are also looking at ways to improve the current core’s performance. Some of these ideas involve implementing the RETRO_RENDER_HW feature so that we can draw directly to the PSP’s framebuffer and use the raw GPU command buffer through the use of some inlined macros.

So when can you expect a first public release of RetroArch PSP? Not now at least – maybe somewhere in time for 1.0.0.3.  We still believe that with a bit more work, we can release something special on PSP – which is why there will be no release right now. There will be little to no usage of the MediaEngine in cores, so if all goes well you can expect to run RetroArch PSP just fine on your Vita as well.

Remote Joy

Remember this? It was a PRX plugin for homebrew PSPs that allowed you to stream the PSP’s video/audio feed over WiFi to your computer. Well, about a year ago or so we made a very quick-and-dirty initial port to libretro.  The main advantages of this libretro core is that you will be able to use all the advanced functionality of RetroArch, that it is cross-platform and that it embeds libusb into the main core library (the original RemoteJoy was Win32-only).

Right now this core is not yet releasable and there is still some way to go before it can compete with the standalone RemoteJoy Win32 client. Maybe it will be more finished in time for 1.0.0.3.

PPSSPP Libretro core

In case none of the aforementioned two things excited you, maybe this will. We will be looking at making a libretro port of PPSSPP soon. This will be the second non-tech demo libretro GL core after Mupen64. At first it will target Android, iOS, and PC. Xbox 360 support may be considered in the future if I can get my XDK box back – since developing and debugging on a Slim alone is quite painful.

PPSSPP’s GUI will probably be left in (similar to the MAME libretro cores), though it will also be possible to run games headless.

RetroArch v1.0.0.1 release information

This will be our CHANGELOGs from now on.

Core changes

Mupen64

  • Fix audio float overflow bugs – fixes Star Wars: Shadows of the Empire, Star Wars: Episode 1 Racer, Tsumi to Batsu/Sin and Punishment (on PC)
  • (iOS) Added hack to assem_arm.c’s “verify_dirty” return function to make GoldenEye work
  • Alternate controls work differently now – you start with Original controls – press ‘Select’ to toggle ‘Alternate Controls’
  • (Core) Added MusyX ucode for RSP HLE – fixes sound in these games – affects games like Hydro Thunder, Gauntlet Legends, Biohazard 2/Resident Evil 2, etc. Graphics in Resident Evil 2 still messed up though with RSP HLE – change to CXD4 RSP for now to render the graphics accurately.
  • (Core) Other incidental changes.
  • (Core) Some preliminary work on getting graphics to show up in Conker’s Bad Fur Day for glN64

FCEUmm

  • Memory leaks and other bugfixes courtesy of Alcaro

Platform changes

Android

  • Custom input binds should work now again
  • Re-added old overlays – some people complained that the new normalized overlays had an impact on performance
  • Uploaded x86 version too to the Play Store

OSX

  • Now should find cores directory out of the box
  • Some under-the-hood changes with regards to keyboard input that end-users won’t notice much of for now

iOS

  • Reimplemented BTStack controls – it is still very bug-prone though.
  • New icon
  • Re-added old overlays

Gamecube/Wii

  • Input changes courtesy of Jacobeian – MIGHT finally fix long-standing input bugs
  • FBA Full should work again
  • New Input Settings option – Analog to D-pad mapping

RetroArch v1.0.0.0 release information

RetroArch 1.0.0.0 was a big release in many ways, and I haven’t really gotten a chance to explain all of the under-the-hood changes that went into it.

So here goes a belated explanation per platform –

Cores

  • Dinothawr – added for Android/iOS/OSX/PC. Also available as a standalone game from the Google Play Store.
  • Mupen64 libretro – added for Android/iOS/OSX/PC/Blackberry
  • MAME 2010 – added for Android/PC
  • ScummVM – added for iOS (by mistake but what the hell)

General changes to RetroArch that affect all platforms

  • All platforms now have the same basic menu layout, only the “presentation” might differ due to different presentation layers per platform.
  • It is now possible to select an input file (ie. a ROM) and then have RetroArch look for associated cores. This way, you don’t have to manually select a core, and then run a ROM that is compatible with that core. This new feature is called ‘Detect Core’.
  • Core info files (used by the Detect Core feature).
  • There is now a ‘History list’ feature that keeps track of all the games you have played. This is a quick and convenient way to restart games you’ve played before in the past.
  • The libretro API has been expanded in scope to include accelerometer, camera and location support. Implementation drivers have been written for Android and iOS in specific, and a couple of test cores showcase the camera and location services working in a libretro core.
  • The overlay system has been revised. Buttons now light up when you press them and it’s possible to have separate buttons now instead of one big image. Analog input has also been added to the overlay system to allow for DualShock/N64 overlays.
  • Per-core configuration options.
  • All platform ports should now have ‘Auto SRAM Save’ options.
  • Input has been totally revised – it is now possible (in most platform ports) to bind buttons with the gamepad through RGUI.
  • Input autodetect feature – should work for PS3, Xboxes, Wii and Gamecube. Previously this was an Android-only feature.
  • Keyboard search for Content selection – this currently works only on PC – press ‘/’ to be able to input text. You can search for files quickly this way.

Android

  • (UI) Android UI totally revised – courtesy of Lioncash (contributor also to Dolphin Android/Mupen64 AE).
  • (UI) It is now possible to uninstall cores that you don’t want to use.

iOS

  • iOS 7 support.
  • iOS 7 gamepad support. Has been tested to work with Moga iOS 7 gamepad.
  • (Core) PCSX ReARMed now has an interpreter CPU core option. This can be used on non-jailbroken iDevices.

OSX

  • Totally rewritten OSX port. It now has a native Cocoa UI. It shares most of the code with the iOS port.
  • Compatible with OSX 10.6 (Snow Leopard) up to OSX 10.9 (Mavericks). If we get a MacBook PPC, we might make it backwards compatible with that too.
  • Native OSX gamepad support – your mileage may vary.
  • (Lion 10.7 and up) Fullscreen mode.
  • Libretro GL support (for Macs that have OpenGL 2.0+-complaint GPUs).

PlayStation3

  • Revised menu – now at feature parity with the other platform ports.
  • Revised OpenGL implementation driver. Should now have the lowest latency of all platform ports.
  • Input overlays now work. This will be used to full effect for the next release.

Xbox 1

  • Revised menu – now at feature parity with the other platform ports.

Wii

  • Revised menu – now at feature parity with the other platform ports.
  • Fixed audio stuttering on low FPS/exit.

GameCube

  • Revised menu – now at feature parity with the other platform ports.
  • Fixed audio stuttering on low FPS/exit.

NOTE: This blog post is a Work In Progress. It will be updated as we go along. There are also numerous other additions made that can’t be summarized for the sake of brevity.