RetroArch Android releases (v1.0.0.2)

@eadmaster That chipset should be roughly similar in performance to my previous phone. That in mind, it should handle NES and Gameboy just fine with enough headroom for rewind. SNES and Genesis might not be able to use rewind, but should be okay for the most part otherwise. I don’t think (m)any of the other cores support rewind, but all should be playable, though VBA won’t reach full speed.

EDIT: a big concern, though, is that the Allwinner chipsets usually make their way into really poor quality tablets, which will likely have unreliable refresh rates.

SNES definitely won’t be fullspeed on an Allwinner A10.

I own a tablet myself that has such a SoC - not one game even reaches fullspeed on SNES9x Next, and that is with a ton of speedhacks and ‘micro-optimizations’ that makes every game around ~80 to 100fps faster than bleeding-edge SNES9x.

Donkey Kong Country might reach 55 - 57fps on world 1-3, and 45-40fps on world 2-1.

orly? that’s a shame. I got pretty good speeds in most regular games on my old phone, which was an Epic4G (Galaxy S1 variant).

@eadmaster Seeing as Squarepusher has actual experience with the chipset, I’d take his assessment over my own. :slight_smile:

thanks for your suggestions, i guess then the only options i have is to get a more powerful SoC (what about the Rockchip 3066?) or try to compile myself RA for vanilla Linux… but i’m not sure about the performance gain i will get this way… do you know any bench comparing Android versus vanilla Linux?

There’s no point in a comparison because Android will always be massively inferior to vanilla Linux for reasons such as -

  • a Java Dalvik garbage collector that runs throughout your apps’ runtime state (this still runs through so-called ‘native apps/activities’, BTW)
  • horrible audio/video latency
  • horrible input latency
  • bad to non-existent/non-portable GPU blitting (gralloc has several different implementations per GPU, SurfaceTexture is only available on Android 4.0+ and not exposed in the NDK so have to go through JNI, etc, etc)
  • bad GPU drivers riddled with bugs, incompatibilities that necessitate the use of multiple renderpaths for certain SoCs/GPUs,

Frankly, it is the first system where we cannot guarantee a stable runtime state in terms of performance due to all the stuff going on in the background over which you have no control over.

I’ve found a few Dalvik VM versus NDK benchs here and here. They suggest an order of magnitude performance increase (!)

I have also found this: http://www.war-worlds.com/blog/2012/06/on-android-garbage-collection-can-kill-you

The author gives some tips to reduce the generated garbage. Not sure if this can be used to optimize retroarch for Android.

There’s no point in a comparison because Android will always be massively inferior to vanilla Linux for reasons such as -

  • a Java Dalvik garbage collector that runs throughout your apps’ runtime state (this still runs through so-called ‘native apps/activities’, BTW)
  • horrible audio/video latency
  • horrible input latency
  • bad to non-existent/non-portable GPU blitting (gralloc has several different implementations per GPU, SurfaceTexture is only available on Android 4.0+ and not exposed in the NDK so have to go through JNI, etc, etc)
  • bad GPU drivers riddled with bugs, incompatibilities that necessitate the use of multiple renderpaths for certain SoCs/GPUs,

Frankly, it is the first system where we cannot guarantee a stable runtime state in terms of performance due to all the stuff going on in the background over which you have no control over.[/quote]

And what about Ubuntu Touch? Apparently it isn’t (won’t) use the Dalvik VM, does that mean we can expect a better performance in emulators?

Here is the thing - we already use the NDK for RetroArch - in fact, we don’t use any Java code in RetroArch whatsoever (which seems to be the exception to the norm in Android emu land) - and the garbage collector still does its thing during our runtime state and can therefore ruin performance randomly.

There is no way to avoid GC and/or Java at all on Android - calling NDK apps ‘native apps’ is a big fat lie and a misrepresentation of what it is - it is ‘glue code’ for your C/C++ library so that it can hook into Android’s Java VM. That is all it is. You still get all the performance penalties of Java for free since all of the ‘NDK low-level APIs’ are all wrappers/shisms for higher-level Java APIs like SurfaceFlinger, AudioFlinger and Binder IPC.

I’ve owned both Allwinner A10 and Rockchip RK3066 devices and I think the RK3066 was a huge improvement.

On a $45 MK808 TV stick I can run most cores at or near full speed. The only core where I saw noticeable lag was VBA-next, which I guess a lot of ARM processors have trouble running.

Hi ,

I’ve a pb with the last source of retroarch in android , the new one just crash after select game of a core .

and if i build a old version (21369d224a63286c2a83d9fe3d8ba1ec26972d62 - 31 may) all core works fine. no kind of bug


F/libc    (11496): Fatal signal 11 (SIGSEGV) at 0x5f6c6c5d (code=1)
I/DEBUG   ( 1436): debuggerd: 2013-06-14 19:52:04
I/DEBUG   ( 1436): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG   ( 1436): Build fingerprint: 'htc_europe/htc_saga/saga:4.0.4/IMM76D/434411.2:user/release-keys'
I/DEBUG   ( 1436): pid: 11496, tid: 11519  >>> org.retroarch <<<
I/DEBUG   ( 1436): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 5f6c6c5d
I/DEBUG   ( 1436):  r0 00000000  r1 00a82000  r2 4007c66c  r3 00000000
I/DEBUG   ( 1436):  r4 5f6c6c59  r5 01192200  r6 00c62418  r7 4007c4b4
I/DEBUG   ( 1436):  r8 5f6c6c61  r9 0000046c  10 00000000  fp 00000000
I/DEBUG   ( 1436):  ip 00000000  sp 52edeb90  lr 400457a4  pc 40048a44  cpsr 20000030
I/DEBUG   ( 1436):  d0  616d5f6863726172  d1  5f74696e695f6e69
I/DEBUG   ( 1436):  d2  7320292870617277  d3  6465646565636375
I/DEBUG   ( 1436):  d4  3bc2acce00000000  d5  00006fff641ecf39
I/DEBUG   ( 1436):  d6  0000000051aeda09  d7  beb453ae28d8c536
I/DEBUG   ( 1436):  d8  0000000043da8000  d9  4448000043b68000
I/DEBUG   ( 1436):  d10 0000000000000000  d11 0000000000000000
I/DEBUG   ( 1436):  d12 0000000000000000  d13 0000000000000000
I/DEBUG   ( 1436):  d14 0000000000000000  d15 0000000000000000
I/DEBUG   ( 1436):  d16 73657220636e6953  d17 5b2072656c706d61
I/DEBUG   ( 1436):  d18 3fc5555555555549  d19 bd9f019b593924c5
I/DEBUG   ( 1436):  d20 3bbd4ce62db0a8c3  d21 be5ae5e68a10a88d
I/DEBUG   ( 1436):  d22 bbb3198800000000  d23 3de5d93a5acfd57c
I/DEBUG   ( 1436):  d24 002e002d002c002b  d25 0030002f002e002c
I/DEBUG   ( 1436):  d26 0000000000000000  d27 0000000000000000
I/DEBUG   ( 1436):  d28 001e001d001c001b  d29 0020001f001e001c
I/DEBUG   ( 1436):  d30 0030003000300030  d31 0000000000000000
I/DEBUG   ( 1436):  scr 80000013
I/DEBUG   ( 1436): 
I/DEBUG   ( 1436):          #00  pc 00015a44  /system/lib/libc.so (dlfree)
I/DEBUG   ( 1436):          #01  pc 000166a0  /system/lib/libc.so (free)
I/DEBUG   ( 1436):          #02  pc 0001fa20  /data/data/org.retroarch/lib/libretroarch-activity.so
I/DEBUG   ( 1436):          #03  pc 000243a4  /data/data/org.retroarch/lib/libretroarch-activity.so (rom_history_push)
I/DEBUG   ( 1436):          #04  pc 00030e04  /data/data/org.retroarch/lib/libretroarch-activity.so (menu_rom_history_push_current)
I/DEBUG   ( 1436):          #05  pc 0005599c  /data/data/org.retroarch/lib/libretroarch-activity.so
I/DEBUG   ( 1436):          #06  pc 00013394  /system/lib/libc.so (__thread_entry)
I/DEBUG   ( 1436):          #07  pc 00012ecc  /system/lib/libc.so (pthread_create)
I/DEBUG   ( 1436): 

visibly it"s some things with rom_history_push .

if i do a debug test and comment this function in the current source code ( history.c)


void rom_history_push(rom_history_t *hist,
      const char *path, const char *core_path,
      const char *core_name) { return; }

All cores works fine too.

Ok the last commit fix this issue thanks !

RetroArch works fine on generic ARM Debian, so if Ubuntu Touch allows that sort of thing, I don’t see why not.

Sorry to keep resurfacing, bitching about the Xperia Play, but I cannot get the old R12 APK I linked to install. After of course uninstalling R13 through Google Play, I attempt to launch the R12 APK through Astro File Manager, but this consistently ends up in a failure to install even after multiple reboots of the device. Is there a root directory I need to manually erase, or a nice simple fix like that? Thank you for your help and hard work. If getting it to work requires a factory reset of my device after backing up my info, then I’m very much prepared to do that.

hi,

i cant find a way to enter into service mode on cps1-2 and 3 and neogeo,i have tried the method in the read me:

RetroPad L2 + RetroPad R2 + RetroPad L + RetroPad R + Select =Service Menu button RetroPad L2 + RetroPad R2 + RetroPad L + RetroPad R + Start =Diagnostic button RetroPad L2 + RetroPad R2 + RetroPad L + RetroPad R + Left = Resetbutton RetroPad L2 + RetroPad R2 + RetroPad L + RetroPad R + Right =DIP A Pressed RetroPad L2 + RetroPad R2 + RetroPad L + RetroPad R + Up = DIPB Pressed RetroPad L2 + RetroPad R2 + RetroPad L + RetroPad R + Down =Test Pressed

but none of them seems to work using a xbox360 pad or a ps3 pad or even a keyboard,any hint about what im doing wrong?

thaks for such an excellent work!

You don’t toggle it with a button combo anymore - from now on you go to Core Options and toggle the Service Mode DIP instead.

thanks for the fast answer Squarepusher,but i just tried core options and theres only diagnostics and cpu speed overclock options,setting diagnostics to enabled is not sending the game to service mode,i tried mvsc cps2,mslug neogeoo and sfiii3 cps3.

im over seeing something?

thanks again!

my bad, i was using r13 instead of the newer linked here (r14)

i hope you guys can fix dip switches and save states soon.

thanks again!

New version of RetroArch Android released - version 0.9.9.2 -

Google Play will take some time to sync so in the meantime you can get it here as well -

r16 (June 17, 2013)

  • (LIBRETRO) Added MAME 2003 [0.78] (PC/Android/iOS)
  • (MAME 2003 0.78) Add speedhack core option so that MAME can run at fullspeed on average Cortex A9 CPUs for games like Mortal Kombat 2/3/Ultimate/NBA Jam (DCS sound harware games)
  • Can take screenshots now with libretro GL cores
  • [RGUI] Saves video shader directory to config file.
  • [RGUI] Add FPS / refresh rate monitoring in RGUI.
  • [Android] Input autodetection expanded -
    • Gasia PS3 pad
    • Defender Game Racer Classic
    • Tomee NES USB (swap around buttons A/B)
    • Logitech Precision Gamepad
    • Onlive Wireless Conroller
    • Moga Universal driver (Swap around Start/Select for new driver)
    • Xperia Play hack [UNTESTED - TESTERS NEEDED]
  • [PCSX ReARMed] Add a test for the dynarec to catch broken platforms early - will be written to pcsxr.log
  • [PCSX ReARMed] handle map failures so that it can be retried
  • [Desmume] Add constant frameskip core option
  • [Desmume] Add firmware language core option
  • [SNES9x Next] Loading and saving a state should be fixed now on Blackberry. GCC optimization breakage.

http://themaister.net/retroarch-dl/android/org.retroarch.browser.RetroArch.r16.apk

If you want Mortal Kombat 2/3 running at fullspeed on - say - Cortex A9 CPUs - go to RGUI->Core Options and enable the MK2/Mk3 Speedhack.

And yes, the package got even bigger now with MAME added to it - nothing I can do about it - price of progress. Maybe in the future there will be a way to delete cores you don’t want - for now, you would have to do it manually I suppose.

Oops.

In 0.9.9.2, The buttons are not working in Xperia Play. Only DPAD works.

It says Port 0: keypad-zeus. Port 1: keypad-game-zeus.

But it’s the end. CIRCLE button still acts Back button. and rest of them(CROSS, TRIANGLE, SQUARE, Select, Start, L and R) are not working.

When I used this build http://forum.themaister.net/viewtopic.php?pid=4153#p4153 (you need to download it in phone, not in PC), EVERYTHING works fine(back button behavior and all of the buttons in game)

It’s so strange. sorry.