RetroArch Emulator Frontend


474 posts   Page 1 of 19   1, 2, 3, 4, 5 ... 19
by Toad King » Mon May 28, 2012 11:49 am
I've spent the last week porting RetroArch, a multi-emulator frontend to the Raspberry Pi. My port is intended to run from the command line, with no X server running. It uses EGL/OpenVG to render directly to a fullscreen framebuffer. So far, the following features work:

* Fullscreen video
* Keyboard and joystick controls
* Audio (theoretically, couldn't get it working myself because ALSA isn't working on my installation right now)
* Netplay should also work in theory

Future work:

* Get audio working through OpenMAX instead of the alpha-level ALSA driver
* Get it running in an X window (this might be better suited for a full port of SDL to GLES)
* Bulletproof keyboard code (currently depends on raw keyboard mode and can corrupt your terminal if the emulator crashes unexpectedly)

You can grab and compile the sources from here: https://github.com/ToadKing/RetroArch-Rpi
You also will need to download a compile emulator cores for the systems you wish to emulate. To get a list of emulator cores already ported, you can run this script: https://github.com/Themaister/libretro-super (Also note that I've had some issues getting the SNES cores working, so YMMV.)

Feel free to report any bugs you encounter.
User avatar
Posts: 156
Joined: Sun Dec 18, 2011 8:03 pm
by benhofb » Wed May 30, 2012 3:36 am
Toad King wrote:I've spent the last week porting RetroArch, a multi-emulator frontend to the Raspberry Pi. My port is intended to run from the command line, with no X server running. It uses EGL/OpenVG to render directly to a fullscreen framebuffer. So far, the following features work:

* Fullscreen video
* Keyboard and joystick controls
* Audio (theoretically, couldn't get it working myself because ALSA isn't working on my installation right now)
* Netplay should also work in theory

Future work:

* Get audio working through OpenMAX instead of the alpha-level ALSA driver
* Get it running in an X window (this might be better suited for a full port of SDL to GLES)
* Bulletproof keyboard code (currently depends on raw keyboard mode and can corrupt your terminal if the emulator crashes unexpectedly)

You can grab and compile the sources from here: https://github.com/ToadKing/RetroArch-Rpi
You also will need to download a compile emulator cores for the systems you wish to emulate. To get a list of emulator cores already ported, you can run this script: https://github.com/Themaister/libretro-super (Also note that I've had some issues getting the SNES cores working, so YMMV.)

Feel free to report any bugs you encounter.


Wow! This should be fantastic! Now, this is probably a silly question, but does the front-end support vertical orientation?

I was looking into the Pi as a MAME machine, but put the project on hiatus due to the lack of proper software for my project. But if this works well, I may just have to start the project back up! Now, at least I won't have to worry about the porting of AdvanceMenu.
User avatar
Posts: 15
Joined: Tue May 01, 2012 3:29 am
Location: A City on the Periphery of Orlando.
by Toad King » Wed May 30, 2012 4:21 am
benhofb wrote:
Toad King wrote:I've spent the last week porting RetroArch, a multi-emulator frontend to the Raspberry Pi. My port is intended to run from the command line, with no X server running. It uses EGL/OpenVG to render directly to a fullscreen framebuffer. So far, the following features work:

* Fullscreen video
* Keyboard and joystick controls
* Audio (theoretically, couldn't get it working myself because ALSA isn't working on my installation right now)
* Netplay should also work in theory

Future work:

* Get audio working through OpenMAX instead of the alpha-level ALSA driver
* Get it running in an X window (this might be better suited for a full port of SDL to GLES)
* Bulletproof keyboard code (currently depends on raw keyboard mode and can corrupt your terminal if the emulator crashes unexpectedly)

You can grab and compile the sources from here: https://github.com/ToadKing/RetroArch-Rpi
You also will need to download a compile emulator cores for the systems you wish to emulate. To get a list of emulator cores already ported, you can run this script: https://github.com/Themaister/libretro-super (Also note that I've had some issues getting the SNES cores working, so YMMV.)

Feel free to report any bugs you encounter.


Wow! This should be fantastic! Now, this is probably a silly question, but does the front-end support vertical orientation?

I was looking into the Pi as a MAME machine, but put the project on hiatus due to the lack of proper software for my project. But if this works well, I may just have to start the project back up! Now, at least I won't have to worry about the porting of AdvanceMenu.

Right now it does not support vertical orientation, but it wouldn't be a difficult feature to add.

Some testing with the FBA core shows that it plays some games well (a lot better than ones running in X), but some games have slowdown issues. (CPS1/2, Neo-Geo, etc.) Having ports of specific emulators for those platforms with a focus on performance would be needed to get those games at fullspeed.
User avatar
Posts: 156
Joined: Sun Dec 18, 2011 8:03 pm
by Toad King » Thu May 31, 2012 3:40 pm
I looked at iMAME4all for a bit last night and I have a version of it running under libretro now.

https://github.com/ToadKing/imame4all-libretro

It still has some bugs to work out (some games have crackling audio or outright crash) but it already has much better performance than FBA. I hover between fullspeed and nearly fullspeed in Metal Slug on a 800Mhz overclocked Pi. If you compile and run it, try to be careful with crashes, which can render your terminal useless and might force a restart. Try running retroarch like this in the meantime to try to avoid it:

Code: Select all
retroarch <game> ; kbd_mode -u
User avatar
Posts: 156
Joined: Sun Dec 18, 2011 8:03 pm
by Squarepusher » Thu May 31, 2012 4:00 pm
ToadKing: Very cool, this makes you the first person outside of me and Maister who has done a libretro port. So thanks very much for that.

I'll see if I can get this running on PS3/360 as well - and if so, I'll submit a pull request to you.

If there's anything you are missing in the libretro API with regards to how MAME works then just let me and Maister know about it. I can imagine that the lack of full-blown keyboard support would be a problem right now (or are the binds to the RetroPad enough for now?).
Posts: 6
Joined: Wed May 30, 2012 9:16 am
by Toad King » Thu May 31, 2012 4:13 pm
I just mimicked the keybinds from FBA for the most part. Lightgun games may not work right yet but I'm taking it one step at a time.

The only real problem I encountered was getting MAME to run one frame at a time, which it was not really designed for, although this is more of a design choice than any real issues. I ended up hacking it in with a thread that gets paused every frame cycle.

The only real issues I have with the API so far is hacking around MAME to get it to do things outside of the main thread. I'm not sure if I can get savestates running this way, but nearly everything else is fine.

And if you try to compile it for PS3/360, let me warn you that some games just outright crash right now. NBA Jam is one that I know of.
User avatar
Posts: 156
Joined: Sun Dec 18, 2011 8:03 pm
by alexroc » Sun Jun 03, 2012 9:31 am
I just tried it with the imame4all backend and WOW!
It took a LOT of time to compile and I had some problems with the configuration but It was definitely worth it!
It still has some bugs (I cant seem to get any sound) but I had Metal Slug 2 at 50-60 FPS and Street Hoop at fullspeed 8-)

Great work Toad I think this is the best mame emu so far :D
Posts: 1
Joined: Sun Jun 03, 2012 9:24 am
by Toad King » Sun Jun 03, 2012 6:36 pm
alexroc wrote:I just tried it with the imame4all backend and WOW!
It took a LOT of time to compile and I had some problems with the configuration but It was definitely worth it!
It still has some bugs (I cant seem to get any sound) but I had Metal Slug 2 at 50-60 FPS and Street Hoop at fullspeed 8-)

Great work Toad I think this is the best mame emu so far :D

That sounds like my results too, so I'm glad other people can mimick them!

Right now the sound depends on ALSA, and I can't get the snd_bcm2835 module working on my computer, so I hope to get a sound core in OpenMAX IL for it running in the future.

Also, I've noticed a bug in the iMAME4all core: If you hit Escape while on the copyright screen, it will hardlock the emulator, and because the keyboard is stuck in raw mode, the only way to end it is to ssh into your box and kill it that way or power it down. I'll look at getting a fix for it soon.
User avatar
Posts: 156
Joined: Sun Dec 18, 2011 8:03 pm
by normal » Mon Jun 04, 2012 11:12 pm
The libretro-super URL is broken. Was it changed or updated or what?
Posts: 61
Joined: Sun May 27, 2012 9:50 pm
by Toad King » Tue Jun 05, 2012 3:00 am
normal wrote:The libretro-super URL is broken. Was it changed or updated or what?

Yeah, they changed it. The working link is here: https://github.com/libretro/libretro-super
User avatar
Posts: 156
Joined: Sun Dec 18, 2011 8:03 pm
by normal » Tue Jun 05, 2012 7:55 am
Thanks for the link, you should update your first post with it if youcan. Did you ever get the snes cores working? I can't even get them to compile. This is the buildlog I get:

Code: Select all
=== Building bSNES performance ===
gcc -std=gnu99 -I. -O3 -fomit-frame-pointer -march=native -DPROFILE_PERFORMANCE -fPIC -c libco/libco.c -o obj/libco.o
g++ -std=gnu++0x -I. -O3 -fomit-frame-pointer -march=native -DPROFILE_PERFORMANCE -fPIC -c processor/arm/arm.cpp -o obj/processor-arm.o
g++ -std=gnu++0x -I. -O3 -fomit-frame-pointer -march=native -DPROFILE_PERFORMANCE -fPIC -c processor/gsu/gsu.cpp -o obj/processor-gsu.o
g++ -std=gnu++0x -I. -O3 -fomit-frame-pointer -march=native -DPROFILE_PERFORMANCE -fPIC -c processor/hg51b/hg51b.cpp -o obj/processor-hg51b.o
processor/gsu/gsu.cpp:1: error: bad value (native) for -march= switchprocessor/arm/arm.cpp:1: error: bad value (native) for -march= switch

make: *** [obj/processor-gsu.o] Error 1
make: *** Waiting for unfinished jobs....
make: *** [obj/processor-arm.o] Error 1
libco/libco.c:1: error: bad value (native) for -march= switch
processor/hg51b/hg51b.cpp:1: error: bad value (native) for -march= switch
make: *** [obj/processor-hg51b.o] Error 1
make: *** [obj/libco.o] Error 1
Failed to build bSNES performance core
cp: cannot stat `out/libretro.so': No such file or directory
=== Building bSNES compatibility ===
gcc -std=gnu99 -I. -O3 -fomit-frame-pointer -march=native -DPROFILE_COMPATIBILITY -fPIC -c libco/libco.c -o obj/libco.o
g++ -std=gnu++0x -I. -O3 -fomit-frame-pointer -march=native -DPROFILE_COMPATIBILITY -fPIC -c processor/arm/arm.cpp -o obj/processor-arm.o
g++ -std=gnu++0x -I. -O3 -fomit-frame-pointer -march=native -DPROFILE_COMPATIBILITY -fPIC -c processor/gsu/gsu.cpp -o obj/processor-gsu.o
g++ -std=gnu++0x -I. -O3 -fomit-frame-pointer -march=native -DPROFILE_COMPATIBILITY -fPIC -c processor/hg51b/hg51b.cpp -o obj/processor-hg51b.o
libco/libco.c:1: error: bad value (native) for -march= switch
make: *** [obj/libco.o] Error 1
make: *** Waiting for unfinished jobs....
processor/arm/arm.cpp:1: error: bad value (native) for -march= switch
make: *** [obj/processor-arm.o] Error 1
processor/gsu/gsu.cpp:1: error: bad value (native) for -march= switch
make: *** [obj/processor-gsu.o] Error 1
processor/hg51b/hg51b.cpp:1: error: bad value (native) for -march= switch
make: *** [obj/processor-hg51b.o] Error 1
Failed to build bSNES compatibility core
cp: cannot stat `out/libretro.so': No such file or directory
=== Building bSNES accuracy ===
gcc -std=gnu99 -I. -O3 -fomit-frame-pointer -march=native -DPROFILE_ACCURACY -fPIC -c libco/libco.c -o obj/libco.o
g++ -std=gnu++0x -I. -O3 -fomit-frame-pointer -march=native -DPROFILE_ACCURACY -fPIC -c processor/arm/arm.cpp -o obj/processor-arm.o
g++ -std=gnu++0x -I. -O3 -fomit-frame-pointer -march=native -DPROFILE_ACCURACY -fPIC -c processor/gsu/gsu.cpp -o obj/processor-gsu.o
g++ -std=gnu++0x -I. -O3 -fomit-frame-pointer -march=native -DPROFILE_ACCURACY -fPIC -c processor/hg51b/hg51b.cpp -o obj/processor-hg51b.o
libco/libco.c:1: error: bad value (native) for -march= switch
make: *** [obj/libco.o] Error 1
make: *** Waiting for unfinished jobs....
processor/arm/arm.cpp:1: error: bad value (native) for -march= switch
make: *** [obj/processor-arm.o] Error 1
processor/gsu/gsu.cpp:1: error: bad value (native) for -march= switch
make: *** [obj/processor-gsu.o] Error 1
processor/hg51b/hg51b.cpp:1: error: bad value (native) for -march= switch
make: *** [obj/processor-hg51b.o] Error 1
Failed to build bSNES accuracy core
cp: cannot stat `out/libretro.so': No such file or directory
=== Building SNES9x ===
g++ -I. -I.. -I../apu/ -I../apu/bapu -O3 -fomit-frame-pointer -fno-exceptions -fno-rtti -pedantic -Wall -W -Wno-unused-parameter -fPIC -DHAVE_STRINGS_H -DHAVE_STDINT_H -DRIGHTSHIFT_IS_SAR -c -o ../apu/apu.o ../apu/apu.cpp
g++ -I. -I.. -I../apu/ -I../apu/bapu -O3 -fomit-frame-pointer -fno-exceptions -fno-rtti -pedantic -Wall -W -Wno-unused-parameter -fPIC -DHAVE_STRINGS_H -DHAVE_STDINT_H -DRIGHTSHIFT_IS_SAR -c -o ../apu/bapu/dsp/sdsp.o ../apu/bapu/dsp/sdsp.cpp
g++ -I. -I.. -I../apu/ -I../apu/bapu -O3 -fomit-frame-pointer -fno-exceptions -fno-rtti -pedantic -Wall -W -Wno-unused-parameter -fPIC -DHAVE_STRINGS_H -DHAVE_STDINT_H -DRIGHTSHIFT_IS_SAR -c -o ../apu/bapu/dsp/SPC_DSP.o ../apu/bapu/dsp/SPC_DSP.cpp
g++ -I. -I.. -I../apu/ -I../apu/bapu -O3 -fomit-frame-pointer -fno-exceptions -fno-rtti -pedantic -Wall -W -Wno-unused-parameter -fPIC -DHAVE_STRINGS_H -DHAVE_STDINT_H -DRIGHTSHIFT_IS_SAR -c -o ../apu/bapu/smp/smp.o ../apu/bapu/smp/smp.cpp
In file included from ../apu/bapu/snes/snes.hpp:30,
                 from ../apu/bapu/dsp/sdsp.cpp:1:
../apu/bapu/snes/../smp/smp.hpp:61: warning: ISO C++ prohibits anonymous structs
In file included from ../apu/bapu/snes/snes.hpp:30,
                 from ../apu/bapu/smp/smp.cpp:4:
../apu/bapu/snes/../smp/smp.hpp:61: warning: ISO C++ prohibits anonymous structs
In file included from ../apu/bapu/snes/snes.hpp:30,
                 from ../apu/apu.cpp:185:
../apu/bapu/snes/../smp/smp.hpp:61: warning: ISO C++ prohibits anonymous structs
g++ -I. -I.. -I../apu/ -I../apu/bapu -O3 -fomit-frame-pointer -fno-exceptions -fno-rtti -pedantic -Wall -W -Wno-unused-parameter -fPIC -DHAVE_STRINGS_H -DHAVE_STDINT_H -DRIGHTSHIFT_IS_SAR -c -o ../apu/bapu/smp/smp_state.o ../apu/bapu/smp/smp_state.cpp
g++ -I. -I.. -I../apu/ -I../apu/bapu -O3 -fomit-frame-pointer -fno-exceptions -fno-rtti -pedantic -Wall -W -Wno-unused-parameter -fPIC -DHAVE_STRINGS_H -DHAVE_STDINT_H -DRIGHTSHIFT_IS_SAR -c -o ../bsx.o ../bsx.cpp
In file included from ../apu/bapu/snes/snes.hpp:30,
                 from ../apu/bapu/smp/smp_state.cpp:1:
../apu/bapu/snes/../smp/smp.hpp:61: warning: ISO C++ prohibits anonymous structs
g++ -I. -I.. -I../apu/ -I../apu/bapu -O3 -fomit-frame-pointer -fno-exceptions -fno-rtti -pedantic -Wall -W -Wno-unused-parameter -fPIC -DHAVE_STRINGS_H -DHAVE_STDINT_H -DRIGHTSHIFT_IS_SAR -c -o ../c4.o ../c4.cpp
g++ -I. -I.. -I../apu/ -I../apu/bapu -O3 -fomit-frame-pointer -fno-exceptions -fno-rtti -pedantic -Wall -W -Wno-unused-parameter -fPIC -DHAVE_STRINGS_H -DHAVE_STDINT_H -DRIGHTSHIFT_IS_SAR -c -o ../c4emu.o ../c4emu.cpp
g++ -I. -I.. -I../apu/ -I../apu/bapu -O3 -fomit-frame-pointer -fno-exceptions -fno-rtti -pedantic -Wall -W -Wno-unused-parameter -fPIC -DHAVE_STRINGS_H -DHAVE_STDINT_H -DRIGHTSHIFT_IS_SAR -c -o ../cheats.o ../cheats.cpp
g++ -I. -I.. -I../apu/ -I../apu/bapu -O3 -fomit-frame-pointer -fno-exceptions -fno-rtti -pedantic -Wall -W -Wno-unused-parameter -fPIC -DHAVE_STRINGS_H -DHAVE_STDINT_H -DRIGHTSHIFT_IS_SAR -c -o ../cheats2.o ../cheats2.cpp
g++ -I. -I.. -I../apu/ -I../apu/bapu -O3 -fomit-frame-pointer -fno-exceptions -fno-rtti -pedantic -Wall -W -Wno-unused-parameter -fPIC -DHAVE_STRINGS_H -DHAVE_STDINT_H -DRIGHTSHIFT_IS_SAR -c -o ../clip.o ../clip.cpp
g++ -I. -I.. -I../apu/ -I../apu/bapu -O3 -fomit-frame-pointer -fno-exceptions -fno-rtti -pedantic -Wall -W -Wno-unused-parameter -fPIC -DHAVE_STRINGS_H -DHAVE_STDINT_H -DRIGHTSHIFT_IS_SAR -c -o ../conffile.o ../conffile.cpp
g++ -I. -I.. -I../apu/ -I../apu/bapu -O3 -fomit-frame-pointer -fno-exceptions -fno-rtti -pedantic -Wall -W -Wno-unused-parameter -fPIC -DHAVE_STRINGS_H -DHAVE_STDINT_H -DRIGHTSHIFT_IS_SAR -c -o ../controls.o ../controls.cpp
g++ -I. -I.. -I../apu/ -I../apu/bapu -O3 -fomit-frame-pointer -fno-exceptions -fno-rtti -pedantic -Wall -W -Wno-unused-parameter -fPIC -DHAVE_STRINGS_H -DHAVE_STDINT_H -DRIGHTSHIFT_IS_SAR -c -o ../cpu.o ../cpu.cpp
g++ -I. -I.. -I../apu/ -I../apu/bapu -O3 -fomit-frame-pointer -fno-exceptions -fno-rtti -pedantic -Wall -W -Wno-unused-parameter -fPIC -DHAVE_STRINGS_H -DHAVE_STDINT_H -DRIGHTSHIFT_IS_SAR -c -o ../cpuexec.o ../cpuexec.cpp
g++ -I. -I.. -I../apu/ -I../apu/bapu -O3 -fomit-frame-pointer -fno-exceptions -fno-rtti -pedantic -Wall -W -Wno-unused-parameter -fPIC -DHAVE_STRINGS_H -DHAVE_STDINT_H -DRIGHTSHIFT_IS_SAR -c -o ../cpuops.o ../cpuops.cpp
g++ -I. -I.. -I../apu/ -I../apu/bapu -O3 -fomit-frame-pointer -fno-exceptions -fno-rtti -pedantic -Wall -W -Wno-unused-parameter -fPIC -DHAVE_STRINGS_H -DHAVE_STDINT_H -DRIGHTSHIFT_IS_SAR -c -o ../crosshairs.o ../crosshairs.cpp
g++ -I. -I.. -I../apu/ -I../apu/bapu -O3 -fomit-frame-pointer -fno-exceptions -fno-rtti -pedantic -Wall -W -Wno-unused-parameter -fPIC -DHAVE_STRINGS_H -DHAVE_STDINT_H -DRIGHTSHIFT_IS_SAR -c -o ../dma.o ../dma.cpp
g++: Internal error: Killed (program cc1plus)
Please submit a full bug report.
See <file:///usr/share/doc/gcc-4.4/README.Bugs> for instructions.
make: *** [../apu/bapu/smp/smp.o] Error 1
make: *** Waiting for unfinished jobs....
Failed to build SNES9x
cp: cannot stat `libretro.so': No such file or directory
=== Building SNES9x-Next ===
gcc -I. -I.. -I../apu/ -O3 -DHAVE_STRINGS_H -DHAVE_STDINT_H -DHAVE_INTTYPES_H -D__LIBRETRO__ -DRIGHTSHIFT_IS_SAR -DINLINE=inline -fomit-frame-pointer -std=gnu99 -Wall -W -Wno-unused-parameter -DNDEBUG=1 -fPIC -c -o src/apu.o src/apu.c
gcc -I. -I.. -I../apu/ -O3 -DHAVE_STRINGS_H -DHAVE_STDINT_H -DHAVE_INTTYPES_H -D__LIBRETRO__ -DRIGHTSHIFT_IS_SAR -DINLINE=inline -fomit-frame-pointer -std=gnu99 -Wall -W -Wno-unused-parameter -DNDEBUG=1 -fPIC -c -o src/bsx.o src/bsx.c
gcc -I. -I.. -I../apu/ -O3 -DHAVE_STRINGS_H -DHAVE_STDINT_H -DHAVE_INTTYPES_H -D__LIBRETRO__ -DRIGHTSHIFT_IS_SAR -DINLINE=inline -fomit-frame-pointer -std=gnu99 -Wall -W -Wno-unused-parameter -DNDEBUG=1 -fPIC -c -o src/c4emu.o src/c4emu.c
gcc -I. -I.. -I../apu/ -O3 -DHAVE_STRINGS_H -DHAVE_STDINT_H -DHAVE_INTTYPES_H -D__LIBRETRO__ -DRIGHTSHIFT_IS_SAR -DINLINE=inline -fomit-frame-pointer -std=gnu99 -Wall -W -Wno-unused-parameter -DNDEBUG=1 -fPIC -c -o src/cheats.o src/cheats.c
src/apu.c: In function ?€?spc_copier_copy_int?€?:
src/apu.c:1187: warning: dereferencing type-punned pointer will break strict-aliasing rules
src/apu.c:1189: warning: dereferencing type-punned pointer will break strict-aliasing rules
src/c4emu.c: In function ?€?S9xSetC4?€?:
src/c4emu.c:1143: warning: signed and unsigned type in conditional expression
src/c4emu.c:1144: warning: signed and unsigned type in conditional expression
gcc -I. -I.. -I../apu/ -O3 -DHAVE_STRINGS_H -DHAVE_STDINT_H -DHAVE_INTTYPES_H -D__LIBRETRO__ -DRIGHTSHIFT_IS_SAR -DINLINE=inline -fomit-frame-pointer -std=gnu99 -Wall -W -Wno-unused-parameter -DNDEBUG=1 -fPIC -c -o src/controls.o src/controls.c
gcc -I. -I.. -I../apu/ -O3 -DHAVE_STRINGS_H -DHAVE_STDINT_H -DHAVE_INTTYPES_H -D__LIBRETRO__ -DRIGHTSHIFT_IS_SAR -DINLINE=inline -fomit-frame-pointer -std=gnu99 -Wall -W -Wno-unused-parameter -DNDEBUG=1 -fPIC -c -o src/cpu.o src/cpu.c
gcc -I. -I.. -I../apu/ -O3 -DHAVE_STRINGS_H -DHAVE_STDINT_H -DHAVE_INTTYPES_H -D__LIBRETRO__ -DRIGHTSHIFT_IS_SAR -DINLINE=inline -fomit-frame-pointer -std=gnu99 -Wall -W -Wno-unused-parameter -DNDEBUG=1 -fPIC -c -o src/cpuexec.o src/cpuexec.c
gcc -I. -I.. -I../apu/ -O3 -DHAVE_STRINGS_H -DHAVE_STDINT_H -DHAVE_INTTYPES_H -D__LIBRETRO__ -DRIGHTSHIFT_IS_SAR -DINLINE=inline -fomit-frame-pointer -std=gnu99 -Wall -W -Wno-unused-parameter -DNDEBUG=1 -fPIC -c -o src/dsp.o src/dsp.c
gcc -I. -I.. -I../apu/ -O3 -DHAVE_STRINGS_H -DHAVE_STDINT_H -DHAVE_INTTYPES_H -D__LIBRETRO__ -DRIGHTSHIFT_IS_SAR -DINLINE=inline -fomit-frame-pointer -std=gnu99 -Wall -W -Wno-unused-parameter -DNDEBUG=1 -fPIC -c -o src/fxemu.o src/fxemu.c
gcc -I. -I.. -I../apu/ -O3 -DHAVE_STRINGS_H -DHAVE_STDINT_H -DHAVE_INTTYPES_H -D__LIBRETRO__ -DRIGHTSHIFT_IS_SAR -DINLINE=inline -fomit-frame-pointer -std=gnu99 -Wall -W -Wno-unused-parameter -DNDEBUG=1 -fPIC -c -o src/globals.o src/globals.c
gcc -I. -I.. -I../apu/ -O3 -DHAVE_STRINGS_H -DHAVE_STDINT_H -DHAVE_INTTYPES_H -D__LIBRETRO__ -DRIGHTSHIFT_IS_SAR -DINLINE=inline -fomit-frame-pointer -std=gnu99 -Wall -W -Wno-unused-parameter -DNDEBUG=1 -fPIC -c -o src/memmap.o src/memmap.c
src/memmap.c: In function ?€?HeaderRemove?€?:
src/memmap.c:736: warning: value computed is not used
src/memmap.c: In function ?€?checksum_mirror_sum?€?:
src/memmap.c:1455: warning: assignment makes pointer from integer without a cast
src/memmap.c: In function ?€?Map_SA1LoROMMap?€?:
src/memmap.c:1964: warning: comparison between signed and unsigned integer expressions
gcc -I. -I.. -I../apu/ -O3 -DHAVE_STRINGS_H -DHAVE_STDINT_H -DHAVE_INTTYPES_H -D__LIBRETRO__ -DRIGHTSHIFT_IS_SAR -DINLINE=inline -fomit-frame-pointer -std=gnu99 -Wall -W -Wno-unused-parameter -DNDEBUG=1 -fPIC -c -o src/obc1.o src/obc1.c
gcc -I. -I.. -I../apu/ -O3 -DHAVE_STRINGS_H -DHAVE_STDINT_H -DHAVE_INTTYPES_H -D__LIBRETRO__ -DRIGHTSHIFT_IS_SAR -DINLINE=inline -fomit-frame-pointer -std=gnu99 -Wall -W -Wno-unused-parameter -DNDEBUG=1 -fPIC -c -o src/ppu.o src/ppu.c
gcc -I. -I.. -I../apu/ -O3 -DHAVE_STRINGS_H -DHAVE_STDINT_H -DHAVE_INTTYPES_H -D__LIBRETRO__ -DRIGHTSHIFT_IS_SAR -DINLINE=inline -fomit-frame-pointer -std=gnu99 -Wall -W -Wno-unused-parameter -DNDEBUG=1 -fPIC -c -o src/sa1.o src/sa1.c
gcc: Internal error: Killed (program cc1)
Please submit a full bug report.
See <file:///usr/share/doc/gcc-4.4/README.Bugs> for instructions.
make: *** [src/memmap.o] Error 1
make: *** Waiting for unfinished jobs....
Failed to build SNES9x-Next
cp: cannot stat `libretro.so': No such file or directory
Posts: 61
Joined: Sun May 27, 2012 9:50 pm
by Toad King » Tue Jun 05, 2012 1:11 pm
Don't even bother with any of the bsnes cores, or any of the b[system] cores for that matter. They will all be too much for the Pi to handle.

That said, I've been running into issues with the Snes9x and Snes9x-Next cores, and they only render a black screen. They may not be fast enough anyway, and we may need to port one of the older, faster versions of Snes9x to get fullspeed.
User avatar
Posts: 156
Joined: Sun Dec 18, 2011 8:03 pm
by normal » Tue Jun 05, 2012 1:54 pm
I know to forget about using b cores, but I was concerned that even the other snes cores don't build. Also I ran out of memory compiling fba, would increasing the size of swap fix this?
Posts: 61
Joined: Sun May 27, 2012 9:50 pm
by Toad King » Tue Jun 05, 2012 1:57 pm
normal wrote:I know to forget about using b cores, but I was concerned that even the other snes cores don't build. Also I ran out of memory compiling fba, would increasing the size of swap fix this?

Sometimes it can help. What memory split are you using? Don't try to compile anything on the 128/128 memory split.
User avatar
Posts: 156
Joined: Sun Dec 18, 2011 8:03 pm
by normal » Tue Jun 05, 2012 7:56 pm
I was on 192/64. I just switched to Raspbian Pisces and it defaults to 224/32 with 256MB swap. I'm recompiling now.

Is there a way to only compile specific cores so I can skip the b cores?

Oh and the wiki says the last step to compile libretro-super is "sh libretro-install.sh <path>". What is the <path> is supposed to be?
Posts: 61
Joined: Sun May 27, 2012 9:50 pm
by Squarepusher » Tue Jun 05, 2012 8:53 pm
Toad King wrote:That said, I've been running into issues with the Snes9x and Snes9x-Next cores, and they only render a black screen. They may not be fast enough anyway, and we may need to port one of the older, faster versions of Snes9x to get fullspeed.


Odd. It should be outputting a 15bpp image. It could be that the color format I set by default is what is causing the problem.

Look in port.h -

#define PIXEL_FRMAT RGB555

Create an ifdef there for Raspberry Pi and define it to RGB565 or some other pixel format. You can look at pixform.h to see which other pixel formats you could use.

Also - yes, if a Raspberry Pi can really be compared more or less to a Pentium II 300Mhz PC then you need a very, very old core - 1.52 (and especially post-1.52) will not get you decent speeds - perhaps not even SNES9x 1.43 which they use on Xbox 1/Android. Time to go back to an 2000 SNES9x version and put up with the lower compatibility I guess.
Posts: 6
Joined: Wed May 30, 2012 9:16 am
by normal » Wed Jun 06, 2012 1:02 am
So I compiled libretro-super and fba still didn't compile, but snes9x and snes9x-next did. But when I tried compiling Retroarch itself it doesn't work, I just get a bunch of errors I don't remember getting on squeeze.
Code: Select all
In file included from /opt/vc/include/interface/vmcs_host/vc_tvservice.h:30:0,
                 from /opt/vc/include/bcm_host.h:40,
                 from retroarch.c:59:
/opt/vc/include/interface/vmcs_host/vc_tvservice_defs.h:141:4: warning: type of bit-field ‘scan_mode’ is a GCC extension [-pedantic]
/opt/vc/include/interface/vmcs_host/vc_tvservice_defs.h:142:4: warning: type of bit-field ‘native’ is a GCC extension [-pedantic]
/opt/vc/include/interface/vmcs_host/vc_tvservice_defs.h:143:4: warning: type of bit-field ‘code’ is a GCC extension [-pedantic]
CC retroarch.c
CC file.c
CC file_path.c
CC hash.c
CC driver.c
CC settings.c
CC dynamic.c
CC message.c
CC rewind.c
CC gfx/gfx_common.c
CC patch.c
CC compat/compat.c
CC screenshot.c
CC audio/utils.c
CC input/linuxraw_input.c
CC autosave.c
CC thread.c
CC conf/config_file.c
CC movie.c
CC audio/oss.c
CC gfx/sdl_gfx.c
CC gfx/context/sdl_ctx.c
CC input/sdl_input.c
CC audio/sdl_audio.c
CC fifo_buffer.c
In file included from /opt/vc/include/interface/vmcs_host/vc_tvservice.h:30:0,
                 from /opt/vc/include/bcm_host.h:40,
                 from gfx/rpi.c:4:
/opt/vc/include/interface/vmcs_host/vc_tvservice_defs.h:141:4: warning: type of bit-field ‘scan_mode’ is a GCC extension [-pedantic]
/opt/vc/include/interface/vmcs_host/vc_tvservice_defs.h:142:4: warning: type of bit-field ‘native’ is a GCC extension [-pedantic]
/opt/vc/include/interface/vmcs_host/vc_tvservice_defs.h:143:4: warning: type of bit-field ‘code’ is a GCC extension [-pedantic]
gfx/rpi.c: In function ‘rpi_init’:
gfx/rpi.c:207:16: warning: assignment discards ‘const’ qualifier from pointer target type [enabled by default]
CC gfx/rpi.c
CC gfx/ext_gfx.c
CC audio/ext_audio.c
CC audio/sinc.c
/usr/bin/ld: warning: libvchiq_arm.so, needed by /opt/vc/lib/libOpenVG.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libvcos.so, needed by /opt/vc/lib/libOpenVG.so, not found (try using -rpath or -rpath-link)
/opt/vc/lib/libGLESv2.so: undefined reference to `vcos_log_impl'
/opt/vc/lib/libEGL.so: undefined reference to `vchiu_queue_init'
/opt/vc/lib/libbcm_host.so: undefined reference to `vchi_msg_queuev'
/opt/vc/lib/libEGL.so: undefined reference to `vcos_thread_at_exit'
/opt/vc/lib/libbcm_host.so: undefined reference to `vcos_init'
/opt/vc/lib/libbcm_host.so: undefined reference to `vcos_dummy_thread_create'
/opt/vc/lib/libbcm_host.so: undefined reference to `vchi_service_use'
/opt/vc/lib/libEGL.so: undefined reference to `vcos_pthreads_map_errno'
/opt/vc/lib/libbcm_host.so: undefined reference to `vchi_bulk_queue_transmit'
/opt/vc/lib/libEGL.so: undefined reference to `vcos_named_semaphore_delete'
/opt/vc/lib/libEGL.so: undefined reference to `vchiq_queue_bulk_transmit'
/opt/vc/lib/libbcm_host.so: undefined reference to `_vcos_thread_current_key'
/opt/vc/lib/libEGL.so: undefined reference to `vcos_log_unregister'
/opt/vc/lib/libEGL.so: undefined reference to `vchiq_queue_bulk_receive'
/opt/vc/lib/libbcm_host.so: undefined reference to `vchi_service_open'
/opt/vc/lib/libOpenVG.so: undefined reference to `vcos_generic_reentrant_mutex_delete'
/opt/vc/lib/libbcm_host.so: undefined reference to `vchi_msg_dequeue'
/opt/vc/lib/libEGL.so: undefined reference to `vcos_generic_mem_alloc'
/opt/vc/lib/libbcm_host.so: undefined reference to `vchi_service_close'
/opt/vc/lib/libEGL.so: undefined reference to `vchiq_initialise'
/opt/vc/lib/libbcm_host.so: undefined reference to `vchi_msg_queue'
/opt/vc/lib/libEGL.so: undefined reference to `vchiq_queue_message'
/opt/vc/lib/libEGL.so: undefined reference to `vcos_log_register'
/opt/vc/lib/libEGL.so: undefined reference to `vchiu_queue_pop'
/opt/vc/lib/libbcm_host.so: undefined reference to `vcos_thread_join'
/opt/vc/lib/libbcm_host.so: undefined reference to `vcos_log_get_default_category'
/opt/vc/lib/libbcm_host.so: undefined reference to `vchi_connect'
/opt/vc/lib/libbcm_host.so: undefined reference to `vchi_service_release'
/opt/vc/lib/libEGL.so: undefined reference to `vcos_generic_named_semaphore_create'
/opt/vc/lib/libOpenVG.so: undefined reference to `vcos_generic_reentrant_mutex_create'
/opt/vc/lib/libbcm_host.so: undefined reference to `vcos_thread_create'
/opt/vc/lib/libEGL.so: undefined reference to `vchiq_connect'
/opt/vc/lib/libbcm_host.so: undefined reference to `vchi_create_connection'
/opt/vc/lib/libEGL.so: undefined reference to `vcos_generic_mem_free'
/opt/vc/lib/libbcm_host.so: undefined reference to `vcos_thread_attr_init'
/opt/vc/lib/libbcm_host.so: undefined reference to `vcos_generic_mem_alloc_aligned'
/opt/vc/lib/libEGL.so: undefined reference to `vcos_snprintf'
/opt/vc/lib/libbcm_host.so: undefined reference to `vchi_initialise'
/opt/vc/lib/libOpenVG.so: undefined reference to `vcos_generic_reentrant_mutex_unlock'
/opt/vc/lib/libEGL.so: undefined reference to `vchiu_queue_push'
/opt/vc/lib/libbcm_host.so: undefined reference to `vcos_thread_get_name'
/opt/vc/lib/libOpenVG.so: undefined reference to `vcos_generic_reentrant_mutex_lock'
/opt/vc/lib/libbcm_host.so: undefined reference to `vchi_bulk_queue_receive'
/opt/vc/lib/libbcm_host.so: undefined reference to `single_get_func_table'
/opt/vc/lib/libEGL.so: undefined reference to `vchiq_release_message'
/opt/vc/lib/libbcm_host.so: undefined reference to `vchi_mphi_message_driver_func_table'
/opt/vc/lib/libEGL.so: undefined reference to `vchiq_open_service'
collect2: ld returned 1 exit status
make: *** [retroarch] Error 1
Posts: 61
Joined: Sun May 27, 2012 9:50 pm
by normal » Wed Jun 06, 2012 1:53 am
Actuall I fixed that by following this post:

lanlafi wrote:
Davespice wrote:
lanlafi wrote:add /opt/vc/lib into ld.so.conf.d, please.

I take it this will fix the hello_pi problems I reported above?
Can you point me to where this file is located... I tried to use find -name to locate it without success.

Thanks in advance!


This adds the libraries in /opt/vc/lib so the system finds them.

(commands as root)
cd /etc/ld.so.conf.d/
echo /opt/vc/lib >broadcomlib.conf
ldconfig



Now when I run retroarch i just get "failed to open vchiq instance"
Posts: 61
Joined: Sun May 27, 2012 9:50 pm
by Toad King » Wed Jun 06, 2012 4:02 am
Squarepusher wrote:
Toad King wrote:That said, I've been running into issues with the Snes9x and Snes9x-Next cores, and they only render a black screen. They may not be fast enough anyway, and we may need to port one of the older, faster versions of Snes9x to get fullspeed.


Odd. It should be outputting a 15bpp image. It could be that the color format I set by default is what is causing the problem.

Look in port.h -

#define PIXEL_FRMAT RGB555

Create an ifdef there for Raspberry Pi and define it to RGB565 or some other pixel format. You can look at pixform.h to see which other pixel formats you could use.

Also - yes, if a Raspberry Pi can really be compared more or less to a Pentium II 300Mhz PC then you need a very, very old core - 1.52 (and especially post-1.52) will not get you decent speeds - perhaps not even SNES9x 1.43 which they use on Xbox 1/Android. Time to go back to an 2000 SNES9x version and put up with the lower compatibility I guess.

Wouldn't that return a bad color format to RetroArch, thus corrupting the colors? Anyway, I don't think that is the issue, because I've messed with the render path, and it's getting video frames; they're just all black. It still runs (at about 30 FPS) so it's rendering something.

normal wrote:Now when I run retroarch i just get "failed to open vchiq instance"


Are you still on the 224/32 memory split? That can't do fullscreen 3D rendering on HD displays. You have to be on at least 192/64.
User avatar
Posts: 156
Joined: Sun Dec 18, 2011 8:03 pm
by normal » Wed Jun 06, 2012 2:04 pm
Yeah I forgot to do that. I also read that I need to do "sudo chmod a+rw /dev/vchiq" for some reason on Raspbian to get displays and it runs now, except when I load a NES rom I only get a square grey screen with some random color pixels around. And it freezes, I need to SSH to reboot. Maybe Raspbian Piscese is just missing drivers or packages or whatever for it to work? I think something like that since i need to manualyl set permission for a driver just to get a 3D render.
Posts: 61
Joined: Sun May 27, 2012 9:50 pm
by Toad King » Fri Jun 08, 2012 9:16 am
normal wrote:Yeah I forgot to do that. I also read that I need to do "sudo chmod a+rw /dev/vchiq" for some reason on Raspbian to get displays and it runs now, except when I load a NES rom I only get a square grey screen with some random color pixels around. And it freezes, I need to SSH to reboot. Maybe Raspbian Piscese is just missing drivers or packages or whatever for it to work? I think something like that since i need to manualyl set permission for a driver just to get a 3D render.

Yeah, that sounds like some bugs in your setup. Try adding the user you're running as to the "video" group, that might help with some of the permissions issues you're having.

Also, which FCEU core are you using? I was able to run FCEU-mm just fine.
User avatar
Posts: 156
Joined: Sun Dec 18, 2011 8:03 pm
by normal » Sat Jun 09, 2012 12:39 am
I was using the fceu core that libsuper builds. But when I updated the firmware on squeeze now I get this error:

Code: Select all
1457200810: vchiq_lib: Very incompatible VCHIQ library - cannot retrieve driver version
* failed to open vchiq instance


So it looks like no matter what I do to teh firmware it breaks retroarch! I even tried recompilign retroach and I get so many errors I can't read any of them. Is the firmware or the retroarch broken?
Posts: 61
Joined: Sun May 27, 2012 9:50 pm
by Toad King » Sat Jun 09, 2012 12:42 am
normal wrote:I was using the fceu core that libsuper builds. But when I updated the firmware on squeeze now I get this error:

Code: Select all
1457200810: vchiq_lib: Very incompatible VCHIQ library - cannot retrieve driver version
* failed to open vchiq instance


So it looks like no matter what I do to teh firmware it breaks retroarch! I even tried recompilign retroach and I get so many errors I can't read any of them. Is the firmware or the retroarch broken?

Looks like your firmware update was incomplete. Did you update the libraries along with the firmware/kernel? If you aren't already, I recommend using Hexxeh's rpi-update tool.
User avatar
Posts: 156
Joined: Sun Dec 18, 2011 8:03 pm
by ratherDashing » Sat Jun 09, 2012 1:02 am
normal wrote:I was using the fceu core that libsuper builds. But when I updated the firmware on squeeze now I get this error:

Code: Select all
1457200810: vchiq_lib: Very incompatible VCHIQ library - cannot retrieve driver version
* failed to open vchiq instance


So it looks like no matter what I do to teh firmware it breaks retroarch! I even tried recompilign retroach and I get so many errors I can't read any of them. Is the firmware or the retroarch broken?


sudo chmod a+rw /dev/vchiq
Posts: 39
Joined: Tue Jun 05, 2012 3:00 am
by normal » Sat Jun 09, 2012 6:04 am
ratherDashing wrote:
normal wrote:I was using the fceu core that libsuper builds. But when I updated the firmware on squeeze now I get this error:

Code: Select all
1457200810: vchiq_lib: Very incompatible VCHIQ library - cannot retrieve driver version
* failed to open vchiq instance


So it looks like no matter what I do to teh firmware it breaks retroarch! I even tried recompilign retroach and I get so many errors I can't read any of them. Is the firmware or the retroarch broken?


sudo chmod a+rw /dev/vchiq

I did this and it still doesn't go. I read that updating firmware even without updating kernel causes havoc related to a single file libvchiq_arm.so and no one has fixed it yet. I have to reflash yet again to get it working.
Posts: 61
Joined: Sun May 27, 2012 9:50 pm