Release GINGE Update and Ruckage Pack!


Levi: take into consideration that the Wiz itself couldn't play Nether Dimensional Runner's (the hi-clock version with awesome visual effects) at fullspeed, but the Pandora OWNS it @ 900... no slowdowns, no nada... also, there are lots of titles that aren't speed limited where you have to downclock to 250-300Mhz to get them to function right... I'm sure going the other way (supporting GINGE on Pyra and running softfp on hardfp) we should be alright performance-wise still, but inverting it and doing something like Caanoo support on Pandora would not only suffer from slowdowns due to trapping the calls but also cause a loss in performance from using softfp instead of hardfp to begin with.


I talked with Notaz a little about this and he discouraged me, saying the amount of work and final result would be not worth it. I concur, because even if I used a Pandora distro that had hardfp support, I couldn't utilise the 3D hardware at all (which would be needed for the Caanoo commercial games at the very least) due to a lack of hardfp drivers for pandora gfx (cc models for sure, newer editions might have some drivers hiding around somewhere...)
 
Last edited by a moderator:
Update: I uploaded a Neotron game pack, it's fairly big (has 2 extra games hiding in it that aren't working due to missing touchscreen support atm) but will go down in size when I figure out a good way to incorporate bennugd into the main pack and still have them function properly (Had some rudimentary setup but it was choking on finding the libs no matter where I put them, so I'm going to retry in the next few days).
 
Presumably to make softfp code run on a hardfp env under GINGE would require it to trap and rewrite all fpu instructions to use the other calling mechanism, which would make it somewhat slower.   I'm not sure how much headroom GINGE has over simulating GP2X etc. at 100% as is.

No.


My understanding of GINGE, is that it's a complete userland of Wiz-compatible libraries entierly separate from the system libraries. Since the only difference between softfp and hardfp is calling conventions, there aren't really many problems regarding the softfp<->hardfp boundaries. Softfp and hardfp can coexist on the same system.


Regarding GL drivers: glshim semi-recently got a new implementation of the OpenGL proxying to allow it to work on unmodified builds of Qemu and exagear. There is nothing preventing it from being used to proxy softfp<->hardfp without the use of an emulator.
 
Slaeshjag: So let's break this down a little further and see if we can mindstorm a solution to Caanoo compatibility... From what I know, yes, it does use the Wiz libraries (for the dynamic loader, the static loader operates differently...)


First, the dynamic loader:


What it does do is puts the GP2X/Wiz libraries into the LD_LIBRARY_PATH variable then sets the LD_Preload to the ginge dynamic loader and uses ld-linux.so.2 to load whatever dynamically linked binary you throw at it.


The dynamic loader essentially provides an emulation of the GP2X/Wiz hardware and fakes out certain things (mmuhack, etc.) to allow the GP2X/Wiz software to run as it would on the original hardware.


Are you suggesting that using the ld-linux-armhf.so.* from the caanoo, the caanoo libs and just compiling a slightly modified loader to account for differences in the caanoo hw, etc. would be a viable setup for loading Caanoo software on Pandora? *and ofcourse the eglibc specially patched for hardfp*


Secondly, assuming I managed to figure out a good way to modify the static loader in a similar manner also, would I just need to redirect to loading the loader through the aforementioned ld-linux-arm-hf.so.* or am I missing out on something?


And just to step back and maybe make this an easier concept to grasp if I'm not mistaken... is the kernel completely indifferent to the hardfp/softfp, just libs and binaries need to match up perfectly? Or is there something kernel side that needs to be tweaked too?
 
Last edited by a moderator:
The kernel doesn't really care about hardfp/softfp, as long as the kernel is FPU aware, so it's possible to have a separate softfp stack alongside a hardfp distro. Pretty much any system with an actual FPU will be FPU aware. With the whole multiarch thing, you can even have most of the softfp stack installed directly onto a hardfp distro, much like i386 support on amd64. An important note here is that you can't link hardfp and softfp code together without using unseen amounts of dark sorcery, so you'll need a complete stack. The linker seems capable of doing this rejection automatically from what I've seen.


As for further development of wiz compatibility on pandora, I can't say much of the details, since I am not aware of any implementation details. But the difficulties in crossing the softfp<->hardfp boundary is mostly comprised of libraries you can't get for the other ABI, that's more or less the same problems as running x86 linux stuff in exagear. The main thing here to watch out for is to make sure that the VFP used on one system is compatible with the code you're trying to run. Incompatible FPU's haven't been very wide-spread on ARM afaik.


As for any of the custom hardware, someone with actual knowledge about how the Wiz/Caanoo would have to fill in the details.
 
Can't run GINGE, tried animatch, only got a black screen on the middle of Xfce desktop for a short time :


=======================================================================================
PND             : /media/SD128/pandora/menu/ginge-ruckage.pnd
PND_FSTYPE      : Squashfs
APPDATADIR      : /media/SD128/pandora/appdata/ginge_packs
APPDD_FSTYPE    : vfat
PND_CPUSPEED    : <unset>
EXENAME         : ./pack_ruckage_animatch.sh
ARGUMENTS       : <unset>
=======================================================================================
[ START ]--- Mount the PND ----------
Mounting : mount -t squashfs -o ro "/dev/loop0" "/mnt/utmp/ginge_packs"
Mounting the Union FS : mount -t aufs -o exec,noplink,dirs="/media/SD128/pandora/appdata/ginge_packs=rw+nolwh":"/mnt/pnd/ginge_packs=rr" none "/mnt/utmp/ginge_packs"
[SUCCESS]--- Mount the PND ----------
[ START ]--- Starting the application ( ./pack_ruckage_animatch.sh  ) ----------
Mounting : mount -t squashfs -o ro "/dev/loop1" "/mnt/utmp/ginge.notaz"
Mounting the Union FS : mount -t aufs -o exec,noplink,dirs="/media/SD128/pandora/appdata/ginge.notaz=rw+nolwh":"/mnt/pnd/ginge.notaz=rr" none "/mnt/utmp/ginge.notaz"
sh: --wiz: unknown operand
./ginge_packs.sh: line 51: /mnt/utmp/ginge.notaz/ginge_prep: not found
not a wiz!
unmout ginge_pnd_r3pxml.pnd
[ START ]--- Waiting the Union to be available ----------
[SUCCESS]--- Waiting the Union to be available ----------
rmdir: failed to remove `/mnt/utmp/ginge.notaz': Device or resource busy
[ START ]--- Waiting the PND mount dir to be free ----------
[SUCCESS]--- Waiting the PND mount dir to be free ----------
cleanup done
[SUCCESS]--- Starting the application ( ./pack_ruckage_animatch.sh  ) ----------
[ START ]--- Restoring the frame buffer status ----------
[SUCCESS]--- Restoring the frame buffer status ----------
[ START ]--- Restoring nub mode ----------
[SUCCESS]--- Restoring nub mode ----------
[ START ]--- uMount the PND ----------
[ START ]--- Waiting the Union to be available ----------
[SUCCESS]--- Waiting the Union to be available ----------
rmdir: failed to remove `/mnt/utmp/ginge_packs': Device or resource busy
[ START ]--- Waiting the PND mount dir to be free ----------
[SUCCESS]--- Waiting the PND mount dir to be free ----------
cleanup done
[SUCCESS]--- uMount the PND ----------
=======================================================================================
Return code is : 2
 
Linux-SWAT: What distro are you running that on? Normal SuperZaxxon or another distro? Also, you might need to delete the old GINGE (ginge_pnd_r3pxml.pnd) and install the new one in order to get packs working... Maybe I should've left the version check code in (will put it back in for next release)
 
Latest Zaxxon.


Ok, I'll try remove the old pnd (didn't use it for ages).
 
Same black screen :


=======================================================================================
PND             : /media/SD128/pandora/menu/ginge-ruckage.pnd
PND_FSTYPE      : Squashfs
APPDATADIR      : /media/SD128/pandora/appdata/ginge_packs
APPDD_FSTYPE    : vfat
PND_CPUSPEED    : <unset>
EXENAME         : ./pack_ruckage_animatch.sh
ARGUMENTS       : <unset>
=======================================================================================
[ START ]--- Mount the PND ----------
Mounting : mount -t squashfs -o ro "/dev/loop0" "/mnt/utmp/ginge_packs"
Mounting the Union FS : mount -t aufs -o exec,noplink,dirs="/media/SD128/pandora/appdata/ginge_packs=rw+nolwh":"/mnt/pnd/ginge_packs=rr" none "/mnt/utmp/ginge_packs"
[SUCCESS]--- Mount the PND ----------
[ START ]--- Starting the application ( ./pack_ruckage_animatch.sh  ) ----------
Mounting : mount -t squashfs -o ro "/dev/loop1" "/mnt/utmp/ginge.notaz"
Mounting the Union FS : mount -t aufs -o exec,noplink,dirs="/media/SD128/pandora/appdata/ginge.notaz=rw+nolwh":"/mnt/pnd/ginge.notaz=rr" none "/mnt/utmp/ginge.notaz"
sh: --wiz: unknown operand
./ginge_packs.sh: line 51: /mnt/utmp/ginge.notaz/ginge_prep: not found
not a wiz!
unmout ginge.pnd
[ START ]--- Waiting the Union to be available ----------
[SUCCESS]--- Waiting the Union to be available ----------
rmdir: failed to remove `/mnt/utmp/ginge.notaz': Device or resource busy
[ START ]--- Waiting the PND mount dir to be free ----------
[SUCCESS]--- Waiting the PND mount dir to be free ----------
cleanup done
[SUCCESS]--- Starting the application ( ./pack_ruckage_animatch.sh  ) ----------
[ START ]--- Restoring the frame buffer status ----------
[SUCCESS]--- Restoring the frame buffer status ----------
[ START ]--- Restoring nub mode ----------
[SUCCESS]--- Restoring nub mode ----------
[ START ]--- uMount the PND ----------
[ START ]--- Waiting the Union to be available ----------
[SUCCESS]--- Waiting the Union to be available ----------
rmdir: failed to remove `/mnt/utmp/ginge_packs': Device or resource busy
[ START ]--- Waiting the PND mount dir to be free ----------
[SUCCESS]--- Waiting the PND mount dir to be free ----------
cleanup done
[SUCCESS]--- uMount the PND ----------
=======================================================================================
Return code is : 2


--EDIT : there's a typo in your script btw :


unmout ginge.pnd
 
Last edited by a moderator:
I removed the ginge* folder inside appdata, I'm now able to run GINGE apps, thanks.
 
*facepalm* Well that was a giant brainfart... I dunno where I got the "Caanoo is hardfp" part from, *sigh* my brain must be turning to goo... It is Eabi though, maybe that's what I was thinking but spewing out random unrelated for no reason...


Thanks for the correction Notaz and I'll try and make sure I know what I'm talking about before I go all captain crazypants on a topic again :p


Linux-SWAT: Good to hear you got it going, I'll try and look into the SL4P issues later...
 
Well, now that I'm not thinking all stupid-like I'll try and see if I can get Caanoo support working, looks like I just need to find a way to extract those damn cramfs images they used for the firmware to get the right libs, compile a loader using the caanoo toolchain and go from there, ofcourse controls will need to be adjusted and such but it might be feasible!
 
Animatch, Puszion, Guru Logic Champs, Liar: Redemption and some of the others really are good games.
 
Last edited by a moderator:
Klumpen: ALOT of those games are on GP2X or Wiz, so why the need for Caanoo support? Just sayin'...


I'll look into it eventually, but if you need to play animatch, check out the Ruckage pack... Things like Liar: Redemption will take longer to start working as I have to figure out a way to fake opengllite and drm...
 
At some point, it may be a good idea to put GINGE in a freedesktop Emulators subfolder.
 
Linux-SWAT: So would adding a GP2X subcategory under the current Game>Emulator categories in the PXML create a GP2X subdir in the menu? I'll give it a try and hope for the best, if there is a better way to do this or something I'm missing out on, please let me know :)


...Or would people prefer I just use the subcategory of the game's type and let the GINGE at the start of the app name be the identifying feature of it being emulated?
 
Last edited by a moderator:
Back
Top