10-03-2015, 07:41 AM (This post was last modified: 06-01-2016, 12:08 AM by arutema.)
Well, the good news is I got it to build. The bad news is that it doesn't actually run, just gives the message "EGL Error: Unable to get display!" if run from the command line or "Unable to create EGL display." if run from an xterm.
EDIT: Some of this was wrong for the current Rasbian distro and PPSSPP version. See my updates post further down-thread for updated build instructions.
10-24-2015, 09:03 AM (This post was last modified: 10-24-2015, 09:03 AM by arutema.)
1.1.1 seems to compile on Pi with fewer hacks than previous versions.
Now up to
Quote:16:50:227 Core/Config.cpp:859 I[LOAD]: Loading controller config: /home/pi/.config/ppsspp/PSP/SYSTEM/controls.ini
16:50:227 Core/Config.cpp:864 E[LOAD]: Failed to read /home/pi/.config/ppsspp/PSP/SYSTEM/controls.ini. Setting controller config to default.
pure virtual method called
terminate called without an active exception
Pixels: 1680 x 1050
Virtual pixels: 1680 x 1050
in the startup process before terminating. From what digging i've been able to do, this may be related to not having any form of FFMPEG linked it. Trying to force it to link FFMPEG, and will share my CMakeLists.txt if tomorrow's session resolves that problem.
iirc, when I was switching to rpi2, i had to block compile NEON/armv7 stuff
(i've read somewhere, some time ago that rpi2's cpu has/had(?) problems with NEON, or was it not compatible with it?, i dunno now, also, my old compile from rpi worked okay while i couldn't compile or run(segfault) rpi2 armv7 build)
so code-wise I had to comment out in CmakeLists.txt":
-armv7 detection
Code:
# Detect CPU from CMAKE configuration. Toolchains should set this up
if(CMAKE_SYSTEM_PROCESSOR)
if(${CMAKE_SYSTEM_PROCESSOR} MATCHES "^arm")
set(ARM ON)
# if(${CMAKE_SYSTEM_PROCESSOR} MATCHES "^armv7")
# set(ARMV7 ON)
# endif()
elseif(${CMAKE_SYSTEM_PROCESSOR} MATCHES "^x86" OR
${CMAKE_SYSTEM_PROCESSOR} MATCHES "^amd64" OR
${CMAKE_SYSTEM_PROCESSOR} MATCHES "i.86")
set(X86 ON)
elseif(${CMAKE_SYSTEM_PROCESSOR} MATCHES "^mips")
set(MIPS ON)
endif()
endif()
(10-24-2015, 05:51 PM)Sim_Piko Wrote: iirc, when I was switching to rpi2, i had to block compile NEON/armv7 stuff
(i've read somewhere, some time ago that rpi2's cpu has/had(?) problems with NEON, or was it not compatible with it?, i dunno now, also, my old compile from rpi worked okay while i couldn't compile or run(segfault) rpi2 armv7 build)
so code-wise I had to comment out in CmakeLists.txt":
-armv7 detection
Code:
# Detect CPU from CMAKE configuration. Toolchains should set this up
if(CMAKE_SYSTEM_PROCESSOR)
if(${CMAKE_SYSTEM_PROCESSOR} MATCHES "^arm")
set(ARM ON)
# if(${CMAKE_SYSTEM_PROCESSOR} MATCHES "^armv7")
# set(ARMV7 ON)
# endif()
elseif(${CMAKE_SYSTEM_PROCESSOR} MATCHES "^x86" OR
${CMAKE_SYSTEM_PROCESSOR} MATCHES "^amd64" OR
${CMAKE_SYSTEM_PROCESSOR} MATCHES "i.86")
set(X86 ON)
elseif(${CMAKE_SYSTEM_PROCESSOR} MATCHES "^mips")
set(MIPS ON)
endif()
endif()
see if that'll fix anything. If not, I'll try to extract from CMakeCache.txt the values I've used.
EUREKA! That's got it booting. Having some problem setting up my controller though. Got to dig into that tonight, maybe just try a different controller.
Thanks, that got my gamepad mostly working. Now to figure out some weirdness with the keyboard. It seems as soon as I launch ppsspp, the keyboard stops responding, and doesn't start again until I send the bash process a SIGHUP over my handy SSH session.
Keyboard issues are partially fixed by installing libudev-dev and rebuilding SDL2 and PPSSPP. It recognizes the keyboard now, but the shell still won't respond to keyboard input after exiting PPSSPP.
10-25-2015, 01:19 PM (This post was last modified: 10-25-2015, 08:58 PM by Sim_Piko.)
Easiest workaround for that is pressing 'Alt + SysRq + R' (SysRq is usually on same key with PrintScreen )
Code-wise, at sdl2's video init, the keyboard is 'locked' so it can't spam all keypresses to shell (SDL_EVDEV_Init() function is probably doing that).
The 'unlock keyboard' function is hidden under SDL_EVDEV_Quit(), which is ran after executing SDL_VideoQuit() (to be specific, it's in "src/video/raspberry/SDL_rpivideo.c", under RPI_VideoQuit()).
That VideoQuit function is somehow not executed at ppsspp's exit, leaving keyboard in 'dead' state.
I remember i've tried to do something with it, but i can't remember or find any code changes i've made, either in ppsspp(and/or 'native') nor in sdl2 :/
Now you have the libraries PPSSPP needs built, next: git clone ppsspp into a local directory. cd into that directory and:
Code:
$ git submodule update --init
$ cd SDL
$ ./buildassets.sh
$ cd ..
$ cmake -DRASPBIAN=ON .
Now, to fix an issue with the keyboard locking up, edit ext/native/base/PCMain.cpp and comment out (add "//" before) the following lines near the end of the file:
Code:
#ifndef MOBILE_DEVICE
exit(0);
#endif
finally, make -j4 and run.
Performance and compatibility reports in my next post.
06-01-2016, 01:43 AM (This post was last modified: 06-06-2016, 12:48 AM by arutema.)
Results so far:
BlazBlue: Calamity Trigger - playable.
Breath of Fire III - playable.
Castlevania: Dracula X Chronicles - playable.
Final Fantasy - playable, but world map can be very choppy. Missing some transparency effects in menus.
Final Fantasy II - FPS drops to unplayable levels on the world map. (Same thing as on my ARM tablet.)
Final Fantasy III - playable.
Final Fantasy IV - mostly playable. Severe FPS drop when the enemy death animation plays.
Final Fantasy Tactics: War of the Lions - Sound randomly drops out and textures glitch.
God of War: Chains of Olympus - unplayable slow framerate.
God of War: Ghost of Sparta - New game hangs after intro FMV.
Guilty Gear XX Accent Core Plus - too much in-match slowdown to be playable.
Legend of Heroes: Trails in the Sky (FC) - playable.
LittleBigPlanet - playable.
Megaman: Maverick Hunter X - playable as of latest GIT.
Megaman Powered Up - playable.
Prinny: Can I Really be the Hero? - playable.
Spectral Souls - playable.
Will edit this post as I test more of my collection.
For stuttering: under Settings -> System, change "I/O timing method" to "Host (bugs, less lag)".
It may be a bit less compatible, but in many cases it should be better - when data loads slowly, games will typically show loading screens, rather than lag (as they would when a UMD is spinning up, etc.)
By the way, PPSSPP also supports reading ISOs via http:// range requests on wifi (for when your SD card is not big enough.) On Android, this is able to play videos smoothly etc. but for a good loading experience you need "Host" as above. If you run an Apache or similar server, you just need to run PPSSPP with a URL as the first argument.
Note: Maverick Hunter X requires you press a button after the video due to a bug right now, at least on other platforms.
(06-01-2016, 02:39 AM)[Unknown] Wrote: For stuttering: under Settings -> System, change "I/O timing method" to "Host (bugs, less lag)".
...
Note: Maverick Hunter X requires you press a button after the video due to a bug right now, at least on other platforms.
-[Unknown]
I'll try that change.
Maverick Hunter X doesn't seem to accept input on Pi to skip that screen. Which is strange since it accepts button presses just fine on Windows and Android there.
(06-01-2016, 02:39 AM)[Unknown] Wrote: For stuttering: under Settings -> System, change "I/O timing method" to "Host (bugs, less lag)".
...
Note: Maverick Hunter X requires you press a button after the video due to a bug right now, at least on other platforms.
-[Unknown]
I'll try that change.
Maverick Hunter X doesn't seem to accept input on Pi to skip that screen. Which is strange since it accepts button presses just fine on Windows and Android there.
Changing the I/O timing didn't help. But I think these slowdowns are a system issue. Turns out I shouldn't use a cheap power supply and ignore undervoltage warnings.
More results tomorrow once I have a proper 5V 2.5A power supply to test with.