When I began to assemble my Raspberry Pi-based emulator setup, one of the core issues was simply understanding the elements which comprise the system, namely the hardware and numerous software components which RetroPie relies upon, and which in turn rely upon RetroPie.
Understanding this stack became more crucial once the initial installation was complete, and I subsequently began to explore and customise the system (including setting individual emulator video resolution, display filtering and analog effects, and controller / joypad support).
Firstly, what is RetroPie?
According to petrockblock.com, the home of RetroPie:
“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.”
RetroPie can be thought of as a framework which wraps and extends other software components, ultimately handling the loading of a selected game image into the relevant video game emulator.
The system also provisions management and configuration of numerous elements, including:
- Loading button and axis (analog) control maps, matching upon detected Usb controller(s)
- Setting video resolution
- Applying filtering and video overlay effects
- Providing state management (providing loading and saving of in-progress games)
As noted in previous posts, at the time of writing my installation utilises RetroPie 2.6; the latest version is RetroPie 3 which is currently in Beta.
Very high level overview
[Pi Image: kevinpartner – CCO Public Domain]
[SD Card Image: Asim18 – Attribution-Share Alike 3.0 Unported
Software components high level overview
RetroPie can be installed on the older Raspberry Pi as well as the current model 2 hardware, which is described in my previous post What is the Raspberry Pi?
Debian Linux-based operating system
Multi-system software framework, providing facilities for emulator launch and control, along with configuration of common features such as screen resolutions and controller setup.
Graphical front-end allowing selection of video game system emulators and games, with optional descriptions obtained by ‘scraper’ tools.
RetroArch is a framework comprising numerous ‘cores’ emulating various consoles and home computers; the cores are written utilising the Libretro API.
Software component summary:
What is Raspbian?
Raspbian is described on the Raspbian.org homepage as
“…a free operating system based on Debian optimized for the Raspberry Pi hardware. An operating system is the set of basic programs and utilities that make your Raspberry Pi run. However, Raspbian provides more than a pure OS: it comes with over 35,000 packages, pre-compiled software bundled in a nice format for easy installation on your Raspberry Pi.”
What is EmulationStation?
Emulation Station is described on the Emulation Station homepage as
“a graphical and themeable emulator front-end that allows you to access all your favo[u]rite games in one place”
Emulation Station allows the easy selection and launch of game systems and games, via a gallery-style graphical front end. Systems include consoles (from the Atari 2600 to the Nintendo 64), home computers (such as the Atari 800XL, Commodore Amiga,and Apple II), and ports of classic PC titles (including Quake and Doom).
Once an emulator has been selected, a list of available games is displayed, along with optional information which can be obtained via an in-built or external ‘Scraper’ tool (the operation of these tools will be covered in future post).
Emulation Station can be navigated by keyboard or joystick/joypad; this frontend provides its own controller configuration which is independent of the RetroArch system emulators (true for versions prior to RetroPie 3). This can be confusing, and will be covered in a future blog post.
What is RetroArch?
RetroArch is hosted at the Github RetroArch repository , and can be thought of as a framework which facilitates the dynamic loading of emulators implemented utilising Libretro Api (application programming interface)
RetroArch also provides a common ‘Core Menu’ system which allows control over various aspects of a given emulator core whilst the system is running, including:
- Controller configuration
- Screen resolution
- Video effects (such as the simulation of CRT blur and raster lines on modern LCD monitors)
- Frameskipping, pause, fast forward, and rewind
- State management (loading and saving of games at any point in a play session)
- Control of core-specific options (including audio and video plugins)
Retroarch is a well established tool which has been ported to run on a wide variety of systems, including Xbox 360, PS3, Android, iOS, and Wii, as well as the Raspberry Pi.
The Libretro Api used by the emulator cores is described on the project’s homepage as
“…a simple but powerful development interface that allows for the easy creation of emulators, games and multimedia applications that can plug straight into any libretro-compatible frontend”
Libretro Emulator Cores
Generally these are versions of existing emulators written in C++ for other Linux systems, modified to integrate with RetroArch’s core features, and recompiled to be compatible with the Raspberry Pi (initially providing compatibility with the Raspberry Pi A, B, B+ utilising the ARM6 chipset; recently many are being updated to take advantage of the Raspberry Pi 2’s ARM7 chipset).
For in-depth information regarding Libretto emulator cores, see my post ‘RetroPie Emulation: RetroArch, Libretro, and the Power of the Options Menu’
The following is a list of emulator cores contained in the RetroPie 2.6 build as listed on the PetRockBlock blog
- Amiga (UAE4ALL)
- Apple II (LinApple)
- Atari 800 (Atari800)
- Atari 260 0 (RetroArch/Stella)
- Atari ST/STE/TT/Falcon (Hatari)
- Apple Macintosh (Basilisk II)
- C64 (VICE)
- Amstrad CPC (#CPC4Rpi)
- Final Burn Alpha (RetroArch/PiFBA, RetroArch/FBA)
- Game Boy (RetroArch/Gambatte)
- Game Boy Advance (GpSP)
- Game Boy Color (RetroArch/Gambatte)
- Sega Game Gear (Osmose)
- Intellivision (jzIntv)
- MAME (RetroArch/mame4all-pi, RetroArch/mame4all)
- MSX (openMSX)
- PC – x86 (rpix86)
- NeoGeo (PiFBA, GnGeo)
- Nintendo Entertainment System (RetroArch/FCEUmm)
- Nintendo 64 (Mupen64Plus-RPi)
- TurboGrafx 16 – PC Engine (RetroArch/Mednafen/pce_fast)
- CaveStory (RetroArch/NXEngine)
- Doom (RetroArch/PrBoom)
- Duke Nukem 3D (eDuke)
- Sega Master System / Mark III (RetroArch/Picodrive, Osmose, DGen)
- Sega Mega Drive / Genesis (RetroArch/Picodrive, DGen)
- Sega Mega-CD / CD (RetroArch/Picodrive, DGen)
- Sega 32X (RetroArch/Picodrive, DGen)
- Playstation 1 (RetroArch/PCSX ReARMed)
- Super Nintendo Entertainment System (RetroArch/Pocket SNES, snes9x-rpi)
- Sinclair ZX Spectrum (Fuse, FBZX)
Links: Raspberry Pi and Gaming Emulation via RetroPie