The RetroPie Project

Welcome to the RetroPie Project. This page provides information about all the pieces of the projects, the goals and should give you an understanding of what the RetroPie Project is.

The RetroPie Project started with the idea of turning the Raspberry Pi into a retro-gaming console and evolved ever since. Besides emulators and front-ends, a full retro-gaming experience also involves game pads or joysticks. The project offers approaches for software as well as hardware questions. In the following, you can find more detailed descriptions about the individual components of the project. The rest of this article is structured according to the following questions:

Let us start with the question:

What is the RetroPie Project?

The RetroPie Project is a collection of works that all have the overall goal to turn the Raspberry Pi into a dedicated retro-gaming console. The project uses Raspbian as OS at the bottom and integrates a large set of emulators for a wide variety of computer systems from the past decades. Besides the emulators, also a graphical front end and a lot of other software features are part of the project to let your nostalgic memories revive. The RetroPie Setup Script is a central piece of software for the installation and configuration of these components. There exists an SD-card image with a complete installation by the RetroPie Setup Script that comes with all supported emulators and functions. Besides the software aspects the RetroPie Project also consists of a solution for connecting certain original game pads directly to the Raspberry Pi. The RetroPie GPIO Adapter is a small piece of hardware that supports the connection of the game pads while also adding a push button and circuitry protection.

What is the RetroPie Setup Script?

retropiesetup2The RetroPie Setup Script lets you install and configure all the emulators, front-ends, drivers, and other components for your retro-gaming console. Technically, it is a bash script that consists of a few thousand lines of code and is run from the command line. The complete sources are hosted at Github to support collaboration, feedback, bug reporting, and pull requests.

And what is the RetroPie GPIO Adapter?

wpid-Photo-19.10.2012-1955.jpgThe RetroPie GPIO Adapter is a dedicated GPIO adapter for the Raspberry Pi that allows an easy and safe connection to, for example, two NES or SNES controllers. It provides circuitry protection against transients and over currents as well as a momentary switch button for arbitrary use. A step-by-step guide for getting started with the RetroPie GPIO Adapter can be found here.

The adapter is designed such that it fits perfectly in the laser-cut acrylic case “PetrockBlock PIE“. While the case has openings for power supply, HDMI, Ethernet, RCA and audio, it also has cut-outs for a GPIO ribbon cable and, furthermore, for two SNES connectors.

wpid-Photo-06.08.2012-2104.jpg

SNESDev is a user-space device driver especially written for the RetroPie GPIO Adapter. It implements two (S)NES game controllers and a virtual keyboard for up to two (S)NES controllers and a button that are connected to the GPIO pins of the Raspberry Pivia the RetroPie GPIO Adapter. The sources of SNESDev are hosted at Github and everyone is invited to contribute!

What is the RetroPie SD-card image and it’s features?

The RetroPie SD-card image is a ready-to-use image that provides a full installation of all systems and functions that are supported by the RetroPie Setup Script. Here is a short description about the features of the image:

Features

  • Complete installation of all available emulators that are supported by the RetroPie Setup Script (see section “supported systems/emulators for details”)
  • Automatic start of Emulation Station, the front-end for browsing and running the ROMs. Emulation Station is maintained by Aloshi, who is also hosting the sources of Emulation Station at Github.
  • Pre-configured splash screen that can be customized with the RetroPie-Setup Script
  • SAMBA shares for each system for copying ROMs on the RPi via network
  • USB daemon for copying ROMs on the RPi via USB stick

Supported systems/emulators

Version 1.9 of the RetroPie SD-card includes emulators for the following systems:

  • Amiga (UAE4All)
  • Apple II (LinApple)
  • Apple Macintosh (Basilisk II)
  • Armstrad CPC (CPC4RPi)
  • Arcade (PiFBA, Mame4All-RPi)
  • Atari 800
  • Atari 2600 (RetroArch)
  • Atari ST/STE/TT/Falcon
  • C64 (VICE)
  • CaveStory (NXEngine)
  • Doom (RetroArch)
  • Duke Nukem 3D
  • Final Burn Alpha (RetroArch)
  • Game Boy Advance (gpSP)
  • Game Boy Color (RetroArch)
  • Game Gear (Osmose)
  • Intellivision (RetroArch)
  • MAME (RetroArch)
  • MAME (AdvMAME)
  • NeoGeo (GnGeo)
  • NeoGeo (Genesis-GX, RetroArch)
  • Sega Master System (Osmose)
  • Sega Megadrive/Genesis (DGEN, Picodrive)
  • Sega Mega-CD (Picodrive)
  • Sega 32X (Picodrive)
  • Nintendo Entertainment System (RetroArch)
  • N64 (Mupen64Plus-RPi)
  • PC Engine / Turbo Grafx 16 (RetroArch)
  • Playstation 1 (RetroArch)
  • ScummVM
  • Super Nintendo Entertainment System (RetroArch, PiSNES, SNES-Rpi)
  • Sinclair ZX Spectrum (Fuse)
  • PC / x86 (rpix86)
  • Z Machine emulator (Frotz)

If you would like to have another emulator supported by RetroPie, feel free to post it!

I would like to contribute! How could I do that?

The RetroPie Project would not exist, if there were not all the other great open-source projects that are combined and remixed here. All these projects evolve by the support of many people. The RetroPie Project evolves in the same way and there are many possibilities for every single one who likes to contribute in one or another way:

  • Take part in the discussions in the comments sections of the blog
  • Join the forum to post questions and support others
  • Propose enhancements or report bugs at the repositories of the individual projects
  • Inspire others by writing about your project in the forum
  • Get gadgets from the store or donate a coffee or two

Tell me about the related blog posts!

Here, you find a summary of all essential posts that are related to the RetroPie project, which started with the post about SNESDev.

  • The idea about the Raspberry Pi as a universal console and the description of a hardware interface for NES/SNES controllers. The beginning of the RetroPie project.
  • An assembly guide for connecting the controllers to the Raspberry Pi.
  • The RetroPie Setup script: An auto-installer and maintaining script that should make the whole software part easy.
  • PetRockBlock PIE, the case for the Raspberry Pi with pre-cut slots for two SNES connectors.
  • A wiki for the RetroPie script and all components that can be installed with it.
  • A GPIO driver for connecting (S)NES Controllers via the GPIO pins of the RPi.
  • The RetroPie GPIO adapter board: a dedicated GPIO adapter for the Raspberry Pi that allows an easy and safe connection of up to two NES or SNES controllers.
  • RetroPie Project SD-card image for download.
  • Recipe for creating the RetroPie image download.
  • A step-by-step guide for getting started with the RetroPie GPIO Adapter
  • Pingback: Raspberry Pi Retropie 2014 Tutorial , make yourself a Gaming Console for under 100$ | BLOG.Dot TV

  • Pingback: Projekt: Raspberry Pi – Gameboy | Arndt's Blog

  • Pingback: Super Pi Boy, czyli Gamboy DMG i Raspberry Pi

  • Pingback: Super Pi Boy, czyli Gameboy DMG i Raspberry Pi

  • p-dude

    add a nintendo DS emulator. NOW.

    • Jason Whiteman

      This is fairly widely discussed that the emulator for DS (desmume) does not run acceptably fast on the Raspberry Pi. You can try it yourself without retropie:

      apt-get install desmume

  • Pingback: Raspberry Pi fun | Dr Samuel George

  • Pingback: Turning my raspberry pi into a NAS | Dr Samuel George

  • Pingback: The Pac-Man Bus Stop For Gamers at Heart - Tech key | Techzone | Tech data

  • Pingback: The Pac-Man Bus Stop For Gamers at Heart - RaspberryPiBoards

  • Pingback: The Pac-Man Bus Stop For Gamers at Heart | Ad Pub

  • Pingback: The Pac-Man Bus Stop For Gamers at Heart | Hack The Planet

  • FishFishmac

    Can someone help me out?
    I’ve downloaded the newest file from the download section and if I want to open the file “RetroPieImage_ver2.3.img” it says that it has an error and i’ve tried everithing.

    Could someone give me a DL Link for an non “.img” file?

  • the person

    its great got super mario bros 3 and for now i play on the keyboard

  • Pingback: Super Mega Ultra Pi Boy 64 Thingy Build -Use Arduino for Projects

  • Pingback: Bus Stop Video Game powered by a Raspberry Pi - Hacked Gadgets – DIY Tech Blog

  • Tom

    Would be nice to include Yabause (Sega Saturn Emulator) so I could play Dragon Force on my TV instead of the computer ;)

    • Jason Whiteman

      Version 0.9.11 is installed with:
      sudo apt-get install yabause
      0.9.13 is unstable on other versions of Debian – but 0.9.11 is shown as stable.
      Source is available from the yabause.org site should you want to take a hand at compiling. I had an issue w/movie.c which was fixed by redefining VERSION (#define VERSION “0.9.11”). There may be other issues as the make is not finished.

      • Jason Whiteman

        correction: should have set to VERSION to 0.9.13.1 to match “YAB_VERSION” in CMakeLists.txt

      • Jason Whiteman

        … installed qt4 from apt-get now to bring in the qt build. src/qt/Settings.h had an issue with VERSION and PACKAGE so I hard-coded
        #define PROGRAM_NAME “yabause”
        [...]
        #define PROGRAM_VERSION “0.9.13.1”
        src/qt/main.cpp may have had a problem with VERSION so I added a #define VERSION “0.9.13.1” in main.cpp at line 30.
        The qt version continues to build. Another snag.
        src/qt/ui/UIAbout.cpp has a VERSION on line 34 I replaced with “0.9.13.1”.
        Certainly at this point, it would be great to fix the root-issue rather than hack the code. Perhaps the makefile’s -D statement as -D”\”…”\”. However, I continue down this path.
        … about 5 cpp files to compile left, I’ll leave it there as any further modifications are likely to be variants of previous fix methodologies.

      • Jason Whiteman

        Last nested follow-up. I have QT Yabause 0.9.13.1 compiled and running with the debugger. I do not have any images to test, but the interface itself is working.
        src/qt/Arguments.cpp had a VERSION that I hardcoded to “0.9.13.1” – that was the final edit to compile.

      • http://www.petrockblock.com/ petRockBlog

        It would be great if you could post a corresponding pull request at https://github.com/petrockblog/RetroPie-Setup/pulls to add Yabause to the RetroPie-Setup Script.

      • Jason Whiteman

        I’ve done 0.9.13.1
        0.9.11 isn’t from source – is trivial – so I didn’t add that yet. I’d rather use a harder case to navigate through my first github collaboration.

      • http://www.petrockblock.com/ petRockBlog

        It would be great if you would post a submit a pull request with your solution at https://github.com/petrockblog/RetroPie-Setup/pulls as soon as it works.

  • Pegabyte

    1. I’m planning on using this to make a game console. Is that okay? 2. Does this mean you can play PC exe games like Maplestory(for example)?

  • Pingback: Bus Stop Video Game powered by a Raspberry Pi | Hi-tech news

  • Pingback: RetroPie 安装与使用 | bits

  • Pingback: Retro Gaming Console with Raspberry Pi – Memories of playing River Raid on Atari … | Azee's Blog

  • Pingback: Norwegian Creations – Bus Stop Pac-Man

  • Jason Whiteman

    I am using retropie as a vehicle for digging into the Raspberry for possible future prototype projects. Emulators provide a platform for taxing embedded hardware as they generally utilize high CPU utilization as well as using most features of the device.

    I am attempting to compile all from source. In doing so, I have a few general observations and then a few specific ones.

    General:

    1) My raspberry is unstable (no overclocking) as I am sure others may experience. Building from source takes “forever” and in doing so has a high chance the system will crash/lockup before completing the script. Upon reboot, the setup script does not appear to have an option to pick up where you left off. Selecting all packages (as was the initial run) will end up re-installing most packages as the script appears to delete directory contents as it goes even if a valid compile has taken place. For this use case, I would prefer an option to compile from source without deleting any folder contents. If this policy is followed, the makefiles will generally pick up a build where it left off. This is not an ideal solution, but reasonably simple to implement. A more utopian fix would be to also prevent re-download of source if the source is there (and complete).

    2) A second general failure is network availability or network sub-system failures which do not lock up the RPi. It may be useful to add some form of a retry hook for network commands where perhaps one could also edit this area and add ifdown / ifup or even USB resets to attempt to restore a connection.

    3) As mentioned before (other comments/announcements/TODOs) – some naming convention would be welcomed. One that unifies the directory names under /opt/retropie, the setup script list, and any other place a particular emulator is referenced. In order to figure out which package did not land – one is tasked with detective work reading README files (if available) or otherwise deducing which package in the setup script matches contents in a directory.

    Specific:

    1) I found the jzintv package did not compile. See error details in pastebin: http://pastebin.com/i2e5SsH7

    The summary is that gcc complained about the “-msse” flag. Removing this flag led to another error (link error).
    2) The PiFBA package also showed a similar link error as jzintv
    3) The apple II package did not compile and required adding libcurl to compile. “out of the box” the apple II package failed on link due to lack of libcurl. There may be other packages – I followed the install instructions for the apple II package to get it to compile.

    • Jason Whiteman

      Some details on the pifba error (not detailed previously) can be found:

      http://pastebin.com/7eWLfve3

      Other general issues:
      4) The log appears to over-write for each package installed. At times during a batch compile-from-scratch run, I would see multiple packages with fatal errors (compile bailed out on link, network error, etc) without abort. The script would continue to run and possibly error on other packages. When reviewing the log files, I would only see the error state of the last package attempted – not a full listing of all errors. This may be by design – but consider perhaps a verbosity switch to allow logging everything.
      5) The error logs do not appear to redirect stderr into the log so some information is missing. The previous pastebins submitted have been generated by manually running make, ensuring the error has been exactly duplicated, and redirecting both stderr and stdout to a text file for submitting to pastebin. Consider adding stderr to the error logs.

      • Jason Whiteman

        Regarding the P/S – I could probably use a higher current one. As a fix I am running with a powered USB hub to remove all external USB devices as power loads.

        Regarding compiling:

        I also saw an issue with pisnes compiling. All compile errors appear to be linking problems whereby force-feeding the required libraries seems to do the trick.

        pisnes fix:

        vi /opt/retropie/emulators/pisnes/Makefile

        snes9x: $(OBJECTS)
        $(CC) <– this line, add: -lrt -lm -lasound

        snes9x.gui: unix/frontend.o
        $(CC) <– this line add: -lrt

        That fixes pisnes for me.

        jzintv fix:

        vi /opt/retropie/emulators/jzintv/src/Makefile

        originally:

        OPT_FLAGS = -flto -ggdb3 -O6 -fomit-frame-pointer -fprefetch-loop-arrays -msse #-DBENCHMARK_STIC

        This line, the compiler complained about -msse so I commented out -msse and added the missing "m" library:

        OPT_FLAGS = -flto -ggdb3 -O6 -fomit-frame-pointer -fprefetch-loop-arrays -lm #-msse #-DBENCHMARK_STIC
        This fixed jzintv and now the ../bin directory has several binaries.
        pifba:
        vi /opt/retropie/emulators/pifba/Makefile
        edit the "LIBS = " line to add:
        -lasound -lrt
        pifba "make" now generates "fba2x" executable.
        uae4all – received libm.so.6 error adding symbols error.
        vi /opt/retropie/emulators/uae4rpi/Makefile
        LDFLAGS =
        line, add: -lm -lz
        uae4all executable now generated
        Those are the fixes for now – not sure how the build got off the tracks.

      • http://www.petrockblock.com/ petRockBlog
    • Me

      If your Pi is unstable, chances are that you have a crap power supply.

      • Jason Whiteman

        FYI: P/S is marginal but stability seemed to improve w/USB hub. I’ll have to test with a power source with a higher rating.
        The rating is 700mA and the B+ is said to draw around 600mA on the low end.
        The last failure (all USB devices on a powered hub) occurred while accessing the SDCard as the LED (green) was illuminated. Video had been asleep (blank screen). I was at idle running dwm (instead of supplied window manager) and no applications were running in the foreground – essentially an idle Raspberry.
        However, this configuration does not clearly have power margin – so I will have to test with perhaps a 2A supply to cover the range indicated for a B+.

      • Jason Whiteman

        Update: I have purchased an MCM 2.2A 5V power supply designed for worst-case of the B+ (200mA over margin of documented worst case current draw) and I am still seeing stability issues in the form of kernel panics or lockups.
        Although I cannot rule out software – these do sometimes occur while at idle without any processes other than the kernel/OS and background processes running.
        I have done a quick search for a hardware diagnostic SDCard image that can perform some sub-system tests (CPU, memory, cache, I/O, interrupts, etc) and have not found one yet.
        I see one other user in the forums with complaints about B+ stability vs. his B using, I would imagine, the same software stack (should have tested by pulling the SDCard out of the B and used in the B+). Although his experience seems to be not at idle-time – the possible correlations are somewhat interesting.

  • Beefsteak

    I have a problem with saving games?

  • Pingback: - Raspberry Pi Zone

  • LECOQ Vincent

    A little remark about joysticks configuration : I use an usb adapter allowing to plug multiple joysticks of real games stations (PSX, GC, XBOX1, …)
    Each ports of this adpater is detect and see as a real joystick even if it is not plugged.
    I use only Xbox controls, detected as joystick 2
    I configure the menu with this joystick, its works well.
    I launch a game un any retro emulator.
    The emulator use the joystick 0 (the GC controler) => imposible to play
    I use ES-config for set the keys to the 2 (-j 2) in the config
    The emulator continue to use the 0. => imposible to play.

    So, where in the config file can I force to use the defined keys on the good joystick ?

  • Pingback: ¿Qué distribución instalo? | ¿Dónde está rafolas?

  • Pingback: Retro Pie och Raspberry Pi - Bloggen r-pi.seBloggen r-pi.se

  • Pingback: Old Retro Games On a new Raspberry Pi - Retro Pie! - About Linux and other technologies for your digital home

  • Pingback: SN64 | Progress Log #2

%d bloggers like this: