## 1. Project Overview & Quickstart (RetroPie/EmulationStation-Changelog)

# EmulationStation-Changelog

Open-source repository RetroPie/EmulationStation-Changelog

### Repository Details
- **Repository:** [RetroPie/EmulationStation-Changelog](https://github.com/RetroPie/EmulationStation-Changelog)
- **Primary Language:** Code

*Note: High-volume repository documentation is actively indexed and synchronized by YakaAI.*

## 2. Official Technical Reference & Guides (RetroPie/docs)

## File: docs/_Sidebar.md

# [Wiki Home Page](https://github.com/RetroPie/RetroPie-Setup/wiki)

## [Getting Started](First-Installation)

* [**First Installation**](First-Installation)
* [WiFi](Wifi)
* [Controller Configuration (RetroArch)](RetroArch-Configuration)
* [Transferring games (ROMs)](Transferring-Roms)
* [Scraping Games](Scraper)
* [Runcommand](Runcommand)
* [Getting the right Arcade ROMs](Arcade)
* [Updating RetroPie](Updating-RetroPie)
* [Using SSH](SSH)

## [Emulators](Supported-Systems)

* [3do](3do)
* [Amiga](Amiga)
* [Amstrad CPC](Amstrad-CPC)
* [Apple II](Apple-II)
* [Atari 2600](Atari-2600)
* [Atari 5200 and 8 bit series](Atari-800-and-5200)
* [Atari 7800](Atari-7800)
* [Atari Jaguar](Atari-Jaguar)
* [Atari Lynx](Atari-Lynx)
* [Atari ST/STE/TT/Falcon](Atari-ST-STE-TT-Falcon)
* [CoCo](Coco)
* [Colecovision](Colecovision)
* [Commodore 64/VIC 20/PET](Commodore-64-VIC-20-PET)
* [Daphne](Daphne)
* [Dragon 32](Dragon)
* [Dreamcast](Dreamcast)
* [Famicom Disk System](Famicom-Disk-System)
* [FinalBurn Neo](FinalBurn-Neo)
* [GameCube](GameCube)
* [Game & Watch](Game-&-Watch)
* [Game Gear](Game-Gear)
* [Game Boy](Game-Boy)
* [Game Boy Color](Game-Boy-Color)
* [Game Boy Advance](Game-Boy-Advance)
* [Intellivision](Intellivision)
* [Macintosh](Macintosh)
* [MAME](MAME)
* [Master System](Master-System)
* [Mega CD/Sega CD](Sega-CD)
* [Mega Drive/Genesis](Mega-Drive-Genesis)
* [MESS](MESS)
* [MSX](MSX)
* [Neo Geo](Neo-Geo)
* [Neo Geo Pocket](Neo-Geo-Pocket)
* [Neo Geo Pocket Color](Neo-Geo-Pocket-Color)
* [Nintendo 64](Nintendo-64)
* [Nintendo DS](Nintendo-DS)
* [Nintendo Entertainment System](Nintendo-Entertainment-System)
* [Oric-1/Atmos](Oric)
* [PC](PC)
* [PC-8800](PC-8800)
* [PC-9800](PC-9800)
* [PC Engine/TurboGrafx-16](PC-Engine)
* [PC-FX](PC-FX)
* [PlayStation 1](Playstation-1)
* [PlayStation 2](Playstation-2)
* [Pokemon Mini](Pokemon-Mini)
* [PSP](PSP)
* [ResidualVM](ResidualVM)
* [SAM Coupé](Sam-Coupe)
* [Saturn](Saturn)
* [ScummVM](ScummVM)
* [Sega 32X](Sega-32X)
* [Sega SG-1000](SG-1000)
* [Sharp X1](Sharp-X1)
* [Sharp X68000](Sharp-X68000)
* [Super Nintendo Entertainment System](Super-Nintendo-Entertainment-System)
* [TI-99/4A](TI-99)
* [TRS-80](TRS-80)
* [Vectrex](Vectrex)
* [Videopac/Odyssey2](VideoPac-Odyssey-2)
* [Virtual Boy](Virtual-Boy)
* [Wii](Wii)
* [WonderSwan](WonderSwan)
* [WonderSwan Color](WonderSwan-Color)
* [Zmachine](Zmachine)
* [ZX-81](ZX81)
* [ZX Spectrum](ZX-Spectrum)

## Ports

* [Adventure Game Studio](Adventure-Game-Studio)
* [Cave Story](Cave-Story)
* [Commander Keen](Commander-Keen) 
* [Descent](Descent)  
* [Dinothawr](Dinothawr)  
* [DOOM](Doom) 
* [Duke Nukem 3D](Duke-Nukem-3D)
* [GameMaker Games](GameMaker-Games)
* [GemRB (BG,IWD,PS)](GemRB)
* [Giana's Return](Giana's-Return)
* [Lincity](Lincity)
* [Löve](Love) 
* [KODI](KODI) 
* [Marathon](Marathon)
* [Micropolis](Micropolis)
* [Minecraft Pi Edition](Minecraft) 
* [OpenBOR](OpenBOR) 
* [OpenTTD](OpenTTD) 
* [OpenTyrian](OpenTyrian) 
* [OutRun Engine](Cannonball) 
* [Prince of Persia](SDLPoP)
* [Quake Series](Quake) 
* [Rick Dangerous](Xrick)
* [Stratagus (Warcraft/Starcraft)](Stratagus)
* [Super Mario War](Super-Mario-War) 
* [SuperTux](SuperTux) 
* [The-Ur-Quan-Masters](The-Ur-Quan-Masters) 
* [Wolfenstein 3D](Wolfenstein-3D)
* [Zelda Engine](Solarus) 

## Advanced Configuration

* [EmulationStation](EmulationStation)
* [EmulationStation Changelog](EmulationStation-Changelog)
* [Custom Splash Screens](Splashscreen)
* [EmulationStation Themes](Themes)
* [Take and Scrape Your Own Screenshots](Take-and-Scrape-Your-Own-Screenshots)
* [Create Your Own Theme](Creating-Your-Own-EmulationStation-Theme)
* [Advanced Theming](EmulationStation-Advanced-Theming)
* [Add a New System in Emulationstation](Add-a-New-System-in-EmulationStation)
* [Configuration Editor](Configuration-Editor)
* [RetroAchievements](RetroAchievements)
* [Multiplayer Saves & Unlockables](Multiplayer-Saves-&-Unlockables)
* [Netplay](Netplay)
* [Overclocking](Overclocking)
* [Memory Split](Memory-Split)
* [Manual Installation](Manual-Installation)
* [Odroid C1 C2](Odroid-C1-C2)
* [Odroid XU3 XU4](Odroid-XU3-XU4)
* [Arch Linux](Arch-Linux)
* [Debian/Ubuntu/Mint](Debian)
* [OSMC](OSMC)
* [Favorites and Child-friendly EmulationStation](Child-friendly-EmulationStation)
* [Optimization for Nintendo 64](Optimization-for-Nintendo-64)
* [[Running ROMs from a USB drive]]
* [[Running ROMs from a Network Share]]
* [Smaller RetroArch Screen](Smaller-RetroArch-Screen)
* [[Shaders and Smoothing]]
* [[Overscan]]
* [[Input Lag]]
* [[Validating, Rebuilding, and Filtering ROM Collections]]

## Controllers

* [XBox 360 Controller](Xbox-360-Controller)
* [PS3 controller](PS3-Controller)
* [PS4 controller](PS4-Controller)
* [PSP FuSa gamepad](PSP-FuSa-gamepad)
* [N64 controller](N64-Controller)
* [Ouya controller](Ouya-Controller)
* [Bluetooth controller](Bluetooth-Controller)
* [8bitdo controllers](8Bitdo-Controller)
* [Logitech controllers](Logitech-Controller)
* [Mobile Gamepad](Mobile-Gamepad)
* [Smartphone Gamepad](Virtual-Gamepad)
* [Wiimote](Wiimote-Controller)
* [Wii U Pro Controller](Wii-U-Pro-Controller)
* [Xin-Mo Driver](Xin-Mo-Controller)
* [Keyboard Controllers](Keyboard-Controllers)
* [GPIO Controller Modules](GPIO-Modules)
* [Spinners, Trackballs, Lightguns](Spinners,-Trackballs,-Lightguns,-and-other-Mouse-Devices)
* [X-Arcade](X-Arcade)
* [Xiaomi Gamepad](Xiaomi-Controller)
* [Universal Controller Calibration & Mapping Using xboxdrv](Universal-Controller-Calibration-&-Mapping-Using-xboxdrv)
* [Controller Configuration (driver level)](Controller-configuration-%28driver-level%29)

## Troubleshooting

* [Sound Issues](Sound-Issues)
* [Speed Issues](Speed-Issues)
* [Video Issues](Video-Issues)
* [FAQ](FAQ)

## Developers

 * [Shell Style Guide](Shell-Style-Guide)

---

## File: docs/3do.md

***



***
_The Panasonic 3do Real Multiplayer was a Home Video Game Console developed by the 3do company in 1994. Its humongous price tag of $700 and oversaturation in the video game market at the time meant it was a commercial failure._

***

| Emulator | Rom Folder | Extension | BIOS |  Controller Config |
| :---: | :---: | :---: | :---: | :---: |
| [lr-opera](https://github.com/libretro/opera-libretro) | 3do  | .chd .cue .iso .zip | panafz10.bin | /opt/retropie/configs/3do/retroarch.cfg |

## Emulator: [lr-opera](https://github.com/libretro/opera-libretro) (formerly known as `lr-4do`).

**lr-opera** will be slow on the Pi3 and earlier models, however some games will run at playable speeds on the Pi4/Odroid-XU4/

## ROMS
Accepted File Extensions: **.iso** **.bin/cue** **.chd** **.zip**

Place your 3do ROMs in
```
/home/pi/RetroPie/roms/3do
```
## BIOS

One of several BIOS ROMs must be placed in `/home/pi/RetroPie/BIOS`. The _norsa_ versions have the RSA encryption check disabled which should allow unsigned software to run.

| Filename                  | Hash (MD5)                       |
| ------------------------- | -------------------------------- |
| panafz1.bin               | f47264dd47fe30f73ab3c010015c155b |
| panafz1j.bin              | a496cfdded3da562759be3561317b605 |
| panafz1j-norsa.bin        | f6c71de7470d16abe4f71b1444883dc8 |
| panafz10.bin              | 51f2f43ae2f3508a14d9f56597e2d3ce |
| panafz10-norsa.bin        | 1477bda80dc33731a65468c1f5bcbee9 |
| panafz10e-anvil.bin       | a48e6746bd7edec0f40cff078f0bb19f |
| panafz10e-anvil-norsa.bin | cf11bbb5a16d7af9875cca9de9a15e09 |
| goldstar.bin              | 8639fd5e549bd6238cfee79e3e749114 |
| sanyotry.bin              | 35fa1a1ebaaeea286dc5cd15487c13ea |
| 3do_arcade_saot.bin       | 8970fc987ab89a7f64da9f8a8c4333ff |

For certain Japanese games a second "Kanji" ROM is necessary.

| Filename                   | Hash (MD5)                       |
| -------------------------- | -------------------------------- |
| panafz1-kanji.bin          | b8dc97f778a6245c58e064b0312e8281 |
| panafz1j-kanji.bin         | c23fb5d5e6bb1c240d02cf968972be37 |
| panafz10ja-anvil-kanji.bin | 428577250f43edc902ea239c50d2240d |


## Controls

lr-opera utilises Retroarch configurations

Add custom retroarch controls to the retroarch.cfg file in

```shell
/opt/retropie/configs/3do/retroarch.cfg
```
For more information on custom RetroArch controls see: [RetroArch Configuration](RetroArch-Configuration)

---

## File: docs/8Bitdo-Controller.md

# Setting up an 8BitDo Bluetooth controller


This guide will show how to use an 8BitDo Bluetooth controller with RetroPie.

Please see the [8BitDo support page](http://support.8BitDo.com) for details on how to upgrade the firmware. Before you upgrade your firmware or attempt to register your controller, please make sure your controller is fully charged.

## A Note about the 8BitDo Zero controller

When pairing a 8BitDo Zero controller, make sure you start the controller by pressing _R_ + _Start_.

It also may help to reset the controller by holding down the select button for 8 seconds if this does not work. Please note that using the _R+START_ mode does result in different values for the buttons themselves so it may or may not function properly if started under any different mode. The Zero controller may also need enabling the _8BitDo hack_ option (see step 4 below).


## Guide to add your controller

1. Run the RetroPie setup script, either through the Emulation Station menu option or via the command line.
If you want to run this via the command line, quit Emulation Station by pressing F4 on the keyboard and type this at the command line:
```  shell
sudo $HOME/RetroPie-Setup/retropie_setup.sh
```

2. Choose the **Configuration / tools** menu

3. Choose the **bluetooth - Configure Bluetooth Devices** menu

4. Make sure the hack option is turned **off**
You need to make sure your controller is running the latest firmware version.

5. Make sure your controller is powered on and is set to pairing mode.

6. Choose the **Pair and connect to Bluetooth Device** from the menu

7. You will then see the **Searching** screen, that will result in a list of nearby Bluetooth devices.
 It may be the case that the first time the results are returned, the name of the controller doesn't show, or that the MAC address doesn't show at all. If that's the case, you can either select the device if you know the MAC or search again.

8. After it has successfully detected the the controller, select it from the list and then press **OK** to pair the controller.

9. Choose the **DisplayYesNo** option to complete the registration process.

10. Registration of the 8BitDo controller is complete and your blue LED lights should now be solid on (the FC30 Pro will glow).

11. _(optional and mostly not needed)_ Setup the _udev_ rule in order for EmulationStation to "see" the controller when you restart your Raspberry Pi.
This then adds the rule to the file specified, you don't need to manually take any extra steps here.
As indicated, you will need to reboot after completing these steps to make sure all the changes have taken effect.


12. Configure the controller for EmulationStation and the emulators. Press Start in Emulation Station using your non-8BitDo/other controller and choose the *Configure Input* menu option.
You should see that EmulationStation can now see your 8BitDo controller and can perform the usual [Input Configuration](Controller-Configuration) steps to configure the controller.

The process will have written various controller configuration files for you.
The main RetroArch controller profile file will be saved in 
`/opt/retropie/configs/all/retroarch-joypads/`

Here are some examples of the configuration file that would be written.

* **FC30 Pro**

``` ini
# Generated with RetroPie 4.02
# FC30 Pro with firmware 1.69

input_device = "8Bitdo FC30 Pro"
input_driver = "udev"
input_r_y_plus_axis = "+3"
input_l3_btn = "13"
input_r_x_minus_axis = "-2"
input_l_btn = "6"
input_load_state_btn = "6"
input_l2_btn = "8"
input_start_btn = "11"
input_exit_emulator_btn = "11"
input_l_y_minus_axis = "-1"
input_up_btn = "h0up"
input_r_y_minus_axis = "-3"
input_a_btn = "0"
input_b_btn = "1"
input_reset_btn = "1"
input_down_btn = "h0down"
input_l_x_plus_axis = "+0"
input_l_y_plus_axis = "+1"
input_r_btn = "7"
input_save_state_btn = "7"
input_r2_btn = "9"
input_r3_btn = "14"
input_right_btn = "h0right"
input_state_slot_increase_btn = "h0right"
input_x_btn = "3"
input_menu_toggle_btn = "3"
input_select_btn = "10"
input_enable_hotkey_btn = "10"
input_l_x_minus_axis = "-0"
input_y_btn = "4"
input_left_btn = "h0left"
input_state_slot_decrease_btn = "h0left"
input_r_x_plus_axis = "+2"
```

* **SFC30**
``` ini
# Generated with RetroPie 4.02
# SFC30 with firmware 2.68

input_device = "8Bitdo SFC30 GamePad"
input_driver = "udev"
input_l_btn = "6"
input_load_state_btn = "6"
input_start_btn = "11"
input_exit_emulator_btn = "11"
input_up_axis = "-1"
input_a_btn = "0"
input_b_btn = "1"
input_reset_btn = "1"
input_down_axis = "+1"
input_r_btn = "7"
input_save_state_btn = "7"
input_right_axis = "+0"
input_state_slot_increase_axis = "+0"
input_x_btn = "3"
input_menu_toggle_btn = "3"
input_select_btn = "10"
input_enable_hotkey_btn = "10"
input_y_btn = "4"
input_left_axis = "-0"
input_state_slot_decrease_axis = "-0"
```

* **SNES30**
``` ini 
input_device = "8Bitdo SNES30 GamePad"
input_driver = "udev"
input_start_btn = "11"
input_exit_emulator_btn = "11"
input_up_axis = "-1"
input_a_btn = "0"
input_b_btn = "1"
input_reset_btn = "1"
input_down_axis = "+1"
input_r_btn = "7"
input_right_axis = "+0"
input_state_slot_increase_axis = "+0"
input_x_btn = "3"
input_menu_toggle_btn = "3"
input_select_btn = "10"
input_enable_hotkey_btn = "10"
input_y_btn = "4"
input_left_axis = "-0"
input_state_slot_decrease_axis = "-0"
input_l2_btn = "17"
input_load_state_btn = "6"
input_save_state_btn = "7"
```

## Video Guide



## Firmware Versions for 8BitDo controllers

 8BitDo have an update application that performs the firmware update on the supported controllers. The updater runs on Windows and macOS only and will connect via an USB connected controller to perform the update.

 Firmware for 8BitDo controller has been added to the [fwupdmgr](https://github.com/fwupd/fwupd) Linux utility using the _ebitdo_ plugin, but since 8BitDo have stopped publishing the firmware files sometimes around 2021, the best option to update the firmware on a controller is using the utility provided by 8BitDo.

## Troubleshooting

* Please make sure to update the firmware to the latest version before raising the issue in the [RetroPie Forums](https://retropie.org.uk/forum).
* Try choosing a different 'mode' when pairing a 8BitDo controller if the controller doesn't work in EmulationStation. Most controllers allow starting with a differnt mode:
   - X-Input mode (recommended) by pressing _Start_ and _X_ buttons
   - D-Input mode by pressing _Start_ and _B_
   - Nintendo Switch mode by pressing _Start_ and _Y_
   - macOS mode by pressing _Start_ and _A_.

  The start-up button combination may vary by controller, so consult the manual from the support site to get the connect options available for your controller.

## External Links

* <http://support.8BitDo.com> - the 8BitDo support site.
* <https://github.com/libretro/retroarch-joypad-autoconfig/tree/master/udev> - RetroArch configuration profiles for various 8BitDo controllers.
* <https://ladis.cloud/blog/posts/firmware-update-8bitdo.html> - updating the firmware using _fwupdtool/fwupdmgr_.

---

## File: docs/Add-a-New-System-in-EmulationStation.md

This tutorial is intended for those who wish to add a new system in EmulationStation. For example if you are looking to create a system for favourite games across different platforms or a separate system for roms hacks.

If you are looking to create a favourites lists **within** a system, then you may wish to consider the [child-friendly version of EmulationStation](Child-friendly-EmulationStation) which has this feature.

Before you begin, it is recommended that you back up your image, at least making a copy of the `/opt/retropie/configs` folder.

### Step 1. Edit es_systems.cfg

Each system in EmulationStation is defined in the file `es_systems.cfg`. The default version resides in the `/etc/emulationstation` folder. It is recommended that you make a copy of this file into the `/opt/retropie/configs/all/emulationstation` folder. The default version will be overwritten whenever you make updates to your RetroPie system so any manual changes such as a new system will be lost. Remember if you do make any updates to RetroPie then you should add any updates to `/etc/emulationstation/es_systems.cfg` to the custom version in the `/opt/retropie/configs/all/emulationstation` folder.

You can create a custom copy with the following command:

	sudo cp /etc/emulationstation/es_systems.cfg /opt/retropie/configs/all/emulationstation/es_systems.cfg

To appreciate how this process works, it is worth becoming familiar with the contents of the `es_systems.cfg` file. Each system will have an entry like the example for NES below.

    <system>
        <name>nes</name>
        <fullname>Nintendo Entertainment System</fullname>
        /home/pi/RetroPie/roms/nes
        <extension>.nes .zip .NES .ZIP</extension>
        <command>/opt/retropie/supplementary/runcommand/runcommand.sh 0 _SYS_ nes %ROM%</command>
        nes
        nes
    </system>


To add a new system to EmulationStation, you will need to create a new entry beginning with a `<system>` tag and ending with a `</system>` tag in `/opt/retropie/configs/all/emulationstation/es_systems.cfg`. Before you make any changes, you should exit EmulationStation first by pressing F4 on a keyboard or using the Quit EmulationStation option in the start menu.

The simplest way of adding a new system in your custom `es_systems.cfg` file is to open it in a text editor, copy an existing system and replace the contents of each tag.

`<name>`

This is the short name used by ES internally as well as the text used in the EmulationStation UI unless replaced by an image or logo in the theme. It is advised to choose something short and descriptive, e.g. favourites, hacks.

`<fullname>`

This is the long name used in menus. This tag is optional so it may be best to omit it unless you are not using a theme for the new section.

``

This is the folder where the roms in your new system will be located. This folder, e.g. `/home/pi/RetroPie/roms/favorites`, may need to be created if it does not already exist. Multiple paths are not currently permitted.

`<extension> and <command>`

These define the list of extensions that EmulationStation will look for in the rom folder defined in `` and the shell command executed when a game is selected.

Roms can be launched using shell scripts or the runcommand script. Both methods are involved so it is your choice how you wish to proceed. The entries for these tags are covered [below](Add-a-New-System-in-EmulationStation#step-31-launch-roms-with-the-runcommand-script) so check the steps required if you are unsure which is best for you.

``

This information is used for scraping. This tag is optional so it may be best to  omit it. If you intend to use multiple emulators, for a favourites section for instance, then you can use existing gamelists to manually create a new gamelist. If you are creating a section for mods or hacks, then it's unlikely you'll be able scrape metadata.

``

This is the theme EmulationStation loads from the current theme set. You can use an existing theme, e.g. `nes`, or you can create a new one. If you do the latter, then it may be an idea to make it the same as the `<name>` tag.

Here is an example entry for a section for rom hacks in a custom `es_systems.cfg` file that will run on a number of emulators, Atari 2600, NES, Megadrive, and SNES.

```
<system>
	<name>hacks</name>
	~/RetroPie/roms/hacks
	<extension>.bin .gen .int .nes .rom .smc .BIN .GEN .INT .NES .ROM .SMC</extension>
	<command>/opt/retropie/supplementary/runcommand/runcommand.sh 0 _SYS_ hacks %ROM%</command>
	hacks
</system>
```
Once you have completed your entry for the new system, then save your custom `es_system.cfg` file and place your roms in the folder specified in the `` tag.

**Tip** If you are creating a favourites section where you have roms in two folders, then, to save space, you can use symbolic links. For example, if you wish to have Contra available in the NES system and a new Favorites section, then you can create a symbolic link with the command:

	ln -s /home/pi/RetroPie/roms/nes/Contra.nes /home/pi/RetroPie/roms/favorites/Contra.nes

Contra will now appear in the favorites section and launch as normal once you've completed tutorial.

When you restart EmulationStation, the new system will be added together with your roms. (See below for [troubleshooting](Add-a-New-System-in-EmulationStation#troubleshooting))

### Step 2. Create a Theme for the New System

If you are not using an existing theme for your system and have not created a theme for your new system, then once you have restarted EmulationStation, the new system will appear like this.



If your system appears as above, then a theme needs to be defined for the new system. It is recommended that you copy your current theme from `/etc/emulationstation/themes` to the `/opt/retropie/configs/all/emulationstation/themes` folder for the similar reasons why the `es_systems.cfg` file was copied. It's a good idea to rename the copied folder, e.g. `carbon-custom`, so that the default and customised themes can be differentiated in the EmulationStation UI.

In the hacks example above, EmulationStation looks for a theme in the `hacks` folder of the current theme as defined in the `` tag in your custom `es_systems.cfg` file. The simplest way to do this is to copy an existing folder in the themes folder and rename it to `hacks`. You can then add or replace images or logos to the `art` folder and edit the `theme.xml` file to incorporate them.

Here is the Hacks system using the Carbon theme where only a new vector logo has been added.



You can find more information on creating themes and images or logos at the following at [Creating Your Own Emulation Theme](Creating-Your-Own-EmulationStation-Theme).

### Step 3.1. Launch roms with the Runcommand script
*This is recommended for console games, especially those that use libretro emulators such as those for NES, SNES, Megadrive/Genesis.*

For the `<command>` tag in your custom `es_systems.cfg` file, the simplest thing to do is change the line in an existing system, for example `nes`, to the new one, e.g. `hacks`, as below:

    <command>/opt/retropie/supplementary/runcommand/runcommand.sh 0 _SYS_ hacks %ROM%</command>

The `<command>` tag tells the runcommand script to look for a `emulators.cfg` file in the `hacks` folder in  `/opt/retropie/configs` for launch commands. The `hacks` folder does not exist by default so will need to be created as well as the `emulators.cfg` file in that folder. The simplest way to do this is to copy an existing folder in `/opt/retropie/configs/` and rename it.

For example, to launch the NES rom hack [Mario Adventure](http://www.romhacking.net/hacks/70), make a copy of the `nes` folder in `/opt/retropie/configs` and rename it `hacks`. The folder will already include an `emulators.cfg` file with appropriate commands to launch NES roms.

In your custom `es_systems.cfg` file, the `<extension>` tag should read:

		<extension>.nes .NES</extension>

Update your custom `es_systems.cfg` file and restart EmulationStation. It will now be possible to launch Mario Adventure from your newly created Hacks system in EmulationStation.

Say that you now want to add the SNES rom hack [Super Metroid: Redesign](http://www.romhacking.net/hacks/131/) to your hacks section. Open `/opt/retropie/configs/snes/emulators.cfg` and copy the line for the emulator you wish to use, eg lr-snes9x2010, into the `emulators.cfg` file in the `hacks` folder. This file will now read as follows:

	lr-fceumm = "/opt/retropie/emulators/retroarch/bin/retroarch -L /opt/retropie/libretrocores/lr-fceumm/fceumm_libretro.so --config /opt/retropie/configs/nes/retroarch.cfg %ROM%"
	default = "lr-fceumm"
	lr-snes9x2010 = "/opt/retropie/emulators/retroarch/bin/retroarch -L /opt/retropie/libretrocores/lr-snes9x2010/snes9x2010_libretro.so --config /opt/retropie/configs/snes/retroarch.cfg %ROM%"

Add .smc and .SMC (or any relevant extensions) to the `<extension>` tag in your custom `es_systems.cfg file `and restart EmulationStation.

To launch Super Metroid: Redesign from EmulationStation, you will need to bring up the [runcommand menu](Runcommand) by pressing any key on a keyboard or button 0 on your controller before the game begins. In the menu, choose the lr-snes9x2010 as the emulator for your rom and then launch.

This process can be repeated for more systems by adding launch commands to `emulators.cfg` and using the runcommand menu to select the appropriate emulator for each rom. Make sure to add the extensions for your roms to the `<extension>` entry in your custom `es_systems.cfg` file.

**Tip:** Before you begin editing files, it may be an idea to make a list of emulators you wish to use, find their launch commands and then add them to the `emulators.cfg` file in one go. You can do similar for the accepted extensions.

### Step 3.2. Launch roms with the shell scripts
*This is recommended for games that already launch from shell scripts such as ports.*

If you wish to launch your games using shell scripts, then the `<extension>` and `<command>` entries in your custom `es_systems.cfg` file can read:

	<extension>.sh .SH</extension>
	<command>%ROM%</command>


For each game, a shell script will need to be created in the roms folder as defined in the `` tag  in in your custom `es_systems.cfg` file.

Using the example from the [Doom Mods](Doom#to-launch-doom-mods-pwads) page, the shell script to launch the Batman Doom mod in pr-boom would be:

	#!/bin/bash
	/opt/retropie/supplementary/runcommand/runcommand.sh 0 "/opt/retropie/emulators/retroarch/bin/retroarch -L /opt/retropie/libretrocores/lr-prboom/prboom_libretro.so --config /opt/retropie/configs/ports/doom/retroarch.cfg /home/pi/RetroPie/roms/doom/batman/doom2.wad" "lr-prboom"

Note: please check the link above as there is more to do to get Batman Doom running than creating a shell script.

You can ensure the script is executable by running the command:

	sudo chmod +x "~/RetroPie/roms/hacks/Batman Doom.sh"

You can create individual shell scripts for each game in your new system. When you restart EmulationStation, the scripts should appear in your new system.

**Tip:** If you're not sure what the launch command for a system is, then check the `emulators.cfg` file for that system and copy the launch command replacing `%ROM%` with the full path and name of the rom.

### Troubleshooting

* After making changes to your custom `es_systems.cfg` file, if EmulationStation fails to load or your system does not appear then check the EmulationStation log at `/opt/retropie/configs/all/emulationstation/es_log.txt` for any errors.

* You can use an [online XML validator](https://www.xmlvalidation.com/) to check for errors in your custom `es_systems.cfg` file though this won't pick up on errors such as incorrect rom paths.

* After restarting EmulationStation, if your new system does not include the roms you were expecting, then check that the extensions are included in the `<extension>` tag in your custom `es_systems.cfg` file. Remember Linux is case-sensitive.

* If a rom doesn't run, then check the runcommand log at `/dev/shm/runcommand.log` for errors.

---

## File: docs/Adventure-Game-Studio.md

***



***
_[Adventure Game Studio](https://www.adventuregamestudio.co.uk/) is an open source development tool that is primarily used to create graphic adventure games._

***

| Emulator | Rom Folder | Extension | BIOS |  Controller Config |
| :---: | :---: | :---: | :---: | :---: |
| [AGS](https://github.com/adventuregamestudio/ags/tree/master/debian) | ags | .exe | none | mouse |



## ROMS
Accepted File Extensions: **.exe**

Place your AGS files in
```
/home/pi/RetroPie/roms/ags
```

## Troubleshooting
Ensure that you have RetroPie-Setup script version 4.3.8 or later before installing AGS, as several issues (such as content not appearing in EmulationStation and MIDI music playback) have been fixed.

## Video issues - window manager and graphics driver
More recent Retropie images have not included a desktop or window manager as part of the image (including many Xorg libraries).  It also does not automatically enable OpenGL drivers (which are still experimental).  In contrast, when installing the AGS package it relies on Xorg as it uses xinit for display and it also defaults to using an OpenGL graphics driver (at least the last time I installed AGS this was the case).  As a result the resolution was incorrect and performance was poor, both to the point where it was unusable.

In order to rectify this I followed these steps:
### Install Pixel desktop environment
After opening the Retropie setup script (either from the command line or via ES): Configuration / Tools -> Raspbian tools -> Install pixel desktop environment
### Modify AGS emulators.cfg file
Edit the contents of /opt/retropie/configs/ags/emulators.cfg to contain:
```
ags = "xinit /opt/retropie/emulators/ags/bin/ags --fullscreen --gfxdriver software --gfxfilter hqx 1 %ROM%"
default = "ags"
```

Note that the "--gfxfilter hqx 1" is not required and can be omitted if you prefer to have the non-filtered graphics.

I elected to change the driver AGS was using rather than enable the OpenGL driver in Retropie as it is still experimental and is known to still cause issues for other emulators.  I haven't actually tested AGS using the driver though so not sure if that works or not.

## Controls

AGS requires a mouse attached to the Raspberry Pi.

## Useful Links

* <https://github.com/adventuregamestudio/ags/>
* <https://en.wikipedia.org/wiki/Adventure_Game_Studio>
* <https://wiki.ubuntuusers.de/Adventure_Game_Studio/> (in German)

---

## File: docs/Amiga.md

***

***

_The Amiga was a family of personal computers released by Commodore in the 1980's and 1990's._

***

| Emulator | Rom Folder | Extension | BIOS |  Controller Config |
| :---: | :---: | :---: | :---: | :---: |
| [Amiberry](https://github.com/midwan/amiberry) | amiga  | .lha .zip .uae .adf .dms .fdi .ipf .hdf .hdz | kick33180.A500, kick34005.A500, kick40068.A1200 | /opt/retropie/configs/amiga/retroarch.cfg |
| [lr-puae](https://github.com/libretro/libretro-uae)/[lr-puae2021](https://github.com/libretro/libretro-uae/tree/2.6.1) | amiga | .zip .uae .adf .dms .fdi .ipf .hdf .hdz .m3u | kick34005.A500, kick40063.A600, kick40068.A1200 | /opt/retropie/configs/amiga/retroarch.cfg | | amiga | .zip .uae .adf .dms .fdi .ipf .hdf .hdz .m3u | kick34005.A500, kick40063.A600, kick40068.A1200 | /opt/retropie/configs/amiga/retroarch.cfg |
| [UAE4ALL2](https://github.com/RetroPie/uae4all2) | amiga  | .adf | kick12.rom, kick13.rom, kick20.rom, kick31.rom | Hardcoded |
| [UAE4ARM](https://github.com/Chips-fr/uae4arm-rpi/) | amiga  | .zip .adf .dms .exe .adz .rp9 | kick13.rom, kick20.rom, kick31.rom | Hardcoded |


## Emulators: [Amiberry](https://github.com/midwan/amiberry)

Amiberry is a fork of UAE4ARM with support for WHDLoad, which offers a better console-like experience.

Please refer to the official Amiberry wiki for [**a detailed step-by-step installation and config guide**](https://github.com/midwan/amiberry/wiki/Using-Amiberry-with-RetroPie---Installation-and-Setup).

### ROMS

For the optimal Amiberry experience, it is recommended that pre-installed WHDLoad packages are used. Amiberry has been designed to have compatibility with the 'Retroplay' WHDLoad packs. For more information on WHDLoad packages, see [here](https://github.com/midwan/amiberry/wiki/WHDLoad-Booter-(WHDBooter)-F.A.Q.#what-is-whdload-anyway).

Accepted File Extensions: **.lha**

 Place your WHDLoad packages in

```shell
/home/pi/RetroPie/roms/amiga/
```
More information on adding game data can be found [here](https://github.com/midwan/amiberry/wiki/Using-Amiberry-WHDBooter-with-RetroPie-(Step-3)).

### BIOS

Full documentation on the Kickstart ROMs required by Amiberry can be found [here](https://github.com/BlitterStudio/amiberry/wiki/Kickstart-ROMs-(BIOS)). Place the Kickstart ROMs in 

```shell
/home/pi/RetroPie/BIOS/amiga
```
### Controls

Amiberry makes use the RetroArch configs created during [Controller Configuration](Controller-Configuration). Consequently, **Hotkey+X** will bring up the UI and **Hotkey+Start** can be used to exit Amiberry. For full documentation, please refer [here](https://github.com/midwan/amiberry/wiki/RetroArch-Commands).

Default controller choice can be edited in `/opt/retropie/configs/amiga/amiberry/whdboot/hostprefs.conf`. It is also possible to set the default controller choice as well as other Amiberry settings for individual games. For full documentation, please refer [here](https://github.com/midwan/amiberry/wiki/WHDLoad-Auto-booting#game-specific-settings-improving-game-compatibility).

It is possible to customise controls for individual games using the Amiberry UI. For full documentation, please refer [here](https://github.com/midwan/amiberry/wiki/Customised-Controls).

## Emulator: [lr-puae](https://github.com/libretro/libretro-uae)/[lr-puae2021](https://github.com/libretro/libretro-uae/tree/2.6.1)

The `lr-puae` is libretro Amiga core based on [WinUAE](https://www.winuae.net). There are 2 versions available:

 * `lr-puae2021` (version 2.6.1) is recommended for low-power devices (Raspberry PI or other ARM based systems).
 * `lr-puae` (version 4.5.0) is a more accurate and performance demanding version, recommended for x86/PC systems.
  
  Both versions can be installed from the optional section of the [RetroPie-Setup Script](Updating-RetroPie#using-the-retropie-setup-script).

### BIOS

Place your desired Kickstart ROMs in:
```shell
/home/pi/RetroPie/BIOS/
```
To use disk and WHDLoad games with this core you'll need the following Kickstart ROMs. Rename them to the given name and copy the file in the BIOS folder.

It is critical to use Kickstarts with the right MD5, otherwise the core might not start.

Filename  |Description  |Amiga Forever name |System  |MD5 checksum
:---------|:------------|:------------------|:-------|:------------
kick33180.A500 | Kickstart v1.2 rev 33.180 (!)     | amiga-os-120.rom       | Amiga 500  |85ad74194e87c08904327de1a9443b7a
kick34005.A500 | Kickstart v1.3 rev 34.005         | amiga-os-130.rom       | Amiga 500  | 82a21c1890cae844b3df741f2762d48d
kick37175.A500 | Kickstart v2.04 rev 37.175        | amiga-os-204.rom       | Amiga 500+ | dc10d7bdd1b6f450773dfb558477c230
kick40063.A600 | Kickstart v3.1 rev 40.063         | amiga-os-310-a600.rom  | Amiga 600  | e40a5dfb3d017ba8779faba30cbd1c8e
kick40068.A1200| Kickstart v3.1 rev 40.068         | amiga-os-310-a1200.rom | Amiga 1200 | 646773759326fbac3b2311fd8c8793ee
kick40068.A4000| Kickstart v3.1 rev 40.068         | amiga-os-310-a4000.rom | Amiga 4000 | 9bdedde6a4f33555b4a270c8ca53297d
kick34005.CDTV | CDTV extended ROM v1.00           | amiga-os-130-cdtv-ext.rom | Amiga CDTV | 89da1838a24460e4b93f4f0c5d92d48d
kick40060.CD32 | CD32 Kickstart v3.1 rev 40.060    | N/A | Amiga CD32       | 5f8924d013dd57a89cf349f4cdedc6b1
kick40060.CD32.ext| CD32 extended ROM rev 40.060   | amiga-os-310-cd32.rom  | Amiga CD32 | bb72565701b1b6faece07d68ea5da639
kick40060.CD32 | CD32 KS + extended v3.1 rev 40.060| amiga-os-310-cd32.rom  | Amiga CD32 | f2f241bf094168cfb9e7805dc2856433

Note:
- The core has a built-in AROS fallback Kickstart, which is used when the real Kickstart is not found. It can be compatible enough for some A500 games.
- Kickstart v1.2 (1) is only needed for WHDLoad Arcadia games
- For CD32 emulation, either **kick40060.CD32**(CD32 KS + extended v3.1 rev 40.060) or both **kick40060.CD32**(CD32 Kickstart v3.1 rev 40.060) and **kick40060.CD32.ext**(CD32 extended ROM rev 40.060)

### Controls

PUAE uses Retroarch input configurations.

Add custom RetroArch controls to the `retroarch.cfg` file in
```shell
/opt/retropie/configs/amiga/retroarch.cfg
```
For more information on custom RetroArch controls see: [RetroArch Configuration](RetroArch-Configuration).

#### Default Controls

| RetroPad button | Action                        |
|:-----------------|:-------------------------------|
| D-Pad         | Move                |
| B             | Keypress            |
| A             | Toggle transparency |
| Y             | Toggle CapsLock     |
| Y (Long)      | Quick map button    |
| Y (Very long) | Quick clear button  |
| X             | Press Space         |
| Start         | Press Return        |
    
| Keyboard key.  | Action   |
| :------------- | :------- |
| F12            | Toggle statusbar |
| Right Control  | Switch between joystick/mouse  |

#### Virtual keyboard

The PUAE core has a virtual keyboard that can be accessed by default through RetroPad Select.    
The virtual keyboard can be controlled with:

* **RetroPad**

    | Button   | Action              |
    |----------|---------------------|
    | D-Pad    | Move                |
    | B        | Keypress            |
    | A        | Toggle transparency |
    | Y        | Toggle CapsLock     |
    | X        | Toggle position     |
    | Start    | Press Return        |

* **Keyboard**

    | Key      | Action              |
    |----------|---------------------|
    | Cursors  | Move                |
    | Enter    | Keypress            |
    | CapsLock | Toggle CapsLock     |

- **Mouse**
- **Touch screen**

The virtual keyboard has these additional actions:

- `J/M` = Switch between joystick/mouse
- `TRBF` = Toggle turbo fire
- `ASPR` = Toggle aspect ratio
- `STBR` = Toggle statusbar
- Reset (Red key with undo icon, soft reset = Ctrl-Amiga-Amiga)
- Mouse controls (Left+right button, up, down, left, right)
- Numpad key (Toggles numbers, arrows, Return etc. to numpad variants)

Long press for sticky keys. Stickying the third key will replace the second.

#### Joyport control

Some games use mouse instead of joystick. D-Pad can be switched between joystick and mouse control in several ways:

- Use the core option: `Quick Menu -> Options -> RetroPad Joystick/Mouse`
- Bring up the virtual keyboard with `Select` button, then press the key labeled `J/M`
- Press the default keyboard shortcut - `Right Control`
- Assign `Switch Joystick/Mouse` to any RetroPad button under `Quick Menu -> Options`

### Core configuration

The PUAE core has a comprehesive set of configuration options which control the emulation experience. A comprehensive list can be found [here](https://docs.libretro.com/library/puae/#core-options).

### Model selection

You can force a specific model if a game needs one (AGA games for instance) either by the "Model" core option or by file path tags.

The "Model" core option at "**Automatic**" will default to A500 when booting floppy disks, A600 when booting hard drives, and CD32 when booting CD images.

The whole path (filename and directory) will be searched for the following tags if the model is "**Automatic**":

| Floppy | HD/LHA | CD    | String/Tag                                  | Result                                       |
|--------|--------|-------|---------------------------------------------|----------------------------------------------|
| **x**  | **x**  |       | **(A500OG)**, **(512K)**                    | Amiga 500 (0.5MB Chip RAM)                   |
| **x**  | **x**  |       | **(A500)**, **OCS**                         | Amiga 500 (0.5MB Chip RAM + 0.5MB Slow RAM)  |
| **x**  | **x**  |       | **(A500+)**, **(A500PLUS)**                 | Amiga 500+ (1MB Chip RAM)                    |
| **x**  | **x**  |       | **(A600)**, **ECS**                         | Amiga 600 (2MB Chip RAM + 8MB Fast RAM)      |
| **x**  | **x**  |       | **(A1200OG)**, **(A1200NF)**                | Amiga 1200 (2MB Chip RAM)                    |
| **x**  | **x**  |       | **(A1200)**, **AGA**, **CD32**, **AmigaCD** | Amiga 1200 (2MB Chip RAM + 8MB Fast RAM)     |
| **x**  | **x**  |       | **(A4030)**, **(030)**                      | Amiga 4000/030 (2MB Chip RAM + 8MB Fast RAM) |
| **x**  | **x**  |       | **(A4040)**, **(040)**                      | Amiga 4000/040 (2MB Chip RAM + 8MB Fast RAM) |
|        |        | **x** | **CDTV**                                    | Amiga CDTV (1MB Chip RAM)                    |
|        |        | **x** | **(CD32)**, **(CD32NF)**                    | Amiga CD32 (2MB Chip RAM)                    |
|        |        | **x** | **(CD32FR)**, **FastRAM**                   | Amiga CD32 (2MB Chip RAM + 8MB Fast RAM)     |
| **x**  | **x**  | **x** | **NTSC**, **(USA)**                         | NTSC 60Hz                                    |
| **x**  | **x**  | **x** | **PAL**, **(Europe)** (!)                   | PAL 50Hz                                     |
| **x**  |        |       | **(MD)** (!!)                               | Insert each disk in different drives         |
| **x**  | **x**  | **x** | **(CE)**                                    | Force CPU Cycle-exact                        |

- (!) Additional tags: **(Denmark)**, **(Finland)**, **(France)**, **(Germany)**, **(Italy)**, **(Spain)**, **(Sweden)**
- (!!) **Maximum 4 disks**

Example: When launching "Alien Breed 2 AGA.hdf" or "AGA/Alien Breed 2.hdf" the model will be Amiga 1200.


### ROMS

Place your Amiga ROMs and configuration files in 
```
/home/pi/RetroPie/roms/amiga
```

Content that can be loaded by `lr-puae` has the following file extensions:

**Floppy images**

- .adf
- .adz
- .dms
- .fdi
- .ipf

**Hard drives**

- .hdf
- .hdz
- directory

**WHDLoad**

- .lha
- .slave
- .info

**Compact discs**

- .cue
- .ccd
- .nrg
- .mds
- .iso

**Other**

- .uae
- .m3u
- .zip

One thing that Amiga enthusiasts seem to point out repeatedly is that although you may be able to expand an `.lha` file on Windows, you often shouldn't; the Amiga operating system and Windows don't always agree on paths and special characters, with the result that you can corrupt the file when unzipping it.

#### Disk images
You can pass a disk or hdd image (WHDLoad) as a rom.

Supported formats are :

- `.adf`, `.adz`, `.dms`, `.fdi`, `.ipf` for disk images.
- `.hdf`, `.hdz`, `.lha` for hdd images.
- `.cue`, `.iso`, `.ccd`, `.nrg`, `.mds` for compact disc images

When passing a disk image, a hdd image or a M3U file as parameter, the core will generate a temporary `puae_libretro.uae` configuration file in RetroArch `saves` directory (the `amiga` rom folder) and use it to automatically launch the game.

#### M3U Support
When you have a multi disk game, you can use an `.m3u` file to specify each disk of the game and change them from the RetroArch Disc Control interface.

An M3U file is a simple text file with one disk per line (see [Wiki](https://en.wikipedia.org/wiki/M3U)).

An example M3U file: 

_Simpsons, The - Bart vs. The Space Mutants.m3u_

containing

```
Simpsons, The - Bart vs. The Space Mutants_Disk1.adf
Simpsons, The - Bart vs. The Space Mutants_Disk2.adf
```

Path in the M3U file can be absolute or relative to the location of the M3U file.

When a game asks for it, you can change the current disk in the RetroArch **Disc Control** menu:

 * Eject the current disk with _Eject Disc_
 * Select the right disk index with _Current Disc Index_
 * Insert the new disk with _Insert Disc_

For games that support multiple disk drives, append "**(MD)**" (as in "MultiDrive") to the M3U filename to insert each disk in different drives, up to a maximum of 4 disks.

For games that require a dedicated save disk, one may be generated automatically by entering the following line in an M3U file: `#SAVEDISK:VolumeName`. `VolumeName` is optional and may be omitted. For example, this will create a blank, unlabelled disk image at disk index 5:

`Secret of Monkey Island.m3u`

```
Secret of Monkey Island_Disk 1.adf
Secret of Monkey Island_Disk 2.adf
Secret of Monkey Island_Disk 3.adf
Secret of Monkey Island_Disk 4.adf
#SAVEDISK:
```

By default, RetroArch will display the filename (without extension) of each M3U entry when selecting a disk via the Current Disc Index drop-down menu. Custom display labels may be set for each disk using the following syntax in the `.m3u` playlist file: `DISK_FILE|DISK_LABEL`. 

For example:

M3U Playlist | Retroarch Disc control drop-down
------------ | ---------------------------------
`Valhalla & the Fortress of Eve_Disk1.adf|Game Disk` | `1: Game Disk`
`Valhalla & the Fortress of Eve_Disk2.adf|Data Disk` | `2: Data Disk`
`Valhalla & the Fortress of Eve_Disk3.adf|Level 1 Disk` | `3:Level 1 Disk`
`Valhalla & the Fortress of Eve_Disk4.adf|Level 2 Disk` | `4:Level 2 Diskisk`
`Valhalla & the Fortress of Eve_Disk5.adf|Level 3 Disk` | `5:Level 3 Diskisk`
`Valhalla & the Fortress of Eve_Disk6.adf|Level 4 Disk` | `6:Level 4 Diskisk`

#### WHDLoad Disc Images
Pre-installed WHDLoad LHA archives can be launched directly, there is no need for any kind of manual preparing and downloading.

* WHDLoad helper files (Directory or HDF) will be generated to the save folder (ROM folder), `WHDLoad.prefs` will be generated to the `BIOS` folder.
* `WHDLoad.prefs` & `WHDLoad.key` will be copied from the `BIOS` (system) folder to the helper image
* Kickstarts will be copied automatically to the helper image
* To update `WHDLoad:` simply delete the directory or the HDF file

#### Zip Archives Support

ZIP archives will be extracted to a temporary directory in saves, bypassing the default frontend extraction.The temporary directory will be removed on exit.

This allows:

* Automatic M3U playlist generation of all floppy disks
* The use of zipped images in M3Us
* Hard drive and CD images will be treated one by one and only the first file found is selected for launch
* If no disk/drive images are found, the ZIP will be treated as a directory

#### IPF Support

IPF support is done through the CAPSIMG library. To enable it, you have to put the dynamic library called `capsimg.so` (Linux) in RetroArch system directory (`/home/pi/RetroPie/BIOS`).

Compatible CAPSIMG libraries for Windows, macOS and Linux can be found at http://www.softpres.org/download and https://fs-uae.net/download#plugins.

If you cannot find CAPSIMG library for your CPU architecture, you can always build `capsimg.so` from the source which is available at https://github.com/FrodeSolheim/capsimg.

```bash
git clone https://github.com/FrodeSolheim/capsimg
cd capsimg
./bootstrap
./configure
make
cp capsimg.so ~/RetroPie/BIOS
```

### Floppy drive sounds

The core has embedded internal floppy drive samples. External sound samples have to be copied from https://github.com/libretro/libretro-uae/tree/master/sources/uae_data into a directory named `uae_data` or `uae` in RetroArch system directory (`/home/pi/RetroPie/BIOS`).

### Resolution and rendering
The following core options control the output resolution of the core (defaults are **bolded**):

| Name                 | Values                                  |
|----------------------|-----------------------------------------|
| Video Standard       | **PAL 50Hz**, NTSC 60Hz                 |
| Video Resolution     | **Automatic**, Low, High, Super-High    |
| Video Line Mode      | **Automatic**, Single Line, Double Line |
| Aspect Ratio         | **Automatic**, PAL, NTSC                |

With these settings all the standard resolutions are available:

| PAL 50Hz Resolution  | Description            |
|----------------------|------------------------|
| 360x288              | Lores                  |
| 720x288              | Hires Single Line      |
| 720x576              | Hires Double Line      |
| 1440x288             | SuperHires Single Line |
| 1440x576             | SuperHires Double Line |

| NTSC 60Hz Resolution | Description            |
|----------------------|------------------------|
| 360x240              | Lores                  |
| 720x240              | Hires Single Line      |
| 720x480              | Hires Double Line      |
| 1440x240             | SuperHires Single Line |
| 1440x480             | SuperHires Double Line |

When using low resolution mode, rendering will be halved horizontally and forced into "**Single Line**" mode. 
Scaling shaders looks great, but high resolution games and Workbench are badly rendered.

When using high resolution "**Double Line**" mode, rendering will be doubled vertically. 
It is compatible with high resolution games and Workbench, but scaling shaders will look ugly. 
"**Double Line**" shows interlaced fields separately (weave) and is suited for de-interlacing shaders.

When using high resolution "**Single Line**" mode, rendering is presented as is. 
It delivers the best of both worlds, and looks great with high resolution games, Workbench and shaders. 
"**Single Line**" combines interlaced fields into one field (bob), which will make high resolution images blocky and jittery.

- Automatic "Resolution" defaults to "**Hires**" and selects "**SuperHires**" when needed (practically only in Workbench and Super Skidmarks)
- Automatic "Line Mode" defaults to "**Single Line**" and selects "**Double Line**" on interlaced screens


## Emulators: [UAE4ALL2](https://github.com/RetroPie/uae4all2), [UAE4ARM](https://github.com/Chips-fr/uae4arm-rpi/)

UAE4ALL2 is no longer developed and we recommend using UAE4ARM on the Raspberry Pi.

### ROMS
Accepted File Extensions: **.adf**

UAE4Arm also supports: **.dms .exe .rp9** and compressed formats **.zip .adz**

 Place your Amiga disks images in

```shell
/home/pi/RetroPie/roms/amiga/
```

### BIOS
The emulator comes with a free AROS rom that will work for running many games and demos. 

If you want to use a kickstart 1.3, 2.0, 3.1 rom place your **kick13.rom, kick20.rom, kick31.rom** files in 


```shell
/home/pi/RetroPie/BIOS/
```

|Name |Description |md5          |CRC32       |Comment |
| :--- | :--- | :--- | :--- | :--- |
|kick13.rom|KS ROM v1.3 (A500,A1000,A2000) rev 34.5 (256k)|82a21c1890cae844b3df741f2762d48d|c4f0f55f||
|kick20.rom|KS ROM v2.04 (A500+) rev 37.175 (512k)|dc10d7bdd1b6f450773dfb558477c230|c3bdb240||
|kick31.rom|KS ROM v1.3 (A1200) rev 40.68 (512k)|646773759326fbac3b2311fd8c8793ee|1483a091||


### Controls
These are hardcoded currently. This initial mapping was chosen as it's somewhat similar to MAME, and should mostly work on any controllers that use that input mapping (such as the picade). Joypad/Joystick is currently untested.

in game:
```
lctrl      - joy 1/mouse 1 (button X in gui)
lalt       - joy 2/mouse 2 (button Y in gui)
lshift     - joy 1 autofire (button A in gui)
z          - mouse 1  (button B in gui)

5          - switch input between mouse/joystick

arrow keys - up / down / left / right

F12 (UAE4ARM) and/or [CTRL]+[ESC] (UAE4ALL) - Open emulator menu
```

Launch it from Emulation Station, and you get the GUI where you can configure disks/roms/memory and insert adf images into the virtual floppy disk drives.

### Video Tutorial

[](http://www.youtube.com/watch?v=dleumwWZp6Q)

### Launching games directly from EmulationStation

#### Script for creating configuration files 

Here you will find a script, and the necessary configuration files according to different version of UAE4arm, for creating game configuration file:

http://www.retropie-italia.it/viewtopic.php?f=10&t=16 

On EmulationStation, AMIGA, open "+Start UAE4Arm" and save a profile with random name then open the file and check the number in the parameter "config_version". Download the correct configuration file from previous link then rename it in "config.uae" and copy it, together with "AGCC.sh" (also download this from previous link), on Raspberry Pi. AGCC.sh uses the "config.uae" file in order to create games configuration and (if you want) you can edit it. For default behavior emulator is searching for kickstart 2.04 in

``/home/pi/RetroPie/roms/amiga/``

renamed in "kick20.rom", so you have to rename your kickstart or edit "config.uae".

Also follow these steps:

``sudo nano /etc/emulationstation/es_systems.cfg``

and edit the tag <extension> for "amiga" emulator in this way:

``<extension>.sh .uae .SH .UAE</extension>``

Then
``sudo nano /opt/retropie/configs/amiga/emulators.cfg``

and edit the line in this way:

``uae4arm = "pushd /opt/retropie/emulators/uae4arm/; ./uae4arm -f %ROM%"``

Point attention to the floppy image extension (case-insensitive):  .adf, .adz, .dms, .ipf, .zip

For game with multiple disks rename them in this way: 

Game bla bla bla (Disk 1 of N).adf  
Game bla bla bla (Disk 2 of N).adf  
...  
Game bla bla bla (Disk N of N).adf

in other words change ONLY the floppy identifier.  

Note: The old script from Mark Dunning has a problem with games with more than 9 floppies (creates others wrong config files) and creates a config file with name like "Game bla bla bla (Disk 1 of N).uae". This new app create only 1 file for a multiple disk game with the exact name of the game, "Game bla bla bla.uae"

#### Other solution

Alternatively, a native BASH script to perform the same steps directly on the RetroPie machine can be found here:
https://github.com/Douggernaut/RetroPieAssistant/tree/master/Amiga

## Tips and troubleshooting

- Stuttering? Amiga systems/games are PAL (50Hz), but modern TVs typically default to a 60Hz mode when connected to a Raspberry Pi. Enter the RunCommand menu for your Amiga emulator, and select a valid mode that uses a 50Hz refresh rate in order to match the original PAL rate, and thus, eliminate stuttering.

- Some games work better with the '512Kb Chip' + '512Kb Slow' memory configuration rather than the default A500 '1MB Chip'. If your game crashes or fails to load, change the memory settings in the 'CPU RAM' tab of the UAE4ALL2 GUI.

- Some games do not work properly if more than one floppy drive is in use. If your game crashes or fails to load try to use just DF0 (change disc image during game if required) and not use DF1, DF2 and DF3.

- For Raspberry Pi 1 users - make sure you overclock your device. Amiga emulation works much faster when overclocked to maximum. Without overclocking some games do not run at full speed.

---

## File: docs/Amstrad-CPC.md

***


***
_The Amstrad CPC (short for Colour Personal Computer) is a series of 8-bit home computers produced by Amstrad between 1984 and 1990._
***

| Emulator | Rom Folder | Extension | BIOS |  Controller Config |
| :---: | :---: | :---: | :---: | :---: |
| [lr-caprice32](https://github.com/libretro/libretro-cap32.git), [CapriceRPI](https://github.com/KaosOverride/CapriceRPI.git) | amstradcpc  | .cdt .cpc .cpr .dsk .m3u .tap .zip | none | /opt/retropie/configs/armstradcpc/retroarch.cfg |

## Emulators: [CapriceRPI](https://github.com/KaosOverride/CapriceRPI.git), [lr-caprice32](https://github.com/libretro/libretro-cap32.git)

## ROMS

Accepted File Extensions: **.cdt .cpc .cpr .dsk .m3u .tap .zip**

Place your Amstrad CPC ROMs in:
```
/home/pi/RetroPie/roms/amstradcpc
```

Caprice32 supports M3U type playlists (`.m3u`) for multi-disc games. This makes it easy to switch between discs when needed using the RetroArch's _Disk Control_ interface. Additionally, the `SELECT + L` and `SELECT + R` gameoad combinations can be used to load the previous or next disc in the `.m3u` playlist.

## Joystick Controls Setup
As usual for a "classic" computer, a keyboard is needed for optimum input control. Flight simulators or complex building simulations require a variety of key combinations. For further input we need a connected (real) keyboard or a **Virtual Keyboard**. This can be called with the **START+Y-Button** of your PAD in lr-caprice32 (older versions < 4.5 make use of Y-Button only)

When we talk about joysticks, these are directly interpreted as cursor inputs by the CPC. The fire button is displayed as `X`. So if you press right HAT button a right arrow will be printed. So you see the CPC interprets the joysticks input as ASCII code, very unsimilar to the Atari 2600 or C64. But the devices use all a D-SUB-9 connector and theoretically even a Megadrive/Genesis PAD could be connected to this machines (afaik Start or Select button bridges 5V and Ground -- risk of a short circuit with possible damage to original hardware). 

### JoyPad setup for lr-caprice32
By default the `RetroPad` is selected as controller input, we have to select `Amstrad Joystick` to make the Virtual Keyboard work. Enter the retroarch core by using `SELECT + Y` on your pad, now use *Retroarch -> Quickmenu -> Controls -> User [1-4] Select Device Type Amstrad Joystick* and save the input mapping.

Now you can launch the **Virtual Keyboard** to configurate any game. If the overlay window seems to stuck then press Select-Button on your pad to activate it and move its white cursor with the HATs. A-Button selects the character.

### JoyPad setup for CapriceRPI
Default keys:

* Analog1 / HATs is cursor control
* Y-Button brings up the Virtual Keyboard
* X-Button brings up configuration menu (with possibitly for save state)
* B-Button is FIRE (lr-caprice uses A-Button)
* A-Button is character `Z`

## CapriceRPI

If you are open into a ROM from EmulationStation and it opens to a blue screen you can type
```
CAT
```
and it will list the file names of your game. The you will type `RUN"FILENAME` (match the lettercase exactly)

e.g. `CAT` results:
```
CABAL     .BI1
CABAL     .BI2
CABAL     .BIN
CABAL     .LV1
```
Then I type:
```
RUN"CABAL
```
If your keyboard types `@` when you try to type `"`, then the Pi may be configured for the _English (UK)_ keyboard layout, in which case you can type `"` by trying to type `@`.

**QUICK START CONTROLS**

* F5: reset
* F6: exit

Keyboard controls will vary by game.

## lr-caprice32

lr-caprice32 utilises Retroarch configurations

Add custom retroarch controls to the retroarch.cfg file in
```shell
/opt/retropie/configs/amstradcpc/retroarch.cfg
```
For more information on custom RetroArch controls see: [RetroArch Configuration](RetroArch-Configuration)

## Links of interest / References
[[Solved] Amstrad CPC - Virtual Keyboard? lr-caprice32](https://retropie.org.uk/forum/topic/21885)\
[How to remap Keyboard chars to specific Joypad buttons](https://retropie.org.uk/forum/topic/20708)

---

## File: docs/Apple-II.md

***

***
_The Apple II was a series of personal computers starting from 1977 to 1993._
***

| Emulator | Rom Folder | Extension | BIOS |  Controller Config |
| :---: | :---: | :---: | :---: | :---: |
| [Linapple](http://sourceforge.net/projects/linapple/) | apple2  | .dsk | none | /opt/retropie/configs/apple2/linapple.conf |

## Emulator: [Linapple](http://sourceforge.net/projects/linapple/)

## ROMS
Accepted File Extensions: **.dsk .nib .zip .DSK .NIB .ZIP**

Place your Apple II disk image files in
```shell
/home/pi/RetroPie/roms/apple2/
```
## Controls
Upon boot, press F1 to get an overview of the controls, they will vary by game. As the Apple II was a personal computer it would only make sense that you would be using a keyboard and mouse.

```shell
F1 - Show help screen
F2 - Cold reset
Shift+F2 - Reload conf file and restart
F3, F4 - Choose an image file name for floppy disk in Slot 6 drive 1 or 2 respectively
Shift+F3, Shift+F4 - The same thing for Apple hard disks (in Slot 7)
Alt+F3,Alt+F4 - same as F3,F4 using FTP (see linapple.conf about configuring FTP accounts)
Alt+Shift+F3, Alt+Shift+F4 - same as Shift+F3, Shift+F4 but using FTP account (see above)
F5 - Swap drives for Slot 6
F6 - Toggle fullscreen mode
F7 - Reserved for Debugger!
F8 - Save current screen as a .bmp file
Shift+F8 - Save settings changeable in runtime in conf file     
F9 - Cycle through various video modes
F10 - Quit emulator
F11 - Save current state to file, Alt+F11 - quick save
F12 - Reload it from file, Alt+F12 - quick load
Ctrl+0..9 - fast load state snapshot with corresponding number, saved previously by
Ctrl+Shift+0..9 - fast save snapshot to current snapshot directory with corresponding number 0..9
Ctrl+F12 - Hot reset
Pause - Pause emulator
Scroll Lock - Toggle full speed

Num pad keys:
Grey + - Speed up emulator
Grey - - Speed it down
Grey * - Normal speed
```

**Getting Started**

* Press F3 to choose your disk drive and navigate to where you placed your disk images in the apple2 roms folder.

* Select your game by pressing Enter and then press F2 to reboot into the game you just selected, now you should be inside your game. Most games will have a splash screen with controls specific to that game. 

* To exit back to Emulationstation press F10. 

## Running Disks From EmulationStation

[http://blog.petrockblock.com/forums/topic/how-to-get-linapple-disk-images-running-from-emulation-station-in-retropie/](http://blog.petrockblock.com/forums/topic/how-to-get-linapple-disk-images-running-from-emulation-station-in-retropie/)

---

## File: docs/Arcade.md

# Getting started with arcade emulation

/// note | Foreword
Arcade emulation requires a different approach than console emulation.     
**Please** read this entire page before beginning your RetroPie arcade emulation project.
///

## Overview

RetroPie comes with multiple arcade emulators and each emulator requires a specific romset to work.

Each emulator is optimised for different hardware and different games so read the following sections to know which emulator to use and subsequently which romset is required for that emulator.

## Step 1: Choose your arcade emulator(s)

RetroPie's arcade emulators come in two main flavors: [MAME](MAME) and [FinalBurn](FinalBurn-Neo).

 * [MAME](MAME) is the most well-known and works with thousands of games, its focus is preservation. 
 * [FinalBurn](FinalBurn-Neo) focuses on 2D systems and playability, it includes support for features that have no place in a preservation-focused emulator (netplay, runahead, retroachievements, ...)

RetroPie includes multiple versions of both MAME and FinalBurn. Older versions usually require less processing power, but newer versions support more games and feature more accurate emulation.

Use this table as a guide when choosing an emulator version:

| Raspberry Pi version | Recommended MAME Emulator | Recommended FB Emulator |
| :---: | :---: | :---: |
|2, 3 or 4| `lr-mame2003` | `lr-fbneo`|
|1 or Zero| `mame4all` | `pi-fba`|

Learn about other available versions on the pages about [MAME](MAME) and [FinalBurn Neo](FinalBurn-Neo).

/// abstract | Other arcade emulators
For certain arcade systems that are not supported by neither MAME nor FinalBurn, there are dedicated emulators available in RetroPie:

 * [Supermodel](Supermodel) - a Sega Model 3 emulator, supporting about 27 games. The list of supported games is at <https://www.supermodel3.com/About.html>.
 * [Flycast](Dreamcast) - a Dreamcast emulator that plays the NAOMI and Sammy Atomiswave arcade games.

///

## Step 2: Select the right ROM set

ROMS are not included with RetroPie. Copyright law varies by country and is up to the user to determine legality.

In general, you will only get good results with a full set of ROMs. Incomplete ROM sets (i.e. smaller collections of individual ROMs) are unlikely to work well. This is because certain roms (known as child roms) are dependent on files in other ROMs (known as parent ROMs) for example Pacman is actually an american clone (child) of the original japanese game Puckman (Parent). Without both files, most games will immediately exit.

There are a number of different rom set versions. Different versions contain different games (although there's plenty of overlap). This table tells you which rom set version you need for each emulator, and which games are in each set:

| Emulator | Required ROM Version | # of ROMs |
| :---: | :---: | :---: |
| [mame4all](MAME) | MAME 0.37b5 | 2270 |
| [lr-mame2003](MAME) | MAME 0.78 | 4720 |
| [pifba](FinalBurn-Neo#pifba) | FB Alpha v0.2.96.71 | 684 |
| [lr-fbneo](FinalBurn-Neo) | FB Neo v1.0.0.XX | 7030 |

To sum up, for best results:

* use a full ROM set;
* use the ROM set version that matches [the emulator you're using](#step-1-choose-your-arcade-emulators).

## Step 3: Transfer ROMs to Raspberry Pi

Follow the guide on Transferring ROMs [HERE](Transferring-Roms). 

Unlike some other system, arcade games should be zipped, if you extract them, they won't work.

You can place any of the rom sets in the `arcade` rom folder but you'll be required to pick the correct emulator for your rom set through the [runcommand menu](Runcommand). 

They can also be placed in their respective emulator rom folders, this information is included in the system pages: [MAME](MAME), [FBNeo](FinalBurn-Neo) 

## Further Reading

- [Arcade games and how to play them, A non-technical MAME and FBNeo (FBA) tutorial by rbaker](https://retropie.org.uk/forum/topic/7247/guide-arcade-games-and-how-to-play-them-a-non-technical-mame-fba-tutorial)
- [Instructions for how to set up FB Neo as a separate Neo Geo system, by thelostsoul](https://retropie.org.uk/forum/topic/19976/)
- RetroPie docs for [MAME](MAME) and [FB Neo](FinalBurn-Neo)
- [How to use MAME with RetroPie Help Guide by Floob](https://retropie.org.uk/forum/topic/2859/how-to-use-mame-with-retropie-help-guide)
- [Demystifying MAME ROMs Tutorial by ChoccyHobNob](https://web.archive.org/web/20161116054839/http://choccyhobnob.com/articles/demystifying-mame-roms/) (via archive.org)
- Advanced: [Validating, Rebuilding, and Filtering ROM Collections](Validating,-Rebuilding,-and-Filtering-ROM-Collections)