Erstellt: 28. März 2016 (zuletzt geändert: 26. März 2017)

RetroPie (V4.2): Controller einrichten

Raspberri Pi
RetroPie: Controller über RGUI einrichten

Wie im vorherigen Beitrag „RetroPie: EmulationStation 2 einrichten“ erwähnt, könnt ihr Controller sehr einfach über die EmulationStation für RetroArch konfigurieren. Aber spätestens, wenn ihr für Multiplayerspiele mehr als einen Controller benötigt, müsst ihr doch noch selbst tätig werden. Außerdem wird es euch evtl. interessieren, wie ihr über den Controller den Emulator beendet, eine Pause einlegt, das Menü öffnet oder Snapshots speichern und laden könnt.

Falls ihr eins der vorherigen Images installieren möchtet, findet ihr die archivierten Beiträge unter „RetroPie: Einrichtung für ältere Images“.


 

Die Ausgangsbasis ist das RetroPie-Image 4.2

 

Als nächstes wollen wir nun den Controller konfigurieren…
Möchtet ihr ein Pad per Bluetooth anschließen (z. B. den der Playstation 3, ein FC30– bzw. NES30-Pad oder eine WiiMote), dann richtet diesen bitte vorher unbedingt, wie unter „RetroPie: Bluetooth-Controller“ beschrieben, ein!

 

Joystick / Gamepad einrichten
Wollt ihr nur einen Controller, so wie meinen Speedlink Competition Pro USB, einrichten, dann habt ihr die Möglichkeit, dies über die EmulationStation machen.

Wie im vorherigen Beitrag bereits erwähnt, könnt ihr einen Controller jetzt direkt über die EmulationStation für Libretro / RetroArch einrichten. Seit dem Image 4.0 werden auch die Einstellungen für mupen64plus, pifba, pisnes und Reincast automatisch über die EmulationStation vorgenommen.

So löblich diese Möglichkeit auch ist, sie geht leider an der Praxis vorbei! Die Einrichtung müsste differenzierter und vorallem für mehrere Controller (Multiplayer) möglich sein. Daher rate ich aktuell weiterhin dazu, die Controller manuell einzurichten.

Ihr solltet trotzdem einmal diesen Weg gehen, öffnet also mit eurer Start-Taste das MAIN MENU.

Einen Controller einrichten.
Einen Controller einrichten.

Wählt CONFIGURE INPUT aus, bestätigt die Sicherheitsabfrage und haltet dann eine Taste am Controller gedrückt…
…und drückt die jeweils abgefragten Tasten.
Falls ihr eine Funktion nicht zuweisen wollt oder könnt, weil der Controller diese evtl. nicht zur Verfügung stellt, könnt ihr durchs Halten einer Taste für ca. 1 Sekunde den Punkt überspringen. Sollte die Tastatur bereits eingerichtet sein, könnt ihr mit den Cursor-Tasten auch einfach weiterblättern oder zur Korrektur zurückgehen.

Leider unterstützt euch diese Funktionen nur bei der Einrichtung für einen RetroArch Spieler!

 

Exkurs: Was ist denn das bereits mehrfach erwähnte „RetroArch“ schon wieder?
Meistens „rede“ ich hier nur von RetroPie und EmulationStation, aber die eigentliche Arbeit verrichtet zum größten Teil RetroArch oder um noch genauer zu sein Libretro. Unser Emulatorsystem ist hirachisch (von unten nach oben) wie folgt aufgebaut:

  1. Libretro: Dies stellt die unterste Ebene dar. Es ist eine in C/C++ geschriebene API, die die Schnittstelle zur vorliegenden Hardware herstellt. Dabei gibt es nicht nur die hier von uns verwendete Raspberry Pi Version, sondern auch Fassung für Android, iOS, Windows, XBox360, Wii, …
     
  2. Emulatoren / Apps: Angepasste Programme greifen auf Libretro zu und versorgen uns so mit sehr vielen Emulatoren.
     
  3. RetroArch: Dies setzt auf Libretro auf und ist dessen gängige grafische Bedienoberfläche. Hierüber können bequem Einstellungen für Libretro und die Apps vorgenommen werden. Ihr könnt diese Oberfläche auch am Pi aus den zu RetroArch gehörenden Emulatoren aufrufen.

    Die RetroArch-Oberfläche (RGUI)
    Die RetroArch-Oberfläche (RGUI)
  1. EmulationStation: Die EmulationStation stellt eine einheitliche Oberfläche für die verschiedenen Systeme zur Verfügung. Sie fasst RetroArch / Libretro und andere, dort nicht enthaltene, Emulatoren zusammen (z. B. VICE oder ScummVM). Aus der Sicht der EmulationStation ist RetroArch also „nur“ ein weiterer Emulator.
     
  2. RetroPie: Alle oben erwähnten Einzelteile bringt RetroPie nun unter einen Hut und bietet so ein rundum sorglos Paket. Hervorzuheben ist hier natürlich das SD-Karten-Image, womit jeder sehr einfach seinen Raspberry Pi zur Emulatorzentrale machen kann.

 

Achtung: Die Joystick-Einrichtung, über das Setup-Script, wurde ab dem Image 3.3 entfernt!!!
Damit bleibt euch jetzt nur noch die Einrichtung über die RGUI oder ihr tippt die Werte manuell in die retroarch.cfg.

 

Es gibt übrigens keinen Zwang, was die Belegung der Tasten angeht, ich würde aber empfehlen, dass ihr euch, so weit es möglich ist, am XBox 360-Pad oder dem Controller der Playstation orientiert. Von den „RetroPie-Machern“ wird übrigens diese Belegung empfohlen:

(Bild-Quelle: GitHub / RetroPie)
(Bild-Quelle: GitHub / RetroPie)

 

Controller-Einstellungen, die über die EmulationStation vorgenommenen werden, findet ihr im Verzeichnis /opt/retropie/configs/all/retroarch/autoconfig.
Hinweis: Verwendet ihr nur einen nicht RetroArch-Emulator (z. B. VICE), dann könntet ihr auf die eben gezeigte Konfiguration eigentlich verzichten, ich rate aber trotzdem dazu. Die „Einzel“-Emulatoren bringen nämlich jeweils ihre eigenen Treiber mit und werden ggf. über das entsprechende Menü oder eigene Konfigurationsdateien aktiviert und eingestellt.

Werfen wir doch mal einen Blick auf den VICE-Emulator (Achtung: Seit dem Image 4.0 müsst ihr diesen erst nachinstallieren!), der nicht zu RetroArch gehört. Zum C64 passt natürlich der Competition Pro am besten, daher verwende ich dafür einfach mal einen Speedlink Competition Pro USB.
Startet ihr z. B. das Spiel Nebulus mit VICE, dann werdet ihr merken, dass euer Controller / Joystick nicht funktioniert. Öffnet mit <F12> das Menü und folgt den Schritten auf den Bildern…

Bei VICE den Joystick aktivieren.
Bei VICE den Joystick aktivieren.

Verlasst zum Schluß das Menü und schon könnt ihr euren Joystick / Controller verwenden.

Nebulus
Nebulus

Benutzt ihr einen Controller mit mehr als einem Feuerknopf, wie z. B. das XBox 360 Pad oder auch den eben erwähnten Speedlink, dann kommt ihr mit dem B-Knopf übrigens auch ins Menü.

Dies war jetzt nur ein kleines Beispiel, wie ein eigenständiger Emulator mit den Controllern umgeht. Für die anderen Emulatoren müsst ihr ggf. mal in die mitgelieferte Dokumentation schauen.

 

Joysticks / Pads für bis zu 16 Spieler über die RGUI einrichten
Wollt ihr nur alleine spielen, dann sollten die oben gemachten Einstellungen schon reichen. Möchtet ihr aber mit mehreren Spielern gleichzeitig daddeln oder über den Controller weitere Sonderfunktionen auslösen, dann können wir dies, seit dem Image 3.3, am einfachsten über die Libretro / RetroArch-Oberfläche (RGUI) machen.

Seit RetroArch 1.1 werden übrigens bis zu 16 Spieler unterstützt. Ob tatsächlich alle möglich sind, hängt dann natürlich vom jeweiligen Emulator und dem Spiel ab!

Ich zeige hier mal, wie man zwei verschiedene Eingabegeräte (XBox360-Pad & Speedlink Competition Pro USB) für Spieler 1 & 2 über die RGUI (das steht übrigens für RetroArch Graphical User Interface) einrichten kann.

Wichtig ist nun, dass alle Controller am Pi angeschlossen sind und ihr die Tastatur über die EmulationStation eingerichtet habt!

Geht dann in der EmulationStation zum RetroPie-Bereich…

RetroPie-Einstellungen über die EmulationStation
RetroPie-Einstellungen über die EmulationStation

… und wählt dort RETROARCH aus.

RETROARCH
RETROARCH

Daraufhin öffnet sich die RetroArch-Oberfläche RGUI:

Das RetroArch-Menü (RGUI)
Das RetroArch-Menü (RGUI)

Hier könnt ihr euch mit der Tastatur oder später einem Joystick / Pad bewegen.

Als Erstes sollten wir kontrollieren, ob das Speichern beim Beenden aktiv ist.

Ihr bewegt euch in der RGUI übrigens mit den Tasten, die ihr in der EmulationStation festgelegt habt. Mit den D-Pad-Tasten (bei der Tastatur habt ihr wohl die Cursor-Tasten genommen) bewegt ihr euch, wie gewohnt. Zur Auswahl dient die vor euch vergebene A-Taste und um einen Schritt zurück zugehen, nehmt ihr eure B-Taste.

Folgt jetzt einfach den Schritten auf den Bildern…

Settings
Settings
Configuration
Configuration

 

ACHTUNG:
Eventuell erscheint bei euch statt dem obigen Menü, das folgende:

Falsches Menü!?!
Falsches Menü!?!

Hier scheinen zwei Tastenklicks erkannt zu werden. Falls euch dies häufiger passiert, geht einfach mit der B-Taste einen Schritt zurück. Lasst Settings markiert und drückt eure SELECT-Taste, es erscheint folgender Hinweis:

Die Meldung mit A bestätigen.
Die Meldung mit A bestätigen.

Bestätigt die Meldung einfach mit eurer A-Taste und ihr landet im gewünschten Menü.

Configuration
Configuration

Benutzt ihr später einen Controller im RetroArch-Menü, dann kann es durchaus sein, dass sich dieses Fehlverhalten nicht mehr zeigt.

 

Save Configuration On Exit auf ON stellen!
Save Configuration On Exit auf ON stellen!

Stellt hier sicher, dass Save Configuration On Exit auf ON steht, erst dann werden eure Änderungen beim Verlassen gespeichert! Achtung: Save Configuration On Exit wird aktuell nicht mehr mitgespeichert, ihr müsst es also jedes Mal erneut einschalten.

Geht anschließend zurück ins Hauptmenü.

 

Wir richten nun aber endlich die Controller ein, folgt dazu wieder diesen Bildern…

Settings
Settings

Denkt an das oben erwähnte Problem!

Input
Input
Input User 1 Binds
Input User 1 Binds

Mit dem Punkt Input User 1 Binds definiert ihr die Tasten für den ersten Controller. Die folgenden Menüpunkte sind dann für den 2, 3 usw. Spieler / Controller. Verwendet ihr mehr als 5-Controller, dann könnt ihr mit dem obersten Punkt Max Users die Anzahl erhöhen oder auch verringern, wenn es gewünscht ist. Ich lasse den Wert aber unverändert.

Die Joystick-Einstellungen
Die Joystick-Einstellungen

Mit dem Punkt User 1 Device Type könnt ihr festlegen, ob der Controller Analog-Sticks besitzt, dies ist z. B. für die Playstation-Emulation interessant. Konfigurieren könnt ihr die Analog-Sticks aber immer.

User 1 Analog To Digital Type
User 1 Analog To Digital Type

Möchtet ihr, statt mit dem D-Pad, bei entsprechenden Spielen, lieber mit einem Analog-Stick steuern, dann könnt ihr dies unter User 1 Analog To Digital Type einstellen.

User 1 Device Index
User 1 Device Index

Nun ist es an der Zeit, den richtigen Controller auszuwählen. Unter dem Punkt User 1 Device Index könnt ihr alle angeschlossenen Joysticks durchschalten. Wählt hier den Controller für den 1. Spieler.

Wenn ihr euren Blick auf die untere Hälfte des Bildes richtet, dann seht ihr, dass dort evtl. schon Zuweisungen vergeben sind. Dies sind die Einstellungen aus der EmulationStation, z. B. für die Tastatur, die man ja auch für den ersten Spieler nehmen kann.

Ihr habt nun zwei Möglichkeiten. Ihr könnt alle Tasten am Stück zuweisen oder ihr geht auf die jeweilige Taste, drückt A und dann die entsprechende Pad-Funktion. Nehmt aber ruhig erstmal User 1 Bind All.

User 1 Bind All
User 1 Bind All

Jetzt werden nacheinander alle Tasten abgefragt. Falls eurem Controller eine Funktion fehlt, wartet einfach den Countdown ab, dann wird die Abfrage automatisch mit der nächsten Taste fortgesetzt.

Buttons zuweisen (zum Überspringen, einfach etwas warten)
Buttons zuweisen (zum Überspringen, einfach etwas warten)

Zum Schluß sollten eure Zuweisung ungefähr so aussehen…

Zugewiesene Pad-Buttons und Tastatureingaben
Zugewiesene Pad-Buttons und Tastatureingaben

Jetzt könnt ihr mit B einen Schritt zurück gehen und die ganze Prozedur nochmal für die weiteren Spieler wiederholen.

Input User 2 Binds
Input User 2 Binds

So sieht es z. B. nach der Einrichtung des Speedlink Competition Pro USB bei mir aus.

Der zweite Controller ist eingerichtet.
Der zweite Controller ist eingerichtet.

Geht jetzt mit der B-Taste zurück ins Hauptmenü und verlasst die RGUI, dabei werden eure Einstellungen automatisch gespeichert, da wir oben den entsprechenden Schalter aktiviert haben.

Quit RetroArch
Quit RetroArch

 

Sobald ihr wieder in der EmulationStation seid, könnt ihr ein Mehrspieler-Spiel starten. Spielt ihr nun z. B. eine Partie Mario Bros. auf dem NES, dann könnt ihr ab jetzt auch den 2-Spieler-Modus mit zwei Controllern zocken.

Mario Bros. im Menü der EmulationStation (hier mit Bild & Text)
Mario Bros. im Menü der EmulationStation (hier mit Bild & Text)
Der 2-Spielermodus mit zwei Controllern.
Der 2-Spielermodus mit zwei Controllern.

 

Sonderfunktionen festlegen
Wollt ihr möglichst auf die Tastatur verzichten, dann wäre es doch hilfreich, wenn ihr den Emulator auch über den Controller beenden könntet. Dies geht tatsächlich!

Mittlerweile werden die folgenden Einstellungen automatisch vorbelegt:

Hotkeys        Funktion
-------------------------------------------
Select+Start   Emulator Verlassen
Select+RB      Zustand speichern
Select+LB      Zustand laden
Select+Rechts  Nächster Speicherplatz
Select+Links   Vorheriger Speierplatz
Select+X       RetroArch-Menü
Select+B       Emulator zurücksetzen (Reset)

Wie euch in der Liste bestimmt auffällt, wird jede Aktion in Kombination mit eurer SELECT-Taste aufgerufen. Diese ist standardmäßig der sog. Hotkey. Durch diesen wird u. a. verhindert, dass ihr in der Hitze eines Bosskampfes, ausversehen eine „tödliche“ Funktion wie z. B. Verlassen des Emulators oder einen Reset auslöst. Außerdem erlaubt der Hotkey die Doppelbelegung der Tasten.

Möchtet ihr die Tasten ändern, dann geht das auch über die RGUI. Startet diese ggf. nochmal, wie oben beschrieben und folgt dann den Bildern… (Achtung: Schaltet vorher „Save Configuration on Exit“ wieder ein!)

Settings
Settings

Beachtet evtl. wieder das oben beschriebene Problem.

Input
Input
Input Hotkey Binds
Input Hotkey Binds

Hier findet ihr jetzt alle Funktionen, die ihr direkt (z. B. über den Controller) aufrufen könnt. Zum Ändern müsst ihr nur den entsprechenden Punkt mit eurer A-Taste auswählen und dann die Gewünschte Controllertaste drücken.

Hier ein Beispiel
Da ich beim XBox360-Controller gerne den GUIDE-Button also Hotkey haben möchte, gehe ich erstmal fast ans Ende der Liste

Den Hotkey ändern
Enable hotkey
GUIDE-Button drücken
GUIDE-Button drücken
Statt Auto: 6 steht da jetzt eine 8 für den GUIDE-Button.
Statt „Auto: 6“ steht da jetzt eine „8“ für den GUIDE-Button.

Außerdem möchte ich mit dem BACK-Button den Emulator verlassen und mit START das Menü öffnen. Dazu sind nur diese beiden Änderungen notwendig:

Button zum Verlassen festlegen
Button zum Verlassen festlegen
Neue Taste, um das Menü zu öffnen.
Neue Taste, um das Menü zu öffnen.

So könnt ihr jetzt alle Funktionen auf die von euch gewünschten Tasten legen.

 

Als Nächstes findet ihr noch den manuellen Weg, wie ihr die eben gesehenen Einstellungen von Hand in der retroarch.cfg vornehmt. Ich würde euch zwar nahelegen, diesen Abschnitt ebenfalls zu lesen, wer daran kein Interesse hat, sollte hier weitermachen.

 

Hotkeys manuell festlegen
Verlasst dazu mal wieder die EmulationStation und wechselt ggf. das Verzeichnis cd /opt/retropie/configs/all. Öffnet die Configdatei mit nano retroarch.cfg und fügt am Schluß die folgenden Zeilen ein.

Achtet dabei ganz genau auf die Schreibweise! Schon ein Verzicht auf die Leerzeichen vor oder hinter dem =, kann (wie ich leidvoll feststellen mußte) zu Problemen führen!!

Da man bestimmt nicht direkt aus dem Emulator fliegen möchte, nur weil man im Eifer des Gefechts versehentlich auf den falschen Knopf gekommen ist, sollten wir auch noch einen sog. Hotkey festlegen. Dadurch lassen sich diese Sonderfunktionen nur noch auslösen, wenn man den Hotkey zusammen mit der entsprechenden Taste drückt. Ich verwende hier die Tastennummern vom kabellosen XBox360 Controller, ihr könnt die von euch gewünschten / benötigten Nummern der Tasten aus der retroarch.cfg oder mit der RGUI heraussuchen.

Mein Hotkey ist die GUIDE-Taste:

input_enable_hotkey_btn = "8"

Drücke ich dazu zusätzlich BACK, dann soll der Emulator verlassen werden.

input_exit_emulator_btn = "6"

Bei GUIDE + A möchte ich den Emulator pausieren.

input_pause_toggle_btn = "0"

Mit GUIDE + START möchte ich das RetroArch-Menü öffnen.

input_menu_toggle_btn = "7"

Verlasst nano mit <STRG> + <X>, antwortet auf die Frage, ob ihr speichern möchtet mit <Y>es und bestätigt abschließend den vorgeschlagenen Dateinamen mit <ENTER>.

## Skeleton config file for RetroArch

# Save all save files (*.srm) to this directory. This includes related files like .bsv, .rtc, .psrm, etc ...
# This will be overridden by explicit command line options.
# savefile_directory =

# Save all save states (*.state) to this directory.
# This will be overridden by explicit command line options.
# savestate_directory =

# If set to a directory, Content which is temporarily extracted
# will be extracted to this directory.
# extraction_directory =

# Save all input remapping files to this directory.
# input_remapping_directory =

# Save all playlist files to this directory.
# playlist_directory =

# If set to a directory, the content history playlist will be saved
# to this directory.
# content_history_dir =

# Automatically saves a savestate at the end of RetroArch's lifetime.
# The path is $SRAM_PATH.auto.
# RetroArch will automatically load any savestate with this path on startup if savestate_auto_load is set.
# savestate_auto_save = false
# savestate_auto_load = true

# Load libretro from a dynamic location for dynamically built RetroArch.
# This option is mandatory.

# Path to a libretro implementation.
# libretro_path = "/path/to/libretro.so"

# A directory for where to search for libretro core implementations.
# libretro_directory =

# A directory for where to search for libretro core information.
# libretro_info_path =

# Sets mode for archived files in file browser.
# 0 = Ask, 1 = Load Archive, 2 = Open Archive
# archive_mode = 0

# Sets log level for libretro cores (GET_LOG_INTERFACE).
# If a log level issued by a libretro core is below libretro_log_level, it is ignored.
# DEBUG logs are always ignored unless verbose mode is activated (--verbose).
# DEBUG = 0, INFO = 1, WARN = 2, ERROR = 3.
# libretro_log_level = 0

# Enable or disable verbosity level of frontend.
# log_verbosity = false

# If this option is enabled, every content file loaded in RetroArch will be
# automatically added to a history list.
# history_list_enable = true

# Enable or disable RetroArch performance counters
# perfcnt_enable = false

# Path to core options config file.
# This config file is used to expose core-specific options.
# It will be written to by RetroArch.
# A default path will be assigned if not set.
core_options_path = /opt/retropie/configs/all/retroarch-core-options.cfg

# Path to content load history file.
# RetroArch keeps track of all content loaded in the menu and from CLI directly for convenient quick loading.
# A default path will be assigned if not set.
# game_history_path =

# Number of entries that will be kept in content history file.
# game_history_size = 100

# Sets the "system" directory.
# Implementations can query for this directory to load BIOSes, system-specific configs, etc.
system_directory = /home/pi/RetroPie/BIOS

# Sets start directory for menu content browser.
# rgui_browser_directory =

# Content directory. Interacts with RETRO_ENVIRONMENT_GET_CONTENT_DIRECTORY.
# Usually set by developers who bundle libretro/RetroArch apps to point to assets.
# content_directory =

# Assets directory. This location is queried by default when menu interfaces try to look for
# loadable assets, etc.
# assets_directory =

# Sets start directory for menu config browser.
# rgui_config_directory =

# Show startup screen in menu.
# Is automatically set to false when seen for the first time.
# This is only updated in config if config_save_on_exit is set to true, however.
# rgui_show_start_screen = true

# Flushes config to disk on exit. Useful for menu as settings can be modified.
# Overwrites the config. #include's and comments are not preserved.
config_save_on_exit = false

# Load up a specific config file based on the core being used.
# core_specific_config = false

#### Video

# Video driver to use. "gl", "xvideo", "sdl"
# video_driver = "gl"

# Which OpenGL context implementation to use.
# Possible ones for desktop are: glx, x-egl, kms-egl, sdl-gl, wgl.
# By default, tries to use first suitable driver.
# video_context_driver =

# Windowed x resolution scale and y resolution scale
# (Real x res: base_size * xscale * aspect_ratio, real y res: base_size * yscale)
# video_scale = 3.0

# Fullscreen resolution. Resolution of 0 uses the resolution of the desktop.
# video_fullscreen_x = 0
# video_fullscreen_y = 0

# Start in fullscreen. Can be changed at runtime.
# video_fullscreen = false

# If fullscreen, prefer using a windowed fullscreen mode.
# video_windowed_fullscreen = true

# Which monitor to prefer. 0 (default) means no particular monitor is preferred, 1 and up (1 being first monitor),
# suggests RetroArch to use that particular monitor.
# video_monitor_index = 0

# Forcibly disable composition. Only works in Windows Vista/7 for now.
# video_disable_composition = false

# Video vsync.
# video_vsync = true

# Forcibly disable sRGB FBO support. Some Intel OpenGL drivers on Windows
# have video problems with sRGB FBO support enabled.
# video_force_srgb_disable = false

# Attempts to hard-synchronize CPU and GPU. Can reduce latency at cost of performance.
# video_hard_sync = false

# Sets how many frames CPU can run ahead of GPU when using video_hard_sync.
# Maximum is 3.
# video_hard_sync_frames = 0

# Sets how many milliseconds to delay after VSync before running the core.
# Can reduce latency at cost of higher risk of stuttering.
# Maximum is 15.
# video_frame_delay = 0

# Inserts a black frame inbetween frames.
# Useful for 120 Hz monitors who want to play 60 Hz material with eliminated ghosting.
# video_refresh_rate should still be configured as if it is a 60 Hz monitor (divide refresh rate by 2).
# video_black_frame_insertion = false

# Use threaded video driver. Using this might improve performance at possible cost of latency and more video stuttering.
video_threaded = true

# Use a shared context for HW rendered libretro cores.
# Avoids having to assume HW state changes inbetween frames.
# video_shared_context = false

# Smoothens picture with bilinear filtering. Should be disabled if using pixel shaders.
video_smooth = false

# Forces rendering area to stay equal to content aspect ratio or as defined in video_aspect_ratio.
# video_force_aspect = true

# Only scales video in integer steps.
# The base size depends on system-reported geometry and aspect ratio.
# If video_force_aspect is not set, X/Y will be integer scaled independently.
# video_scale_integer = false

# A floating point value for video aspect ratio (width / height).
# If this is not set, aspect ratio is assumed to be automatic.
# Behavior then is defined by video_aspect_ratio_auto.
# video_aspect_ratio =

# If this is true and video_aspect_ratio is not set,
# aspect ratio is decided by libretro implementation.
# If this is false, 1:1 PAR will always be assumed if video_aspect_ratio is not set.
video_aspect_ratio_auto = true

# Forces cropping of overscanned frames.
# Exact behavior of this option is implementation specific.
# video_crop_overscan = true 

# Path to shader. Shader can be either Cg, CGP (Cg preset) or GLSL, GLSLP (GLSL preset)
# video_shader = "/path/to/shader.{cg,cgp,glsl,glslp}"

# Load video_shader on startup.
# Other shaders can still be loaded later in runtime.
# video_shader_enable = false

# Defines a directory where shaders (Cg, CGP, GLSL) are kept for easy access.
video_shader_dir = /opt/retropie/emulators/retroarch/shader/

# CPU-based video filter. Path to a dynamic library.
# video_filter =

# Defines a directory where CPU-based video filters are kept.
# video_filter_dir =

# Path to a font used for rendering messages. This path must be defined to enable fonts.
# Do note that the _full_ path of the font is necessary!
# video_font_path = 

# Size of the font rendered.
# video_font_size = 32

# Enable usage of OSD messages.
# video_font_enable = true

# Offset for where messages will be placed on screen. Values are in range 0.0 to 1.0 for both x and y values. 
# [0.0, 0.0] maps to the lower left corner of the screen.
# video_message_pos_x = 0.05
# video_message_pos_y = 0.05

# Color for message. The value is treated as a hexadecimal value.
# It is a regular RGB hex number, i.e. red is "ff0000".
# video_message_color = ffffff

# Video refresh rate of your monitor.
# Used to calculate a suitable audio input rate.
# video_refresh_rate = 59.95

# Allows libretro cores to set rotation modes.
# Setting this to false will honor, but ignore this request.
# This is useful for vertically oriented content where one manually rotates the monitor.
# video_allow_rotate = true

# Forces a certain rotation of the screen.
# The rotation is added to rotations which the libretro core sets (see video_allow_rotate).
# The angle is <value> * 90 degrees counter-clockwise.
# video_rotation = 0

#### Audio

# Enable audio.
# audio_enable = true

# Mutes audio.
# audio_mute_enable = false

# Audio output samplerate.
# audio_out_rate = 48000

# Audio resampler backend. Which audio resampler to use.
# Default will use "sinc".
# audio_resampler =

# Audio driver backend. Depending on configuration possible candidates are: alsa, pulse, oss, jack, rsound, roar, openal, sdl, xaudio.
# audio_driver =

# Override the default audio device the audio_driver uses. This is driver dependant. E.g. ALSA wants a PCM device, OSS wants a path (e.g. /dev/dsp), Jack wants portnames (e.g. system:playback1,system:playback_2), and so on ...
# audio_device =

# Audio DSP plugin that processes audio before it's sent to the driver. Path to a dynamic library.
# audio_dsp_plugin =

# Directory where DSP plugins are kept.
# audio_filter_dir =

# Will sync (block) on audio. Recommended.
# audio_sync = true

# Desired audio latency in milliseconds. Might not be honored if driver can't provide given latency.
# audio_latency = 64

# Enable audio rate control.
# audio_rate_control = true

# Controls audio rate control delta. Defines how much input rate can be adjusted dynamically.
# Input rate = in_rate * (1.0 +/- audio_rate_control_delta)
# audio_rate_control_delta = 0.005

# Controls maximum audio timing skew. Defines the maximum change in input rate.
# Input rate = in_rate * (1.0 +/- max_timing_skew)
# audio_max_timing_skew = 0.05

# Audio volume. Volume is expressed in dB.
# 0 dB is normal volume. No gain will be applied.
# Gain can be controlled in runtime with input_volume_up/input_volume_down.
# audio_volume = 0.0

#### Overlay

# Defines a directory where overlays are kept for easy access.
# overlay_directory =

# Enable or disable the current overlay.
# input_overlay_enable = true


# Path to input overlay
# input_overlay =

# Overlay opacity
# input_overlay_opacity = 1.0

# Overlay scale
# input_overlay_scale = 1.0

#### OSK (Onscreen Keyboard) Overlay

# Defines a directory where overlays are kept for easy access.
# osk_overlay_directory =

# Enable OSK overlay.
# input_osk_overlay_enable = true

# Path to OSK overlay
# input_osk_overlay =

# OSK Overlay opacity
# input_osk_overlay_opacity = 1.0

# OSK Overlay scale
# input_osk_overlay_scale = 1.0

#### Input

# Input driver. Depending on video driver, it might force a different input driver.
# input_driver = sdl

# Joypad driver. (Valid: linuxraw, sdl, dinput)
# input_joypad_driver =

# Path to input remapping file.
# input_remapping_path =

# If enabled, overrides the input binds with the remapped binds set for the current core.
# input_remap_binds_enable = true

# Maximum amount of users supported by RetroArch.
# input_max_users = 16

# Keyboard layout for input driver if applicable (udev/evdev for now).
# Syntax is either just layout (e.g. "no"), or a layout and variant separated with colon ("no:nodeadkeys").
# input_keyboard_layout =

# Defines axis threshold. Possible values are [0.0, 1.0]
# input_axis_threshold = 0.5

# Enable input auto-detection. Will attempt to autoconfigure
# joypads, Plug-and-Play style.
input_autodetect_enable = true

# Show the input descriptors set by the core instead of the
# default ones.
# input_descriptor_label_show = true

# Hide input descriptors that were not set by the core.
# input_descriptor_hide_unbound = false

# Directory for joypad autoconfigs.
# If a joypad is plugged in, that joypad will be autoconfigured if a config file
# corresponding to that joypad is present in joypad_autoconfig_dir.
# Input binds which are made explicit (input_playerN_*_btn/axis) will take priority over autoconfigs.
# Autoconfigs can be created with retroarch-joyconfig, manually, or with a frontend.
# Requires input_autodetect_enable to be enabled.
joypad_autoconfig_dir = /opt/retropie/emulators/retroarch/configs/

# Sets which libretro device is used for a user.
# Devices are indentified with a number.
# This is normally saved by the menu.
# Device IDs are found in libretro.h.
# These settings are overridden by explicit command-line arguments which refer to input devices.
# None: 0
# Joypad (RetroPad): 1
# Mouse: 2
# Keyboard: 3
# Generic Lightgun: 4
# Joypad w/ Analog (RetroPad + Analog sticks): 5
# Multitap (SNES specific): 257
# Super Scope (SNES specific): 260
# Justifier (SNES specific): 516
# Justifiers (SNES specific): 772

# input_libretro_device_p1 =
# input_libretro_device_p2 =
# input_libretro_device_p3 =
# input_libretro_device_p4 =
# input_libretro_device_p5 =
# input_libretro_device_p6 =
# input_libretro_device_p7 =
# input_libretro_device_p8 =

# Keyboard input. Will recognize letters ("a" to "z") and the following special keys (where "kp_"
# is for keypad keys):
#
#   left, right, up, down, enter, kp_enter, tab, insert, del, end, home,
#   rshift, shift, ctrl, alt, space, escape, add, subtract, kp_plus, kp_minus,
#   f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12,
#   num0, num1, num2, num3, num4, num5, num6, num7, num8, num9, pageup, pagedown,
#   keypad0, keypad1, keypad2, keypad3, keypad4, keypad5, keypad6, keypad7, keypad8, keypad9,
#   period, capslock, numlock, backspace, multiply, divide, print_screen, scroll_lock,
#   tilde, backquote, pause, quote, comma, minus, slash, semicolon, equals, leftbracket,
#   backslash, rightbracket, kp_period, kp_equals, rctrl, ralt
#
# Keyboard input, Joypad and Joyaxis will all obey the "nul" bind, which disables the bind completely, 
# rather than relying on a default.
input_player1_a = x
input_player1_b = z
input_player1_y = a
input_player1_x = s
input_player1_start = enter
input_player1_select = rshift
input_player1_l = q
input_player1_r = w
input_player1_left = left
input_player1_right = right
input_player1_up = up
input_player1_down = down
# input_player1_l2 =
# input_player1_r2 =
# input_player1_l3 =
# input_player1_r3 =

# Two analog sticks (DualShock-esque).
# Bound as usual, however, if a real analog axis is bound,
# it can be read as a true analog.
# Positive X axis is right, Positive Y axis is down.
# input_player1_l_x_plus =
# input_player1_l_x_minus =
# input_player1_l_y_plus =
# input_player1_l_y_minus =
# input_player1_r_x_plus =
# input_player1_r_x_minus =
# input_player1_r_y_plus =
# input_player1_r_y_minus =

# If desired, it is possible to override which joypads are being used for user 1 through 8.
# First joypad available is 0.
# input_player1_joypad_index = 0
# input_player2_joypad_index = 1
# input_player3_joypad_index = 2
# input_player4_joypad_index = 3
# input_player5_joypad_index = 4
# input_player6_joypad_index = 5
# input_player7_joypad_index = 6
# input_player8_joypad_index = 7

# Joypad buttons.
# Figure these out by using RetroArch-Phoenix or retroarch-joyconfig.
# You can use joypad hats with hnxx, where n is the hat, and xx is a string representing direction. 
# E.g. "h0up"
# input_player1_a_btn =
# input_player1_b_btn =
# input_player1_y_btn =
# input_player1_x_btn =
# input_player1_start_btn =
# input_player1_select_btn =
# input_player1_l_btn =
# input_player1_r_btn =
# input_player1_left_btn =
# input_player1_right_btn =
# input_player1_up_btn =
# input_player1_down_btn =
# input_player1_l2_btn =
# input_player1_r2_btn =
# input_player1_l3_btn =
# input_player1_r3_btn =

# Axis for RetroArch D-Pad. 
# Needs to be either '+' or '-' in the first character signaling either positive or negative direction of the axis, then the axis number. 
# Do note that every other input option has the corresponding _btn and _axis binds as well; they are omitted here for clarity.
# input_player1_left_axis =
# input_player1_right_axis =
# input_player1_up_axis =
# input_player1_down_axis =

# Holding the turbo while pressing another button will let the button enter a turbo mode
# where the button state is modulated with a periodic signal.
# The modulation stops when the button itself (not turbo button) is released.
# input_player1_turbo =

# Describes the period and how long of that period a turbo-enabled button should behave.
# Numbers are described in frames.
# input_turbo_period = 6
# input_turbo_duty_cycle = 3

# This goes all the way to user 8 (*_player2_*, *_player3_*, etc), but omitted for clarity.
# All input binds have corresponding binds for keyboard (none), joykeys (_btn) and joyaxes (_axis) as well.

# Toggles fullscreen.
# input_toggle_fullscreen = f

# Saves state.
# input_save_state = f2
# Loads state.
# input_load_state = f4

# State slots. With slot set to 0, save state name is *.state (or whatever defined on commandline).
# When slot is != 0, path will be $path%d, where %d is slot number.
# input_state_slot_increase = f7
# input_state_slot_decrease = f6

# Toggles between fast-forwarding and normal speed.
# input_toggle_fast_forward = space

# Hold for fast-forward. Releasing button disables fast-forward.
# input_hold_fast_forward = l

# Key to exit RetroArch cleanly. 
# Killing it in any hard way (SIGKILL, etc) will terminate RetroArch without saving RAM, etc.
# On Unix-likes, SIGINT/SIGTERM allows a clean deinitialization.
input_exit_emulator = escape

# Applies next and previous shader in directory.
input_shader_next = m
input_shader_prev = n

# Hold button down to rewind. Rewinding must be enabled.
input_rewind = r

# Toggle between recording and not.
# input_movie_record_toggle = o

# Toggle between paused and non-paused state
# input_pause_toggle = p

# Frame advance when content is paused
# input_frame_advance = k

# Reset the content.
# input_reset = h

# Cheats.
# input_cheat_index_plus = y
# input_cheat_index_minus = t
# input_cheat_toggle = u

# Mute/unmute audio
# input_audio_mute = f9

# Take screenshot
# input_screenshot = f8

# Netplay flip users.
# input_netplay_flip_players = i

# Hold for slowmotion.
# input_slowmotion = e

# Enable other hotkeys.
# If this hotkey is bound to either keyboard, joybutton or joyaxis,
# all other hotkeys will be disabled unless this hotkey is also held at the same time.
# This is useful for RETRO_KEYBOARD centric implementations
# which query a large area of the keyboard, where it is not desirable
# that hotkeys get in the way.

# Alternatively, all hotkeys for keyboard could be disabled by the user.
# input_enable_hotkey_btn =

# Increases audio volume.
# input_volume_up = kp_plus
# Decreases audio volume.
# input_volume_down = kp_minus

# Toggles to next overlay. Wraps around.
# input_overlay_next =

# Toggles eject for disks. Used for multiple-disk content.
# input_disk_eject_toggle =

# Cycles through disk images. Use after ejecting.
# Complete by toggling eject again.
# input_disk_next =

# Toggles menu.
# input_menu_toggle = f1

# Toggles mouse grab. When mouse is grabbed, RetroArch hides the mouse,
# and keeps the mouse pointer inside the window to allow relative mouse input
# to work better.
# input_grab_mouse_toggle = f11

#### Menu

# Menu driver to use. "rgui", "lakka", etc. 
# menu_driver = "rgui"

# If enabled, the libretro core will keep running in the background when we
# are in the menu.
# menu_pause_libretro = false

# Enable mouse input inside the menu.
# menu_mouse_enable = false

# Shows current date and/or time inside menu.
# menu_timedate_enable = true

# Shows current core inside menu.
# menu_core_enable = true

# Throttle the menu to ~60 FPS instead of using v-sync. Useful for 120+Hz monitors.
# menu_throttle = false

# Path to a .png image to set as menu wallpaper.
# menu_wallpaper =

# Wrap-around toe beginning and/or end if boundary of list reached horizontally
# menu_navigation_wraparound_horizontal_enable = false

# Wrap-around to beginning and/or end if boundary of list reached vertically
# menu_navigation_wraparound_vertical_enable = false

# Filter files being show in 'Load Content' by supported extensions
# menu_navigation_browser_filter_supported_extensions_enable = true

# Collapse subgroup settings into main group to create one big listing of settings
# per category.
# menu_collapse_subgroups_enable = false

#### UI

# Suspends the screensaver if set to true. Is a hint that does not necessarily have to be honored
# by video driver.
# suspend_screensaver_enable  = true

#### Camera

# Override the default camera device the camera driver uses. This is driver dependant.
# camera_device =

# Override the default privacy permission for cores that want to access camera services. Is "false" by default.
# camera_allow = false

#### Location

# Override the default privacy permission for cores that want to access location services. Is "false" by default.
# location_allow = false

#### Core Updater

# URL to core update directory on buildbot.
# core_updater_buildbot_url = "http://buildbot.libretro.com"

# URL to assets update directory on buildbot.
# core_updater_buildbot_assets_url = "http://buildbot.libretro.com/assets/"

# Automatically extract archives that the cores are contained in to the libretro cores directory.
# core_updater_auto_extract_archive = true

#### Network

# When being client over netplay, use keybinds for user 1.
# netplay_client_swap_input = false

# The username of the person running RetroArch. This will be used for playing online, for instance.
# netplay_nickname = 

# The amount of delay frames to use for netplay. Increasing this value will increase
# performance, but introduce more latency.
# netplay_delay_frames = 0

# Netplay mode for the current user.
# false is Server, true is Client.
# netplay_mode = false

# Enable or disable spectator mode for the user during netplay.
# netplay_spectator_mode_enable = false

# The IP Address of the host to connect to.
# netplay_ip_address = 

# The port of the host IP Address. Can be either a TCP or an UDP port.
# netplay_ip_port = 55435

#### Misc

# Enable rewinding. This will take a performance hit when playing, so it is disabled by default.
rewind_enable = false

# Rewinding buffer size in megabytes. Bigger rewinding buffer means you can rewind longer.
# The buffer should be approx. 20MB per minute of buffer time.
rewind_buffer_size = 10

# Rewind granularity. When rewinding defined number of frames, you can rewind several frames at a time, increasing the rewinding speed.
rewind_granularity = 2

# Pause gameplay when window focus is lost.
# pause_nonactive = true

# Autosaves the non-volatile SRAM at a regular interval. This is disabled by default unless set otherwise.
# The interval is measured in seconds. A value of 0 disables autosave.
# autosave_interval =

# Path to content database directory.
# content_database_path =

# Path to cheat database directory.
# cheat_database_path =

# Path to XML cheat config, a file which keeps track of which
# cheat settings are used for individual games.
# If the file does not exist, it will be created.
# cheat_settings_path =

# Directory to dump screenshots to.
# screenshot_directory =

# Records video after CPU video filter.
# video_post_filter_record = false

# Records output of GPU shaded material if available.
# video_gpu_record = false

# Screenshots output of GPU shaded material if available.
video_gpu_screenshot = true

# Block SRAM from being overwritten when loading save states.
# Might potentially lead to buggy games.
# block_sram_overwrite = false

# When saving a savestate, save state index is automatically increased before
# it is saved.
# Also, when loading content, the index will be set to the highest existing index.
# There is no upper bound on the index.
# savestate_auto_index = false

# Slowmotion ratio. When slowmotion, content will slow down by factor.
# slowmotion_ratio = 3.0

# The maximum rate at which content will be run when using fast forward. (E.g. 5.0 for 60 fps content => 300 fps cap).
# RetroArch will go to sleep to ensure that the maximum rate will not be exceeded.
# Do not rely on this cap to be perfectly accurate.
# fastforward_ratio = 1.0

# Setting this to false equals no FPS cap and will override the fastforward_ratio value.
# fastforward_ratio_throttle_enable = false

# Enable stdin/network command interface.
# network_cmd_enable = false
# network_cmd_port = 55355
# stdin_cmd_enable = false

input_enable_hotkey = nul
input_player1_joypad_index = "0"
input_player1_b_btn = "1"
input_player1_y_btn = "3"
input_player1_select_btn = "6"
input_player1_start_btn = "7"
input_player1_up_btn = "13"
input_player1_down_btn = "14"
input_player1_left_btn = "11"
input_player1_right_btn = "12"
input_player1_a_btn = "0"
input_player1_x_btn = "2"
input_player1_l_btn = "4"
input_player1_r_btn = "5"
input_player1_l2_axis = "+2"
input_player1_r2_axis = "+5"
input_player1_l3_btn = "9"
input_player1_r3_btn = "10"
input_player1_l_x_plus_axis = "+0"
input_player1_l_x_minus_axis = "-0"
input_player1_l_y_plus_axis = "+1"
input_player1_l_y_minus_axis = "-1"
input_player1_r_x_plus_axis = "+3"
input_player1_r_x_minus_axis = "-3"
input_player1_r_y_plus_axis = "+4"
input_player1_r_y_minus_axis = "-4"
input_player2_joypad_index = "4"
input_player2_b_btn = "1"
input_player2_select_btn = "3"
input_player2_start_btn = "2"
input_player2_up_axis = "-1"
input_player2_down_axis = "+1"
input_player2_left_axis = "-0"
input_player2_right_axis = "+0"
input_player2_a_btn = "0"

#Hotkey
input_enable_hotkey_btn = "8"

#Sondertasten
input_exit_emulator_btn = "6"
input_pause_toggle_btn = "0"
input_menu_toggle_btn = "7"

Mit der Raute # könnt ihr Kommentare ins Script schreiben oder einen Schalter deaktivieren, indem ihr an die erste Stelle der Zeile eine Raute schreibt. Startet nun wieder ein Spielchen (es muss natürlich ein RetroArch-Emulator sein) und ihr könnt die eben zugewiesenen Tasten verwenden. Mit GUIDE + START erscheint z. B. das RetroArch-Menü.

Die RetroArch-Oberfläche (RGUI)
Die RetroArch-Oberfläche (RGUI)

Das waren jetzt nur vier Sonderfunktionen, es gibt aber noch einen ganzen Haufen mehr! Auch zusätzliche Einstellungen gibt es massenhaft. Ihr könnt z. B. übers Pad das Laden & Speichern von Snapshots oder die Aufnahme von Screenshots steuern.

Den aktuellen Emulatorstatus, könnt ihr nach hinzufügen der folgdenden Zeilen zur retroarch.cfg, mit L1 speichern und mit L2 laden (immer in Kombination mit dem Hotkey GUIDE).

input_save_state_btn = "4"
input_load_state_btn = "5"

Wenn ihr lieber mit einem der analogen Sticks, statt dem D-Pad, spielt, dann könnt ihr dies durch die Zeile

input_player1_analog_dpad_mode = "1"

erreichen. Hier für den ersten Spieler 0 = keiner | 1 = linker | 2 = rechter Stick. Das D-Pad geht dann parallel immer noch.

Im folgenden Block findet ihr einen ganzen Haufen 😉 (oder so gar alle?) Schalter.

#include "/opt/retropie/configs/all/retroarch.cfg"
input_remapping_directory = "/opt/retropie/configs/nes/"
video_shader = "/opt/retropie/emulators/retroarch/shader/phosphor.glslp"
video_shader_enable = "false"
video_smooth = "false"
input_max_users = "16"
input_axis_threshold = "0.500000"
video_gpu_record = "false"
input_remap_binds_enable = "true"
netplay_client_swap_input = "true"
input_descriptor_label_show = "true"
autoconfig_descriptor_label_show = "true"
input_descriptor_hide_unbound = "false"
load_dummy_on_core_shutdown = "true"
fps_show = "false"
ui_menubar_enable = "true"
suspend_screensaver_enable = "true"
libretro_path = "/opt/retropie/libretrocores/lr-fceumm/fceumm_libretro.so"
libretro_directory = ""
libretro_info_path = ""
content_database_path = ""
cheat_database_path = ""
cursor_directory = ""
content_history_dir = ""
rewind_enable = "false"
audio_latency = "64"
audio_sync = "true"
audio_block_frames = "0"
rewind_granularity = "1"
video_aspect_ratio = "-1.000000"
video_aspect_ratio_auto = "false"
video_windowed_fullscreen = "true"
video_scale = "3.000000"
autosave_interval = "0"
video_crop_overscan = "true"
video_scale_integer = "false"
video_threaded = "false"
video_shared_context = "false"
video_force_srgb_disable = "false"
video_fullscreen = "false"
video_refresh_rate = "60.000000"
video_monitor_index = "0"
video_fullscreen_x = "640"
video_fullscreen_y = "480"
video_driver = "gl"
threaded_data_runloop_enable = "true"
menu_driver = "rgui"
menu_pause_libretro = "true"
menu_mouse_enable = "false"
menu_timedate_enable = "true"
menu_core_enable = "true"
menu_wallpaper = ""
video_vsync = "true"
video_hard_sync = "false"
video_hard_sync_frames = "0"
video_frame_delay = "0"
video_black_frame_insertion = "false"
video_disable_composition = "false"
pause_nonactive = "false"
video_swap_interval = "1"
video_gpu_screenshot = "true"
video_rotation = "0"
screenshot_directory = "default"
aspect_ratio_index = "19"
audio_device = ""
video_filter = ""
audio_dsp_plugin = ""
core_updater_buildbot_url = ""
core_updater_buildbot_assets_url = "http://buildbot.libretro.com/assets/"
core_updater_auto_extract_archive = "true"
camera_device = ""
camera_allow = "false"
audio_rate_control = "true"
audio_rate_control_delta = "0.005000"
audio_max_timing_skew = "0.050000"
audio_volume = "0.000000"
video_context_driver = ""
audio_driver = "alsathread"
audio_enable = "true"
audio_mute_enable = "false"
audio_out_rate = "48000"
location_allow = "false"
video_font_size = "32.000000"
video_font_enable = "true"
ups_pref = "false"
bps_pref = "false"
ips_pref = "false"
system_directory = "default"
extraction_directory = ""
input_remapping_path = ""
resampler_directory = ""
audio_resampler = "sinc"
savefile_directory = "default"
savestate_directory = "default"
video_shader_dir = "default"
video_filter_dir = "default"
audio_filter_dir = "default"
core_assets_directory = "default"
assets_directory = "default"
playlist_directory = "default"
rgui_browser_directory = "default"
rgui_config_directory = "default"
rgui_show_start_screen = "false"
menu_navigation_wraparound_horizontal_enable = "true"
menu_navigation_wraparound_vertical_enable = "true"
menu_navigation_browser_filter_supported_extensions_enable = "true"
menu_collapse_subgroups_enable = "true"
menu_show_advanced_settings = "false"
menu_entry_normal_color = "ffffffff"
menu_entry_hover_color = "ff64ff64"
menu_title_color = "ff64ff64"
game_history_path = "/opt/retropie/configs/nes/retroarch-content-history.txt"
game_history_size = "100"
joypad_autoconfig_dir = ""
input_autodetect_enable = "true"
overlay_directory = "default"
input_overlay = ""
input_overlay_enable = "true"
input_overlay_opacity = "0.700000"
input_overlay_scale = "1.000000"
osk_overlay_directory = "default"
input_osk_overlay = ""
input_osk_overlay_enable = "false"
video_font_path = ""
video_message_pos_x = "0.050000"
video_message_pos_y = "0.050000"
gamma_correction = "false"
soft_filter_enable = "false"
flicker_filter_enable = "false"
flicker_filter_index = "0"
soft_filter_index = "0"
current_resolution_id = "0"
custom_viewport_width = "514"
custom_viewport_height = "480"
custom_viewport_x = "169"
custom_viewport_y = "0"
block_sram_overwrite = "false"
savestate_auto_index = "false"
savestate_auto_save = "false"
savestate_auto_load = "false"
history_list_enable = "true"
fastforward_ratio = "1.000000"
fastforward_ratio_throttle_enable = "false"
slowmotion_ratio = "3.000000"
config_save_on_exit = "true"
sound_mode = "0"
state_slot = "0"
netplay_spectator_mode_enable = "false"
netplay_mode = "false"
netplay_ip_address = ""
netplay_ip_port = "0"
netplay_delay_frames = "0"
netplay_nickname = ""
user_language = "0"
custom_bgm_enable = "false"
input_driver = "udev"
input_joypad_driver = "udev"
input_keyboard_layout = ""
input_device_p1 = "0"
input_player1_joypad_index = "0"
input_libretro_device_p1 = "1"
input_player1_analog_dpad_mode = "0"
input_device_p2 = "0"
input_player2_joypad_index = "1"
input_libretro_device_p2 = "1"
input_player2_analog_dpad_mode = "0"
input_device_p3 = "0"
input_player3_joypad_index = "2"
input_libretro_device_p3 = "1"
input_player3_analog_dpad_mode = "0"
input_device_p4 = "0"
input_player4_joypad_index = "3"
input_libretro_device_p4 = "1"
input_player4_analog_dpad_mode = "0"
input_device_p5 = "0"
input_player5_joypad_index = "4"
input_libretro_device_p5 = "1"
input_player5_analog_dpad_mode = "0"
input_device_p6 = "0"
input_player6_joypad_index = "5"
input_libretro_device_p6 = "1"
input_player6_analog_dpad_mode = "0"
input_device_p7 = "0"
input_player7_joypad_index = "6"
input_libretro_device_p7 = "1"
input_player7_analog_dpad_mode = "0"
input_device_p8 = "0"
input_player8_joypad_index = "7"
input_libretro_device_p8 = "1"
input_player8_analog_dpad_mode = "0"
input_device_p9 = "0"
input_player9_joypad_index = "8"
input_libretro_device_p9 = "1"
input_player9_analog_dpad_mode = "0"
input_device_p10 = "0"
input_player10_joypad_index = "9"
input_libretro_device_p10 = "1"
input_player10_analog_dpad_mode = "0"
input_device_p11 = "0"
input_player11_joypad_index = "10"
input_libretro_device_p11 = "1"
input_player11_analog_dpad_mode = "0"
input_device_p12 = "0"
input_player12_joypad_index = "11"
input_libretro_device_p12 = "1"
input_player12_analog_dpad_mode = "0"
input_device_p13 = "0"
input_player13_joypad_index = "12"
input_libretro_device_p13 = "1"
input_player13_analog_dpad_mode = "0"
input_device_p14 = "0"
input_player14_joypad_index = "13"
input_libretro_device_p14 = "1"
input_player14_analog_dpad_mode = "0"
input_device_p15 = "0"
input_player15_joypad_index = "14"
input_libretro_device_p15 = "1"
input_player15_analog_dpad_mode = "0"
input_device_p16 = "0"
input_player16_joypad_index = "15"
input_libretro_device_p16 = "1"
input_player16_analog_dpad_mode = "0"
input_player1_b = "z"
input_player1_b_btn = "nul"
input_player1_b_axis = "nul"
input_player1_y = "a"
input_player1_y_btn = "nul"
input_player1_y_axis = "nul"
input_player1_select = "rshift"
input_player1_select_btn = "nul"
input_player1_select_axis = "nul"
input_player1_start = "enter"
input_player1_start_btn = "nul"
input_player1_start_axis = "nul"
input_player1_up = "up"
input_player1_up_btn = "nul"
input_player1_up_axis = "nul"
input_player1_down = "down"
input_player1_down_btn = "nul"
input_player1_down_axis = "nul"
input_player1_left = "left"
input_player1_left_btn = "nul"
input_player1_left_axis = "nul"
input_player1_right = "right"
input_player1_right_btn = "nul"
input_player1_right_axis = "nul"
input_player1_a = "x"
input_player1_a_btn = "nul"
input_player1_a_axis = "nul"
input_player1_x = "s"
input_player1_x_btn = "nul"
input_player1_x_axis = "nul"
input_player1_l = "q"
input_player1_l_btn = "nul"
input_player1_l_axis = "nul"
input_player1_r = "w"
input_player1_r_btn = "nul"
input_player1_r_axis = "nul"
input_player1_l2 = "nul"
input_player1_l2_btn = "nul"
input_player1_l2_axis = "nul"
input_player1_r2 = "nul"
input_player1_r2_btn = "nul"
input_player1_r2_axis = "nul"
input_player1_l3 = "nul"
input_player1_l3_btn = "nul"
input_player1_l3_axis = "nul"
input_player1_r3 = "nul"
input_player1_r3_btn = "nul"
input_player1_r3_axis = "nul"
input_player1_l_x_plus = "nul"
input_player1_l_x_plus_btn = "nul"
input_player1_l_x_plus_axis = "nul"
input_player1_l_x_minus = "nul"
input_player1_l_x_minus_btn = "nul"
input_player1_l_x_minus_axis = "nul"
input_player1_l_y_plus = "nul"
input_player1_l_y_plus_btn = "nul"
input_player1_l_y_plus_axis = "nul"
input_player1_l_y_minus = "nul"
input_player1_l_y_minus_btn = "nul"
input_player1_l_y_minus_axis = "nul"
input_player1_r_x_plus = "nul"
input_player1_r_x_plus_btn = "nul"
input_player1_r_x_plus_axis = "nul"
input_player1_r_x_minus = "nul"
input_player1_r_x_minus_btn = "nul"
input_player1_r_x_minus_axis = "nul"
input_player1_r_y_plus = "nul"
input_player1_r_y_plus_btn = "nul"
input_player1_r_y_plus_axis = "nul"
input_player1_r_y_minus = "nul"
input_player1_r_y_minus_btn = "nul"
input_player1_r_y_minus_axis = "nul"
input_player1_turbo = "nul"
input_player1_turbo_btn = "nul"
input_player1_turbo_axis = "nul"
input_toggle_fast_forward = "space"
input_toggle_fast_forward_btn = "nul"
input_toggle_fast_forward_axis = "nul"
input_hold_fast_forward = "l"
input_hold_fast_forward_btn = "nul"
input_hold_fast_forward_axis = "nul"
input_load_state = "f4"
input_load_state_btn = "nul"
input_load_state_axis = "nul"
input_save_state = "f2"
input_save_state_btn = "nul"
input_save_state_axis = "nul"
input_toggle_fullscreen = "f"
input_toggle_fullscreen_btn = "nul"
input_toggle_fullscreen_axis = "nul"
input_exit_emulator = "escape"
input_exit_emulator_btn = "nul"
input_exit_emulator_axis = "nul"
input_state_slot_increase = "f7"
input_state_slot_increase_btn = "nul"
input_state_slot_increase_axis = "nul"
input_state_slot_decrease = "f6"
input_state_slot_decrease_btn = "nul"
input_state_slot_decrease_axis = "nul"
input_rewind = "r"
input_rewind_btn = "nul"
input_rewind_axis = "nul"
input_movie_record_toggle = "o"
input_movie_record_toggle_btn = "nul"
input_movie_record_toggle_axis = "nul"
input_pause_toggle = "p"
input_pause_toggle_btn = "nul"
input_pause_toggle_axis = "nul"
input_frame_advance = "k"
input_frame_advance_btn = "nul"
input_frame_advance_axis = "nul"
input_reset = "h"
input_reset_btn = "nul"
input_reset_axis = "nul"
input_shader_next = "m"
input_shader_next_btn = "nul"
input_shader_next_axis = "nul"
input_shader_prev = "n"
input_shader_prev_btn = "nul"
input_shader_prev_axis = "nul"
input_cheat_index_plus = "y"
input_cheat_index_plus_btn = "nul"
input_cheat_index_plus_axis = "nul"
input_cheat_index_minus = "t"
input_cheat_index_minus_btn = "nul"
input_cheat_index_minus_axis = "nul"
input_cheat_toggle = "u"
input_cheat_toggle_btn = "nul"
input_cheat_toggle_axis = "nul"
input_screenshot = "f8"
input_screenshot_btn = "nul"
input_screenshot_axis = "nul"
input_audio_mute = "f9"
input_audio_mute_btn = "nul"
input_audio_mute_axis = "nul"
input_netplay_flip_players = "i"
input_netplay_flip_players_btn = "nul"
input_netplay_flip_players_axis = "nul"
input_slowmotion = "e"
input_slowmotion_btn = "nul"
input_slowmotion_axis = "nul"
input_enable_hotkey = "nul"
input_enable_hotkey_btn = "nul"
input_enable_hotkey_axis = "nul"
input_volume_up = "add"
input_volume_up_btn = "nul"
input_volume_up_axis = "nul"
input_volume_down = "subtract"
input_volume_down_btn = "nul"
input_volume_down_axis = "nul"
input_overlay_next = "nul"
input_overlay_next_btn = "nul"
input_overlay_next_axis = "nul"
input_disk_eject_toggle = "nul"
input_disk_eject_toggle_btn = "nul"
input_disk_eject_toggle_axis = "nul"
input_disk_next = "nul"
input_disk_next_btn = "nul"
input_disk_next_axis = "nul"
input_disk_prev = "nul"
input_disk_prev_btn = "nul"
input_disk_prev_axis = "nul"
input_grab_mouse_toggle = "f11"
input_grab_mouse_toggle_btn = "nul"
input_grab_mouse_toggle_axis = "nul"
input_menu_toggle = "f1"
input_menu_toggle_btn = "nul"
input_menu_toggle_axis = "nul"
input_player2_b = "nul"
input_player2_b_btn = "nul"
input_player2_b_axis = "nul"
input_player2_y = "nul"
input_player2_y_btn = "nul"
input_player2_y_axis = "nul"
input_player2_select = "nul"
input_player2_select_btn = "nul"
input_player2_select_axis = "nul"
input_player2_start = "nul"
input_player2_start_btn = "nul"
input_player2_start_axis = "nul"
input_player2_up = "nul"
input_player2_up_btn = "nul"
input_player2_up_axis = "nul"
input_player2_down = "nul"
input_player2_down_btn = "nul"
input_player2_down_axis = "nul"
input_player2_left = "nul"
input_player2_left_btn = "nul"
input_player2_left_axis = "nul"
input_player2_right = "nul"
input_player2_right_btn = "nul"
input_player2_right_axis = "nul"
input_player2_a = "nul"
input_player2_a_btn = "nul"
input_player2_a_axis = "nul"
input_player2_x = "nul"
input_player2_x_btn = "nul"
input_player2_x_axis = "nul"
input_player2_l = "nul"
input_player2_l_btn = "nul"
input_player2_l_axis = "nul"
input_player2_r = "nul"
input_player2_r_btn = "nul"
input_player2_r_axis = "nul"
input_player2_l2 = "nul"
input_player2_l2_btn = "nul"
input_player2_l2_axis = "nul"
input_player2_r2 = "nul"
input_player2_r2_btn = "nul"
input_player2_r2_axis = "nul"
input_player2_l3 = "nul"
input_player2_l3_btn = "nul"
input_player2_l3_axis = "nul"
input_player2_r3 = "nul"
input_player2_r3_btn = "nul"
input_player2_r3_axis = "nul"
input_player2_l_x_plus = "nul"
input_player2_l_x_plus_btn = "nul"
input_player2_l_x_plus_axis = "nul"
input_player2_l_x_minus = "nul"
input_player2_l_x_minus_btn = "nul"
input_player2_l_x_minus_axis = "nul"
input_player2_l_y_plus = "nul"
input_player2_l_y_plus_btn = "nul"
input_player2_l_y_plus_axis = "nul"
input_player2_l_y_minus = "nul"
input_player2_l_y_minus_btn = "nul"
input_player2_l_y_minus_axis = "nul"
input_player2_r_x_plus = "nul"
input_player2_r_x_plus_btn = "nul"
input_player2_r_x_plus_axis = "nul"
input_player2_r_x_minus = "nul"
input_player2_r_x_minus_btn = "nul"
input_player2_r_x_minus_axis = "nul"
input_player2_r_y_plus = "nul"
input_player2_r_y_plus_btn = "nul"
input_player2_r_y_plus_axis = "nul"
input_player2_r_y_minus = "nul"
input_player2_r_y_minus_btn = "nul"
input_player2_r_y_minus_axis = "nul"
input_player2_turbo = "nul"
input_player2_turbo_btn = "nul"
input_player2_turbo_axis = "nul"
input_player3_b = "nul"
input_player3_b_btn = "nul"
input_player3_b_axis = "nul"
input_player3_y = "nul"
input_player3_y_btn = "nul"
input_player3_y_axis = "nul"
input_player3_select = "nul"
input_player3_select_btn = "nul"
input_player3_select_axis = "nul"
input_player3_start = "nul"
input_player3_start_btn = "nul"
input_player3_start_axis = "nul"
input_player3_up = "nul"
input_player3_up_btn = "nul"
input_player3_up_axis = "nul"
input_player3_down = "nul"
input_player3_down_btn = "nul"
input_player3_down_axis = "nul"
input_player3_left = "nul"
input_player3_left_btn = "nul"
input_player3_left_axis = "nul"
input_player3_right = "nul"
input_player3_right_btn = "nul"
input_player3_right_axis = "nul"
input_player3_a = "nul"
input_player3_a_btn = "nul"
input_player3_a_axis = "nul"
input_player3_x = "nul"
input_player3_x_btn = "nul"
input_player3_x_axis = "nul"
input_player3_l = "nul"
input_player3_l_btn = "nul"
input_player3_l_axis = "nul"
input_player3_r = "nul"
input_player3_r_btn = "nul"
input_player3_r_axis = "nul"
input_player3_l2 = "nul"
input_player3_l2_btn = "nul"
input_player3_l2_axis = "nul"
input_player3_r2 = "nul"
input_player3_r2_btn = "nul"
input_player3_r2_axis = "nul"
input_player3_l3 = "nul"
input_player3_l3_btn = "nul"
input_player3_l3_axis = "nul"
input_player3_r3 = "nul"
input_player3_r3_btn = "nul"
input_player3_r3_axis = "nul"
input_player3_l_x_plus = "nul"
input_player3_l_x_plus_btn = "nul"
input_player3_l_x_plus_axis = "nul"
input_player3_l_x_minus = "nul"
input_player3_l_x_minus_btn = "nul"
input_player3_l_x_minus_axis = "nul"
input_player3_l_y_plus = "nul"
input_player3_l_y_plus_btn = "nul"
input_player3_l_y_plus_axis = "nul"
input_player3_l_y_minus = "nul"
input_player3_l_y_minus_btn = "nul"
input_player3_l_y_minus_axis = "nul"
input_player3_r_x_plus = "nul"
input_player3_r_x_plus_btn = "nul"
input_player3_r_x_plus_axis = "nul"
input_player3_r_x_minus = "nul"
input_player3_r_x_minus_btn = "nul"
input_player3_r_x_minus_axis = "nul"
input_player3_r_y_plus = "nul"
input_player3_r_y_plus_btn = "nul"
input_player3_r_y_plus_axis = "nul"
input_player3_r_y_minus = "nul"
input_player3_r_y_minus_btn = "nul"
input_player3_r_y_minus_axis = "nul"
input_player3_turbo = "nul"
input_player3_turbo_btn = "nul"
input_player3_turbo_axis = "nul"
input_player4_b = "nul"
input_player4_b_btn = "nul"
input_player4_b_axis = "nul"
input_player4_y = "nul"
input_player4_y_btn = "nul"
input_player4_y_axis = "nul"
input_player4_select = "nul"
input_player4_select_btn = "nul"
input_player4_select_axis = "nul"
input_player4_start = "nul"
input_player4_start_btn = "nul"
input_player4_start_axis = "nul"
input_player4_up = "nul"
input_player4_up_btn = "nul"
input_player4_up_axis = "nul"
input_player4_down = "nul"
input_player4_down_btn = "nul"
input_player4_down_axis = "nul"
input_player4_left = "nul"
input_player4_left_btn = "nul"
input_player4_left_axis = "nul"
input_player4_right = "nul"
input_player4_right_btn = "nul"
input_player4_right_axis = "nul"
input_player4_a = "nul"
input_player4_a_btn = "nul"
input_player4_a_axis = "nul"
input_player4_x = "nul"
input_player4_x_btn = "nul"
input_player4_x_axis = "nul"
input_player4_l = "nul"
input_player4_l_btn = "nul"
input_player4_l_axis = "nul"
input_player4_r = "nul"
input_player4_r_btn = "nul"
input_player4_r_axis = "nul"
input_player4_l2 = "nul"
input_player4_l2_btn = "nul"
input_player4_l2_axis = "nul"
input_player4_r2 = "nul"
input_player4_r2_btn = "nul"
input_player4_r2_axis = "nul"
input_player4_l3 = "nul"
input_player4_l3_btn = "nul"
input_player4_l3_axis = "nul"
input_player4_r3 = "nul"
input_player4_r3_btn = "nul"
input_player4_r3_axis = "nul"
input_player4_l_x_plus = "nul"
input_player4_l_x_plus_btn = "nul"
input_player4_l_x_plus_axis = "nul"
input_player4_l_x_minus = "nul"
input_player4_l_x_minus_btn = "nul"
input_player4_l_x_minus_axis = "nul"
input_player4_l_y_plus = "nul"
input_player4_l_y_plus_btn = "nul"
input_player4_l_y_plus_axis = "nul"
input_player4_l_y_minus = "nul"
input_player4_l_y_minus_btn = "nul"
input_player4_l_y_minus_axis = "nul"
input_player4_r_x_plus = "nul"
input_player4_r_x_plus_btn = "nul"
input_player4_r_x_plus_axis = "nul"
input_player4_r_x_minus = "nul"
input_player4_r_x_minus_btn = "nul"
input_player4_r_x_minus_axis = "nul"
input_player4_r_y_plus = "nul"
input_player4_r_y_plus_btn = "nul"
input_player4_r_y_plus_axis = "nul"
input_player4_r_y_minus = "nul"
input_player4_r_y_minus_btn = "nul"
input_player4_r_y_minus_axis = "nul"
input_player4_turbo = "nul"
input_player4_turbo_btn = "nul"
input_player4_turbo_axis = "nul"
input_player5_b = "nul"
input_player5_b_btn = "nul"
input_player5_b_axis = "nul"
input_player5_y = "nul"
input_player5_y_btn = "nul"
input_player5_y_axis = "nul"
input_player5_select = "nul"
input_player5_select_btn = "nul"
input_player5_select_axis = "nul"
input_player5_start = "nul"
input_player5_start_btn = "nul"
input_player5_start_axis = "nul"
input_player5_up = "nul"
input_player5_up_btn = "nul"
input_player5_up_axis = "nul"
input_player5_down = "nul"
input_player5_down_btn = "nul"
input_player5_down_axis = "nul"
input_player5_left = "nul"
input_player5_left_btn = "nul"
input_player5_left_axis = "nul"
input_player5_right = "nul"
input_player5_right_btn = "nul"
input_player5_right_axis = "nul"
input_player5_a = "nul"
input_player5_a_btn = "nul"
input_player5_a_axis = "nul"
input_player5_x = "nul"
input_player5_x_btn = "nul"
input_player5_x_axis = "nul"
input_player5_l = "nul"
input_player5_l_btn = "nul"
input_player5_l_axis = "nul"
input_player5_r = "nul"
input_player5_r_btn = "nul"
input_player5_r_axis = "nul"
input_player5_l2 = "nul"
input_player5_l2_btn = "nul"
input_player5_l2_axis = "nul"
input_player5_r2 = "nul"
input_player5_r2_btn = "nul"
input_player5_r2_axis = "nul"
input_player5_l3 = "nul"
input_player5_l3_btn = "nul"
input_player5_l3_axis = "nul"
input_player5_r3 = "nul"
input_player5_r3_btn = "nul"
input_player5_r3_axis = "nul"
input_player5_l_x_plus = "nul"
input_player5_l_x_plus_btn = "nul"
input_player5_l_x_plus_axis = "nul"
input_player5_l_x_minus = "nul"
input_player5_l_x_minus_btn = "nul"
input_player5_l_x_minus_axis = "nul"
input_player5_l_y_plus = "nul"
input_player5_l_y_plus_btn = "nul"
input_player5_l_y_plus_axis = "nul"
input_player5_l_y_minus = "nul"
input_player5_l_y_minus_btn = "nul"
input_player5_l_y_minus_axis = "nul"
input_player5_r_x_plus = "nul"
input_player5_r_x_plus_btn = "nul"
input_player5_r_x_plus_axis = "nul"
input_player5_r_x_minus = "nul"
input_player5_r_x_minus_btn = "nul"
input_player5_r_x_minus_axis = "nul"
input_player5_r_y_plus = "nul"
input_player5_r_y_plus_btn = "nul"
input_player5_r_y_plus_axis = "nul"
input_player5_r_y_minus = "nul"
input_player5_r_y_minus_btn = "nul"
input_player5_r_y_minus_axis = "nul"
input_player5_turbo = "nul"
input_player5_turbo_btn = "nul"
input_player5_turbo_axis = "nul"
input_player6_b = "nul"
input_player6_b_btn = "nul"
input_player6_b_axis = "nul"
input_player6_y = "nul"
input_player6_y_btn = "nul"
input_player6_y_axis = "nul"
input_player6_select = "nul"
input_player6_select_btn = "nul"
input_player6_select_axis = "nul"
input_player6_start = "nul"
input_player6_start_btn = "nul"
input_player6_start_axis = "nul"
input_player6_up = "nul"
input_player6_up_btn = "nul"
input_player6_up_axis = "nul"
input_player6_down = "nul"
input_player6_down_btn = "nul"
input_player6_down_axis = "nul"
input_player6_left = "nul"
input_player6_left_btn = "nul"
input_player6_left_axis = "nul"
input_player6_right = "nul"
input_player6_right_btn = "nul"
input_player6_right_axis = "nul"
input_player6_a = "nul"
input_player6_a_btn = "nul"
input_player6_a_axis = "nul"
input_player6_x = "nul"
input_player6_x_btn = "nul"
input_player6_x_axis = "nul"
input_player6_l = "nul"
input_player6_l_btn = "nul"
input_player6_l_axis = "nul"
input_player6_r = "nul"
input_player6_r_btn = "nul"
input_player6_r_axis = "nul"
input_player6_l2 = "nul"
input_player6_l2_btn = "nul"
input_player6_l2_axis = "nul"
input_player6_r2 = "nul"
input_player6_r2_btn = "nul"
input_player6_r2_axis = "nul"
input_player6_l3 = "nul"
input_player6_l3_btn = "nul"
input_player6_l3_axis = "nul"
input_player6_r3 = "nul"
input_player6_r3_btn = "nul"
input_player6_r3_axis = "nul"
input_player6_l_x_plus = "nul"
input_player6_l_x_plus_btn = "nul"
input_player6_l_x_plus_axis = "nul"
input_player6_l_x_minus = "nul"
input_player6_l_x_minus_btn = "nul"
input_player6_l_x_minus_axis = "nul"
input_player6_l_y_plus = "nul"
input_player6_l_y_plus_btn = "nul"
input_player6_l_y_plus_axis = "nul"
input_player6_l_y_minus = "nul"
input_player6_l_y_minus_btn = "nul"
input_player6_l_y_minus_axis = "nul"
input_player6_r_x_plus = "nul"
input_player6_r_x_plus_btn = "nul"
input_player6_r_x_plus_axis = "nul"
input_player6_r_x_minus = "nul"
input_player6_r_x_minus_btn = "nul"
input_player6_r_x_minus_axis = "nul"
input_player6_r_y_plus = "nul"
input_player6_r_y_plus_btn = "nul"
input_player6_r_y_plus_axis = "nul"
input_player6_r_y_minus = "nul"
input_player6_r_y_minus_btn = "nul"
input_player6_r_y_minus_axis = "nul"
input_player6_turbo = "nul"
input_player6_turbo_btn = "nul"
input_player6_turbo_axis = "nul"
input_player7_b = "nul"
input_player7_b_btn = "nul"
input_player7_b_axis = "nul"
input_player7_y = "nul"
input_player7_y_btn = "nul"
input_player7_y_axis = "nul"
input_player7_select = "nul"
input_player7_select_btn = "nul"
input_player7_select_axis = "nul"
input_player7_start = "nul"
input_player7_start_btn = "nul"
input_player7_start_axis = "nul"
input_player7_up = "nul"
input_player7_up_btn = "nul"
input_player7_up_axis = "nul"
input_player7_down = "nul"
input_player7_down_btn = "nul"
input_player7_down_axis = "nul"
input_player7_left = "nul"
input_player7_left_btn = "nul"
input_player7_left_axis = "nul"
input_player7_right = "nul"
input_player7_right_btn = "nul"
input_player7_right_axis = "nul"
input_player7_a = "nul"
input_player7_a_btn = "nul"
input_player7_a_axis = "nul"
input_player7_x = "nul"
input_player7_x_btn = "nul"
input_player7_x_axis = "nul"
input_player7_l = "nul"
input_player7_l_btn = "nul"
input_player7_l_axis = "nul"
input_player7_r = "nul"
input_player7_r_btn = "nul"
input_player7_r_axis = "nul"
input_player7_l2 = "nul"
input_player7_l2_btn = "nul"
input_player7_l2_axis = "nul"
input_player7_r2 = "nul"
input_player7_r2_btn = "nul"
input_player7_r2_axis = "nul"
input_player7_l3 = "nul"
input_player7_l3_btn = "nul"
input_player7_l3_axis = "nul"
input_player7_r3 = "nul"
input_player7_r3_btn = "nul"
input_player7_r3_axis = "nul"
input_player7_l_x_plus = "nul"
input_player7_l_x_plus_btn = "nul"
input_player7_l_x_plus_axis = "nul"
input_player7_l_x_minus = "nul"
input_player7_l_x_minus_btn = "nul"
input_player7_l_x_minus_axis = "nul"
input_player7_l_y_plus = "nul"
input_player7_l_y_plus_btn = "nul"
input_player7_l_y_plus_axis = "nul"
input_player7_l_y_minus = "nul"
input_player7_l_y_minus_btn = "nul"
input_player7_l_y_minus_axis = "nul"
input_player7_r_x_plus = "nul"
input_player7_r_x_plus_btn = "nul"
input_player7_r_x_plus_axis = "nul"
input_player7_r_x_minus = "nul"
input_player7_r_x_minus_btn = "nul"
input_player7_r_x_minus_axis = "nul"
input_player7_r_y_plus = "nul"
input_player7_r_y_plus_btn = "nul"
input_player7_r_y_plus_axis = "nul"
input_player7_r_y_minus = "nul"
input_player7_r_y_minus_btn = "nul"
input_player7_r_y_minus_axis = "nul"
input_player7_turbo = "nul"
input_player7_turbo_btn = "nul"
input_player7_turbo_axis = "nul"
input_player8_b = "nul"
input_player8_b_btn = "nul"
input_player8_b_axis = "nul"
input_player8_y = "nul"
input_player8_y_btn = "nul"
input_player8_y_axis = "nul"
input_player8_select = "nul"
input_player8_select_btn = "nul"
input_player8_select_axis = "nul"
input_player8_start = "nul"
input_player8_start_btn = "nul"
input_player8_start_axis = "nul"
input_player8_up = "nul"
input_player8_up_btn = "nul"
input_player8_up_axis = "nul"
input_player8_down = "nul"
input_player8_down_btn = "nul"
input_player8_down_axis = "nul"
input_player8_left = "nul"
input_player8_left_btn = "nul"
input_player8_left_axis = "nul"
input_player8_right = "nul"
input_player8_right_btn = "nul"
input_player8_right_axis = "nul"
input_player8_a = "nul"
input_player8_a_btn = "nul"
input_player8_a_axis = "nul"
input_player8_x = "nul"
input_player8_x_btn = "nul"
input_player8_x_axis = "nul"
input_player8_l = "nul"
input_player8_l_btn = "nul"
input_player8_l_axis = "nul"
input_player8_r = "nul"
input_player8_r_btn = "nul"
input_player8_r_axis = "nul"
input_player8_l2 = "nul"
input_player8_l2_btn = "nul"
input_player8_l2_axis = "nul"
input_player8_r2 = "nul"
input_player8_r2_btn = "nul"
input_player8_r2_axis = "nul"
input_player8_l3 = "nul"
input_player8_l3_btn = "nul"
input_player8_l3_axis = "nul"
input_player8_r3 = "nul"
input_player8_r3_btn = "nul"
input_player8_r3_axis = "nul"
input_player8_l_x_plus = "nul"
input_player8_l_x_plus_btn = "nul"
input_player8_l_x_plus_axis = "nul"
input_player8_l_x_minus = "nul"
input_player8_l_x_minus_btn = "nul"
input_player8_l_x_minus_axis = "nul"
input_player8_l_y_plus = "nul"
input_player8_l_y_plus_btn = "nul"
input_player8_l_y_plus_axis = "nul"
input_player8_l_y_minus = "nul"
input_player8_l_y_minus_btn = "nul"
input_player8_l_y_minus_axis = "nul"
input_player8_r_x_plus = "nul"
input_player8_r_x_plus_btn = "nul"
input_player8_r_x_plus_axis = "nul"
input_player8_r_x_minus = "nul"
input_player8_r_x_minus_btn = "nul"
input_player8_r_x_minus_axis = "nul"
input_player8_r_y_plus = "nul"
input_player8_r_y_plus_btn = "nul"
input_player8_r_y_plus_axis = "nul"
input_player8_r_y_minus = "nul"
input_player8_r_y_minus_btn = "nul"
input_player8_r_y_minus_axis = "nul"
input_player8_turbo = "nul"
input_player8_turbo_btn = "nul"
input_player8_turbo_axis = "nul"
input_player9_b = "nul"
input_player9_b_btn = "nul"
input_player9_b_axis = "nul"
input_player9_y = "nul"
input_player9_y_btn = "nul"
input_player9_y_axis = "nul"
input_player9_select = "nul"
input_player9_select_btn = "nul"
input_player9_select_axis = "nul"
input_player9_start = "nul"
input_player9_start_btn = "nul"
input_player9_start_axis = "nul"
input_player9_up = "nul"
input_player9_up_btn = "nul"
input_player9_up_axis = "nul"
input_player9_down = "nul"
input_player9_down_btn = "nul"
input_player9_down_axis = "nul"
input_player9_left = "nul"
input_player9_left_btn = "nul"
input_player9_left_axis = "nul"
input_player9_right = "nul"
input_player9_right_btn = "nul"
input_player9_right_axis = "nul"
input_player9_a = "nul"
input_player9_a_btn = "nul"
input_player9_a_axis = "nul"
input_player9_x = "nul"
input_player9_x_btn = "nul"
input_player9_x_axis = "nul"
input_player9_l = "nul"
input_player9_l_btn = "nul"
input_player9_l_axis = "nul"
input_player9_r = "nul"
input_player9_r_btn = "nul"
input_player9_r_axis = "nul"
input_player9_l2 = "nul"
input_player9_l2_btn = "nul"
input_player9_l2_axis = "nul"
input_player9_r2 = "nul"
input_player9_r2_btn = "nul"
input_player9_r2_axis = "nul"
input_player9_l3 = "nul"
input_player9_l3_btn = "nul"
input_player9_l3_axis = "nul"
input_player9_r3 = "nul"
input_player9_r3_btn = "nul"
input_player9_r3_axis = "nul"
input_player9_l_x_plus = "nul"
input_player9_l_x_plus_btn = "nul"
input_player9_l_x_plus_axis = "nul"
input_player9_l_x_minus = "nul"
input_player9_l_x_minus_btn = "nul"
input_player9_l_x_minus_axis = "nul"
input_player9_l_y_plus = "nul"
input_player9_l_y_plus_btn = "nul"
input_player9_l_y_plus_axis = "nul"
input_player9_l_y_minus = "nul"
input_player9_l_y_minus_btn = "nul"
input_player9_l_y_minus_axis = "nul"
input_player9_r_x_plus = "nul"
input_player9_r_x_plus_btn = "nul"
input_player9_r_x_plus_axis = "nul"
input_player9_r_x_minus = "nul"
input_player9_r_x_minus_btn = "nul"
input_player9_r_x_minus_axis = "nul"
input_player9_r_y_plus = "nul"
input_player9_r_y_plus_btn = "nul"
input_player9_r_y_plus_axis = "nul"
input_player9_r_y_minus = "nul"
input_player9_r_y_minus_btn = "nul"
input_player9_r_y_minus_axis = "nul"
input_player9_turbo = "nul"
input_player9_turbo_btn = "nul"
input_player9_turbo_axis = "nul"
input_player10_b = "nul"
input_player10_b_btn = "nul"
input_player10_b_axis = "nul"
input_player10_y = "nul"
input_player10_y_btn = "nul"
input_player10_y_axis = "nul"
input_player10_select = "nul"
input_player10_select_btn = "nul"
input_player10_select_axis = "nul"
input_player10_start = "nul"
input_player10_start_btn = "nul"
input_player10_start_axis = "nul"
input_player10_up = "nul"
input_player10_up_btn = "nul"
input_player10_up_axis = "nul"
input_player10_down = "nul"
input_player10_down_btn = "nul"
input_player10_down_axis = "nul"
input_player10_left = "nul"
input_player10_left_btn = "nul"
input_player10_left_axis = "nul"
input_player10_right = "nul"
input_player10_right_btn = "nul"
input_player10_right_axis = "nul"
input_player10_a = "nul"
input_player10_a_btn = "nul"
input_player10_a_axis = "nul"
input_player10_x = "nul"
input_player10_x_btn = "nul"
input_player10_x_axis = "nul"
input_player10_l = "nul"
input_player10_l_btn = "nul"
input_player10_l_axis = "nul"
input_player10_r = "nul"
input_player10_r_btn = "nul"
input_player10_r_axis = "nul"
input_player10_l2 = "nul"
input_player10_l2_btn = "nul"
input_player10_l2_axis = "nul"
input_player10_r2 = "nul"
input_player10_r2_btn = "nul"
input_player10_r2_axis = "nul"
input_player10_l3 = "nul"
input_player10_l3_btn = "nul"
input_player10_l3_axis = "nul"
input_player10_r3 = "nul"
input_player10_r3_btn = "nul"
input_player10_r3_axis = "nul"
input_player10_l_x_plus = "nul"
input_player10_l_x_plus_btn = "nul"
input_player10_l_x_plus_axis = "nul"
input_player10_l_x_minus = "nul"
input_player10_l_x_minus_btn = "nul"
input_player10_l_x_minus_axis = "nul"
input_player10_l_y_plus = "nul"
input_player10_l_y_plus_btn = "nul"
input_player10_l_y_plus_axis = "nul"
input_player10_l_y_minus = "nul"
input_player10_l_y_minus_btn = "nul"
input_player10_l_y_minus_axis = "nul"
input_player10_r_x_plus = "nul"
input_player10_r_x_plus_btn = "nul"
input_player10_r_x_plus_axis = "nul"
input_player10_r_x_minus = "nul"
input_player10_r_x_minus_btn = "nul"
input_player10_r_x_minus_axis = "nul"
input_player10_r_y_plus = "nul"
input_player10_r_y_plus_btn = "nul"
input_player10_r_y_plus_axis = "nul"
input_player10_r_y_minus = "nul"
input_player10_r_y_minus_btn = "nul"
input_player10_r_y_minus_axis = "nul"
input_player10_turbo = "nul"
input_player10_turbo_btn = "nul"
input_player10_turbo_axis = "nul"
input_player11_b = "nul"
input_player11_b_btn = "nul"
input_player11_b_axis = "nul"
input_player11_y = "nul"
input_player11_y_btn = "nul"
input_player11_y_axis = "nul"
input_player11_select = "nul"
input_player11_select_btn = "nul"
input_player11_select_axis = "nul"
input_player11_start = "nul"
input_player11_start_btn = "nul"
input_player11_start_axis = "nul"
input_player11_up = "nul"
input_player11_up_btn = "nul"
input_player11_up_axis = "nul"
input_player11_down = "nul"
input_player11_down_btn = "nul"
input_player11_down_axis = "nul"
input_player11_left = "nul"
input_player11_left_btn = "nul"
input_player11_left_axis = "nul"
input_player11_right = "nul"
input_player11_right_btn = "nul"
input_player11_right_axis = "nul"
input_player11_a = "nul"
input_player11_a_btn = "nul"
input_player11_a_axis = "nul"
input_player11_x = "nul"
input_player11_x_btn = "nul"
input_player11_x_axis = "nul"
input_player11_l = "nul"
input_player11_l_btn = "nul"
input_player11_l_axis = "nul"
input_player11_r = "nul"
input_player11_r_btn = "nul"
input_player11_r_axis = "nul"
input_player11_l2 = "nul"
input_player11_l2_btn = "nul"
input_player11_l2_axis = "nul"
input_player11_r2 = "nul"
input_player11_r2_btn = "nul"
input_player11_r2_axis = "nul"
input_player11_l3 = "nul"
input_player11_l3_btn = "nul"
input_player11_l3_axis = "nul"
input_player11_r3 = "nul"
input_player11_r3_btn = "nul"
input_player11_r3_axis = "nul"
input_player11_l_x_plus = "nul"
input_player11_l_x_plus_btn = "nul"
input_player11_l_x_plus_axis = "nul"
input_player11_l_x_minus = "nul"
input_player11_l_x_minus_btn = "nul"
input_player11_l_x_minus_axis = "nul"
input_player11_l_y_plus = "nul"
input_player11_l_y_plus_btn = "nul"
input_player11_l_y_plus_axis = "nul"
input_player11_l_y_minus = "nul"
input_player11_l_y_minus_btn = "nul"
input_player11_l_y_minus_axis = "nul"
input_player11_r_x_plus = "nul"
input_player11_r_x_plus_btn = "nul"
input_player11_r_x_plus_axis = "nul"
input_player11_r_x_minus = "nul"
input_player11_r_x_minus_btn = "nul"
input_player11_r_x_minus_axis = "nul"
input_player11_r_y_plus = "nul"
input_player11_r_y_plus_btn = "nul"
input_player11_r_y_plus_axis = "nul"
input_player11_r_y_minus = "nul"
input_player11_r_y_minus_btn = "nul"
input_player11_r_y_minus_axis = "nul"
input_player11_turbo = "nul"
input_player11_turbo_btn = "nul"
input_player11_turbo_axis = "nul"
input_player12_b = "nul"
input_player12_b_btn = "nul"
input_player12_b_axis = "nul"
input_player12_y = "nul"
input_player12_y_btn = "nul"
input_player12_y_axis = "nul"
input_player12_select = "nul"
input_player12_select_btn = "nul"
input_player12_select_axis = "nul"
input_player12_start = "nul"
input_player12_start_btn = "nul"
input_player12_start_axis = "nul"
input_player12_up = "nul"
input_player12_up_btn = "nul"
input_player12_up_axis = "nul"
input_player12_down = "nul"
input_player12_down_btn = "nul"
input_player12_down_axis = "nul"
input_player12_left = "nul"
input_player12_left_btn = "nul"
input_player12_left_axis = "nul"
input_player12_right = "nul"
input_player12_right_btn = "nul"
input_player12_right_axis = "nul"
input_player12_a = "nul"
input_player12_a_btn = "nul"
input_player12_a_axis = "nul"
input_player12_x = "nul"
input_player12_x_btn = "nul"
input_player12_x_axis = "nul"
input_player12_l = "nul"
input_player12_l_btn = "nul"
input_player12_l_axis = "nul"
input_player12_r = "nul"
input_player12_r_btn = "nul"
input_player12_r_axis = "nul"
input_player12_l2 = "nul"
input_player12_l2_btn = "nul"
input_player12_l2_axis = "nul"
input_player12_r2 = "nul"
input_player12_r2_btn = "nul"
input_player12_r2_axis = "nul"
input_player12_l3 = "nul"
input_player12_l3_btn = "nul"
input_player12_l3_axis = "nul"
input_player12_r3 = "nul"
input_player12_r3_btn = "nul"
input_player12_r3_axis = "nul"
input_player12_l_x_plus = "nul"
input_player12_l_x_plus_btn = "nul"
input_player12_l_x_plus_axis = "nul"
input_player12_l_x_minus = "nul"
input_player12_l_x_minus_btn = "nul"
input_player12_l_x_minus_axis = "nul"
input_player12_l_y_plus = "nul"
input_player12_l_y_plus_btn = "nul"
input_player12_l_y_plus_axis = "nul"
input_player12_l_y_minus = "nul"
input_player12_l_y_minus_btn = "nul"
input_player12_l_y_minus_axis = "nul"
input_player12_r_x_plus = "nul"
input_player12_r_x_plus_btn = "nul"
input_player12_r_x_plus_axis = "nul"
input_player12_r_x_minus = "nul"
input_player12_r_x_minus_btn = "nul"
input_player12_r_x_minus_axis = "nul"
input_player12_r_y_plus = "nul"
input_player12_r_y_plus_btn = "nul"
input_player12_r_y_plus_axis = "nul"
input_player12_r_y_minus = "nul"
input_player12_r_y_minus_btn = "nul"
input_player12_r_y_minus_axis = "nul"
input_player12_turbo = "nul"
input_player12_turbo_btn = "nul"
input_player12_turbo_axis = "nul"
input_player13_b = "nul"
input_player13_b_btn = "nul"
input_player13_b_axis = "nul"
input_player13_y = "nul"
input_player13_y_btn = "nul"
input_player13_y_axis = "nul"
input_player13_select = "nul"
input_player13_select_btn = "nul"
input_player13_select_axis = "nul"
input_player13_start = "nul"
input_player13_start_btn = "nul"
input_player13_start_axis = "nul"
input_player13_up = "nul"
input_player13_up_btn = "nul"
input_player13_up_axis = "nul"
input_player13_down = "nul"
input_player13_down_btn = "nul"
input_player13_down_axis = "nul"
input_player13_left = "nul"
input_player13_left_btn = "nul"
input_player13_left_axis = "nul"
input_player13_right = "nul"
input_player13_right_btn = "nul"
input_player13_right_axis = "nul"
input_player13_a = "nul"
input_player13_a_btn = "nul"
input_player13_a_axis = "nul"
input_player13_x = "nul"
input_player13_x_btn = "nul"
input_player13_x_axis = "nul"
input_player13_l = "nul"
input_player13_l_btn = "nul"
input_player13_l_axis = "nul"
input_player13_r = "nul"
input_player13_r_btn = "nul"
input_player13_r_axis = "nul"
input_player13_l2 = "nul"
input_player13_l2_btn = "nul"
input_player13_l2_axis = "nul"
input_player13_r2 = "nul"
input_player13_r2_btn = "nul"
input_player13_r2_axis = "nul"
input_player13_l3 = "nul"
input_player13_l3_btn = "nul"
input_player13_l3_axis = "nul"
input_player13_r3 = "nul"
input_player13_r3_btn = "nul"
input_player13_r3_axis = "nul"
input_player13_l_x_plus = "nul"
input_player13_l_x_plus_btn = "nul"
input_player13_l_x_plus_axis = "nul"
input_player13_l_x_minus = "nul"
input_player13_l_x_minus_btn = "nul"
input_player13_l_x_minus_axis = "nul"
input_player13_l_y_plus = "nul"
input_player13_l_y_plus_btn = "nul"
input_player13_l_y_plus_axis = "nul"
input_player13_l_y_minus = "nul"
input_player13_l_y_minus_btn = "nul"
input_player13_l_y_minus_axis = "nul"
input_player13_r_x_plus = "nul"
input_player13_r_x_plus_btn = "nul"
input_player13_r_x_plus_axis = "nul"
input_player13_r_x_minus = "nul"
input_player13_r_x_minus_btn = "nul"
input_player13_r_x_minus_axis = "nul"
input_player13_r_y_plus = "nul"
input_player13_r_y_plus_btn = "nul"
input_player13_r_y_plus_axis = "nul"
input_player13_r_y_minus = "nul"
input_player13_r_y_minus_btn = "nul"
input_player13_r_y_minus_axis = "nul"
input_player13_turbo = "nul"
input_player13_turbo_btn = "nul"
input_player13_turbo_axis = "nul"
input_player14_b = "nul"
input_player14_b_btn = "nul"
input_player14_b_axis = "nul"
input_player14_y = "nul"
input_player14_y_btn = "nul"
input_player14_y_axis = "nul"
input_player14_select = "nul"
input_player14_select_btn = "nul"
input_player14_select_axis = "nul"
input_player14_start = "nul"
input_player14_start_btn = "nul"
input_player14_start_axis = "nul"
input_player14_up = "nul"
input_player14_up_btn = "nul"
input_player14_up_axis = "nul"
input_player14_down = "nul"
input_player14_down_btn = "nul"
input_player14_down_axis = "nul"
input_player14_left = "nul"
input_player14_left_btn = "nul"
input_player14_left_axis = "nul"
input_player14_right = "nul"
input_player14_right_btn = "nul"
input_player14_right_axis = "nul"
input_player14_a = "nul"
input_player14_a_btn = "nul"
input_player14_a_axis = "nul"
input_player14_x = "nul"
input_player14_x_btn = "nul"
input_player14_x_axis = "nul"
input_player14_l = "nul"
input_player14_l_btn = "nul"
input_player14_l_axis = "nul"
input_player14_r = "nul"
input_player14_r_btn = "nul"
input_player14_r_axis = "nul"
input_player14_l2 = "nul"
input_player14_l2_btn = "nul"
input_player14_l2_axis = "nul"
input_player14_r2 = "nul"
input_player14_r2_btn = "nul"
input_player14_r2_axis = "nul"
input_player14_l3 = "nul"
input_player14_l3_btn = "nul"
input_player14_l3_axis = "nul"
input_player14_r3 = "nul"
input_player14_r3_btn = "nul"
input_player14_r3_axis = "nul"
input_player14_l_x_plus = "nul"
input_player14_l_x_plus_btn = "nul"
input_player14_l_x_plus_axis = "nul"
input_player14_l_x_minus = "nul"
input_player14_l_x_minus_btn = "nul"
input_player14_l_x_minus_axis = "nul"
input_player14_l_y_plus = "nul"
input_player14_l_y_plus_btn = "nul"
input_player14_l_y_plus_axis = "nul"
input_player14_l_y_minus = "nul"
input_player14_l_y_minus_btn = "nul"
input_player14_l_y_minus_axis = "nul"
input_player14_r_x_plus = "nul"
input_player14_r_x_plus_btn = "nul"
input_player14_r_x_plus_axis = "nul"
input_player14_r_x_minus = "nul"
input_player14_r_x_minus_btn = "nul"
input_player14_r_x_minus_axis = "nul"
input_player14_r_y_plus = "nul"
input_player14_r_y_plus_btn = "nul"
input_player14_r_y_plus_axis = "nul"
input_player14_r_y_minus = "nul"
input_player14_r_y_minus_btn = "nul"
input_player14_r_y_minus_axis = "nul"
input_player14_turbo = "nul"
input_player14_turbo_btn = "nul"
input_player14_turbo_axis = "nul"
input_player15_b = "nul"
input_player15_b_btn = "nul"
input_player15_b_axis = "nul"
input_player15_y = "nul"
input_player15_y_btn = "nul"
input_player15_y_axis = "nul"
input_player15_select = "nul"
input_player15_select_btn = "nul"
input_player15_select_axis = "nul"
input_player15_start = "nul"
input_player15_start_btn = "nul"
input_player15_start_axis = "nul"
input_player15_up = "nul"
input_player15_up_btn = "nul"
input_player15_up_axis = "nul"
input_player15_down = "nul"
input_player15_down_btn = "nul"
input_player15_down_axis = "nul"
input_player15_left = "nul"
input_player15_left_btn = "nul"
input_player15_left_axis = "nul"
input_player15_right = "nul"
input_player15_right_btn = "nul"
input_player15_right_axis = "nul"
input_player15_a = "nul"
input_player15_a_btn = "nul"
input_player15_a_axis = "nul"
input_player15_x = "nul"
input_player15_x_btn = "nul"
input_player15_x_axis = "nul"
input_player15_l = "nul"
input_player15_l_btn = "nul"
input_player15_l_axis = "nul"
input_player15_r = "nul"
input_player15_r_btn = "nul"
input_player15_r_axis = "nul"
input_player15_l2 = "nul"
input_player15_l2_btn = "nul"
input_player15_l2_axis = "nul"
input_player15_r2 = "nul"
input_player15_r2_btn = "nul"
input_player15_r2_axis = "nul"
input_player15_l3 = "nul"
input_player15_l3_btn = "nul"
input_player15_l3_axis = "nul"
input_player15_r3 = "nul"
input_player15_r3_btn = "nul"
input_player15_r3_axis = "nul"
input_player15_l_x_plus = "nul"
input_player15_l_x_plus_btn = "nul"
input_player15_l_x_plus_axis = "nul"
input_player15_l_x_minus = "nul"
input_player15_l_x_minus_btn = "nul"
input_player15_l_x_minus_axis = "nul"
input_player15_l_y_plus = "nul"
input_player15_l_y_plus_btn = "nul"
input_player15_l_y_plus_axis = "nul"
input_player15_l_y_minus = "nul"
input_player15_l_y_minus_btn = "nul"
input_player15_l_y_minus_axis = "nul"
input_player15_r_x_plus = "nul"
input_player15_r_x_plus_btn = "nul"
input_player15_r_x_plus_axis = "nul"
input_player15_r_x_minus = "nul"
input_player15_r_x_minus_btn = "nul"
input_player15_r_x_minus_axis = "nul"
input_player15_r_y_plus = "nul"
input_player15_r_y_plus_btn = "nul"
input_player15_r_y_plus_axis = "nul"
input_player15_r_y_minus = "nul"
input_player15_r_y_minus_btn = "nul"
input_player15_r_y_minus_axis = "nul"
input_player15_turbo = "nul"
input_player15_turbo_btn = "nul"
input_player15_turbo_axis = "nul"
input_player16_b = "nul"
input_player16_b_btn = "nul"
input_player16_b_axis = "nul"
input_player16_y = "nul"
input_player16_y_btn = "nul"
input_player16_y_axis = "nul"
input_player16_select = "nul"
input_player16_select_btn = "nul"
input_player16_select_axis = "nul"
input_player16_start = "nul"
input_player16_start_btn = "nul"
input_player16_start_axis = "nul"
input_player16_up = "nul"
input_player16_up_btn = "nul"
input_player16_up_axis = "nul"
input_player16_down = "nul"
input_player16_down_btn = "nul"
input_player16_down_axis = "nul"
input_player16_left = "nul"
input_player16_left_btn = "nul"
input_player16_left_axis = "nul"
input_player16_right = "nul"
input_player16_right_btn = "nul"
input_player16_right_axis = "nul"
input_player16_a = "nul"
input_player16_a_btn = "nul"
input_player16_a_axis = "nul"
input_player16_x = "nul"
input_player16_x_btn = "nul"
input_player16_x_axis = "nul"
input_player16_l = "nul"
input_player16_l_btn = "nul"
input_player16_l_axis = "nul"
input_player16_r = "nul"
input_player16_r_btn = "nul"
input_player16_r_axis = "nul"
input_player16_l2 = "nul"
input_player16_l2_btn = "nul"
input_player16_l2_axis = "nul"
input_player16_r2 = "nul"
input_player16_r2_btn = "nul"
input_player16_r2_axis = "nul"
input_player16_l3 = "nul"
input_player16_l3_btn = "nul"
input_player16_l3_axis = "nul"
input_player16_r3 = "nul"
input_player16_r3_btn = "nul"
input_player16_r3_axis = "nul"
input_player16_l_x_plus = "nul"
input_player16_l_x_plus_btn = "nul"
input_player16_l_x_plus_axis = "nul"
input_player16_l_x_minus = "nul"
input_player16_l_x_minus_btn = "nul"
input_player16_l_x_minus_axis = "nul"
input_player16_l_y_plus = "nul"
input_player16_l_y_plus_btn = "nul"
input_player16_l_y_plus_axis = "nul"
input_player16_l_y_minus = "nul"
input_player16_l_y_minus_btn = "nul"
input_player16_l_y_minus_axis = "nul"
input_player16_r_x_plus = "nul"
input_player16_r_x_plus_btn = "nul"
input_player16_r_x_plus_axis = "nul"
input_player16_r_x_minus = "nul"
input_player16_r_x_minus_btn = "nul"
input_player16_r_x_minus_axis = "nul"
input_player16_r_y_plus = "nul"
input_player16_r_y_plus_btn = "nul"
input_player16_r_y_plus_axis = "nul"
input_player16_r_y_minus = "nul"
input_player16_r_y_minus_btn = "nul"
input_player16_r_y_minus_axis = "nul"
input_player16_turbo = "nul"
input_player16_turbo_btn = "nul"
input_player16_turbo_axis = "nul"
core_specific_config = "false"
libretro_log_level = "0"
log_verbosity = "false"
perfcnt_enable = "false"
archive_mode = "0"

Wie ihr seht, gibt es nicht nur Controller-Einstellung in der retroarch.cfg. Alle Möglichkeiten zu erklären würde den Rahmen sprengen, ich überlasse es daher eurem Forscherdrang, den Schaltern auf den Grund zugehen.

Ihr könnt übrigens auch einige der Sondertasten direkt mit retroarch-joyconfig zuweisen! Dazu müsst ihr nur den Parameter -M für viele oder -m für wenige Sondertasten mit angeben, also z. B. sudo ./retroarch-joyconfig -o player1.cfg -p 1 -j 0 -t 5 -M. Wie oben angedeutet, gibt es retroarch-joyconfig ab dem Image 3.3 nicht mehr!

Ich habe vorhin erwähnt, dass die Werte aus der retroarch.cfg im Verzeichnis /opt/retropie/configs/all immer dann genommen werden, wenn für den jeweiligen Emulator keine eigenen Werte vorliegen. Ihr braucht nur mit cd .. aus dem all-Verzeichnis eine Ebene zurückgehen. Dort findet ihr dann unter /opt/retropie/configs eigene Unterordner für die unterschiedlichen RetroArch-Systeme.

In diesen Verzeichnisssen könnt ihr Einstellungen für den jeweiligen Emulator hinterlegen.
In diesen Verzeichnisssen könnt ihr Einstellungen für den jeweiligen Emulator hinterlegen.

Ihr könnt mittlerweile auf diese Ordner auch direkt übers Netzwerk zugreifen. Schaut einfach in das \\retropie\configs-Verzeichnis.

Auch übers Netzwerk habt ihr Zugriff auf den „configs“-Ordner
Auch übers Netzwerk habt ihr Zugriff auf den „configs“-Ordner

Möchtet ihr z. B. den NES-Emulator lieber mit GUIDE + Y verlassen, dann reicht es im nes-Verzeichnis in die dort befindliche retroarch.cfg die Zeile

input_exit_emulator_btn = "3"

aufzunehmen.

Beachtet dabei bitte den Hinweis am Anfang der Datei:

# Settings made here will only override settings in the global retroarch.cfg 
if placed above the #include line

Die Übersteuerungen müssen also vor #include „/opt/retropie/configs/all/retroarch.cfg“ stehen!

Sollte es keine retroarch.cfg geben, legt einfach eine an. Alle anderen Einstellungen kommen aus der retroarch.cfg im all-Verzeichnis, nur die Taste zum Verlassen wurde übersteuert.

 

Beim XBox-Pad das Blinken verhindern
Achtung: Seit dem Image 4.0 leuchtet bereits direkt nur noch die passende LED, es ist nicht mehr notwendig dies manuell zu ändern. Möchtet ihr trotzdem wissen, wie es gemacht wurde, findet ihr die Infos im archivierten Vorläufer, dieses Beitrages.

Geschafft, nur eine LED leuchtet.
Geschafft, nur eine LED leuchtet.

Jetzt müsst ihr noch, wie eingangs erwähnt, den Controller erneut konfigurieren. Richtet ihn nochmal in der EmulationStation ein und geht dann ggf. in die RGUI, um die Controller erneut für RetroArch zu konfigurieren.


Ich hoffe ihr konntet nun eure Controller einrichten und habt ein paar neue Anregungen, was sich alles einstellen läßt, bekommen.


Schrott!!Naja...Geht so...Ganz gut...SUPER! (24 Bewertungen | Ø 4,88 von 5 | 97,50%)

Loading...


 

<<< zurück | weiter >>>

181 Gedanken zu „RetroPie (V4.2): Controller einrichten“

  1. Hallo Jörn,

    ich hoffe hier doch noch mein Problem zu lösen.
    Allerdings geht es um einen retropie.
    Ich musste leider alles neu installieren und jetzt habe ich offenbar ein anderes Retroarch.

    Es geht darum, Spiele mit vier Spielern zu spielen und dazu hatte ich bei meinem alten System unter Retroarch bei user 2 den controller auf “multitab” gestellt. Diese multitab-option gibt es jetzt nicht mehr. Ich habe alles versucht, drei mal die daten neu auf die sd-Karte geschrieben und in unterschiedlichen Reihenfolgen Updates, Reinstalls usw. gemacht..
    Leider habe ich auf der PC-Festplatte auch nicht genug Platz, sonst hätte ich ein Backup gehabt…

    Viele grüße
    Jan

    1. Moin Jan,

      wirklich helfen kann ich dir leider nicht mehr, bin vollkommen aus dem Thema raus.

      Hast du mal ein Multitap-Spiel geladen und dann in die Optionen geschaut?
      Sonst könntest du wohl nur nach einem alten Image im Netz suchen, das installieren und nicht updaten.

  2. Super Tutorial. Ohne das wäre ich nicht weiter gekommen.
    Habe ein Problem mit MAME-2003.
    Vielleicht hast ja dazu auch Rat.
    Die Konfig der 2 Joysticks und Knöpfe am Bartop hat wunderbar geklappt.
    Es werden beide Controller erkannt und funktionieren auch.
    Wenn ich allerdings ein Game (zBsp Pengo oder Xevious) für 2 Spieler starte, wird der Input immer vom Controller 1 geholt. Spieler 2 muss also dann auch auf dem Controller 1 spielen.
    Wo kann ich das richtig konfigurieren?

      1. Ok danke. Problem hat sich erledigt.
        Das ist ROM abhängig und kann in der MAME Konfig des betr. ROMs eingestellt werden.
        Wenn man das auf “Cocktail” stellt, wird der 2te Joystick verwendet. Das Bild steht aber dann Kopf bei Spieler 2 🙁
        Aber eigentlich logisch, bei einem Spieltisch.

  3. Moin Moin, hoffe hier kann mir mit meinem Retropie geholfen werden. Es geht um den n64 emulator und dem Spiel Mario Kart 64. Zwei Ps4 controllern die per USB angeschlossen sind.

    Ich möchte das Spiel gern zu zweit spiele nur leider wird der zweite Controller im Spiel als Nr. 3 erkannt!

    Wenn ich das Spiel für 3 Personen starte kann ich für Player 1 und Player 3 die entsprechenden Figuren
    auswählen. Wenn ich für 2 Personen starte geht nur die Auswahl für Player 1. Das zweite Pad kann keine auswahl treffen.

    Irgendwie muss ich den zweiten PS4 Controller von Player 3 auf 2 ändern können….

    Hab schon alle USB Ports ausprobiert und die mupen64plus.cfg versucht anzupassen nur leider wird die .cfg nach neustart der Pi wieder zurückgesetzt!

    Hier einmal die beschreibung wie ich die mupen64plus.cfg angepasst habe.

    I struggled with this same thing for a time, RetroPie is consuming the motion control as a secondary device, Libretro is able to ignore this but Mupen64Plus does not for whatever reason and lr-Mupen is trash. Standard LibRetro options/config does not effect the Mupen64Plus emulator. Assuming you still need a fix, here’s what ended up working for me.

    all from terminal, I putty’d in to make my changes.

    Make a copy of the config file you’re going to edit:

    sudo cp /opt/retropie/configs/n64/mupen64plus.cfg /opt/retropie/configs/n64/mupen64plusold.cfg

    Edit the original:

    sudo nano /opt/retropie/configs/n64/mupen64plus.cfg

    Scroll until you find

    [Input-SDL-Control1]

    Take a note of what you see here, this is a good control config, note that the name is “Wireless Controller” or the like.

    I changed the Second Line; Controller Configuration mode from mode = 2 to mode = 1

    Scrolling down, you’ll find :

    [Input-SDL-Control2], Note the name of the device of the device is “Wireless Controller Motion Sensors”

    This is no good to us, I commented out the entire Controller “using #” including the header.

    [Input-SDL-Control3], is the 2nd Controller, name should reflect similar to Control1, I renamed the header to [Input-SDL-Control2] , changed the controller configuration mode to 1, same as in the first controlset and left the rest of that item alone.

    [Input-SDL-Control4], I commented out in the same way as the first [Input-SDL-Control2], as it’s showing “Wireless Controller Motion Sensors” in the name.

    Ctrl-O to save

    Ctrl-X to exit

    Sudo Reboot, reboots the device and your MarioKart64 should work just fine.

  4. Servus zusammen,
    ich habe 6 Controller (verschiedene Controller – keine Original-Controller sondern NoName-Nachbau) angeschlossen.
    2x XBOX, 2x SNES, 2x N64.
    Nun möchte ich natürlich die jeweiligen Spiele mit den jeweiligen Controllern spielen.
    Habe alle 6 Controller gut durchkonfigurieren können.

    Nun habe ich folgendes Problem:
    Bei den SNES-Spielen ist der erste Controller der SNES-Controller un der zweite der XBOX-Controller.
    Bei den anderen Konsolen passt es auch nicht.

    Gibt es eine Möglichkeit die Controller der jeweiligen Konsole zuzuweisen?
    Ich habe auch probiert nur die jeweiligen anzuschließen die ich gerade benötige – da es aber No-Name-Produkte sind funktioniert die Auto-Konfiguration anscheinend nicht richtig (Tasten sind falsch belegt – ich müsste bei jedem Controller wieder bevor ich spiele die Tasten durchkonfigurieren…)

    Gruß Stephan

    1. Du kannst in Retroarch für jede Konsole den Player 1,2,3,4 manuell verändern. So kannst du einstellen dass bei SNES der Player zwei dann der Controller ist, den du eigentlich als Controller 4 eingerichet hast

  5. Moin, da habt Ihr Euch viel Mühe gemacht.
    Hilft echt weiter.
    Allerdings habe ich auch ein Problem dessen Lösung ich hier leider nicht gefunden habe.
    Ich habe einen Paspi 3, 2 Stck. XSource Controller mit je insgesamt 10 Tasten und einem Joystick. Das aktuelle Retropie Image installiert, die Einstellungen “eingedeutscht” und versucht die Controller zu aktivieren. Die werden erkannt, alle Einstellungen werden angenommen bis zum Punkt “OK” funktioniert das alles wunderbar.
    An der Stelle geht’s leider nicht weiter.
    Ich kann “OK” nicht auslösen, auch nicht mit der angeschlossenen Tastatur. Wahrscheinlich bin ich einfach nur zu blöd. Vielleicht habt ihr ja einen Tipp für mich.
    ADMIN: Post von der Startseite hier her verschoben.

  6. Hi,
    Erstmal ein dickes Danke für die Erklärungen.
    Ich habe allerdings eine Frage/Problem. Vielleicht kann mir die Community ja weiterhelfen?!

    Ich möchte 2 WII U Pro Controller benutzen. Ich habe an meinem Pie beide Controller via Bluetooth verbunden und configuriert. Allerdings werden beide Controller als Master erkannt. Im Spiel selbst funktioniert nur ein Controller. Wie bekomme ich das konfiguriert, dass beide Controller benutzt werden können? Geht das überhaupt via Bluetooth? Im Bluetooth Menü werden beide angezeigt, dass die verbunden sind.

    Über Hilfe von euch freue ich mich sehr!

    Mit freundlichen Grüßen
    Speedyconzale

  7. Ich bräuchte bitte Hilfe.

    Gibt es eine Möglichkeit, in Vice (Retropie) das D-Pad statt die Sticks zu benutzen? Ich scheitere bei der Konfiguration und finde auch sonst nix Internet.

  8. Hi Jörn,

    als allererstes mal fettes Merci für deine ausführlichen Tutorials, haben mir schon oft weitergeholfen!
    Mittlerweile (nach einigen malen neu aufsetzen und rumbasteln) verstehe ich immer besser die Zusammenhänge innerhalb von Retropie und durch die Updates wird die Bedienung ja auch immer komfortabler.
    Doch nun zu meinem Problem:
    Bei der N64-Emulation nutze ich aufgrund der speziellen Konstruktion des N64-Joypads (insbesondere des Z- und der C-Buttons) anstelle eines Xbox- oder PS3-Controllers am liebsten meine originalen N64-Pads in Verbindung mit diesem USB-Adapter:
    http://www.myxl-shop.de/j-s-2-n64-controller-adapter.html?id=56348210&gclid=CPLh9vSC_tECFXEo0wodh6cIPw

    (Hersteller HuiJia?)
    Bisher habe ich den Mupen64-Standalone-Emulator genutzt und das hat auch mit ein bisschen Nachbessern in der InputAutoCfg ganz gut funktioniert. Mit etwas Feinschliff an Analog-Deadzone und –Peak lief auch der Analog-Stick wunschgemäß.
    Seit dem aktuellen Image 4.1 gibt es ja einen neuen Libretro-Emulator für das N64. Bisherigen Erfahrungsberichten zu urteilen liefert der wohl eine ganz gute Performance. Außerdem kann man damit ja auch die Retroarch-Einstellungen nutzen. Daher würde ich ihn nun auch gerne austesten und, falls er läuft wie erhofft, gerne zum Standard-Emulator machen.
    Allerdings wird der Analog-Stick meines N64-Joypads unter Libretro/Retroarch nicht erkannt. Bereits bei der Einrichtung in der EmulationStation spricht das System auf den Stick nicht an, was mir ehrlich gesagt ein Rätsel ist, da wie oben beschrieben der Standalone ihn ja problemlos erkennt. So gesehen ist es ja dann auch ein systemübergreifendes Problem.
    Hast du da eine Lösung für einen Programmier-Laien wie mich parat?

    Schade, dass das N64 (nach wie vor) das große Sorgenkind von Retropie ist…;/

    1. Hallo,
      da ich den Adapter nicht kenne, kann ich dir nicht direkt weiterhelfen.
      Als erstes wäre zu klären, wie die Pads über den Adapter ins System eingebunden werden. Hast du schon mal jstest verwendet, um die Pads zu untersuchen?
      Mit ls /dev/input kannst du nachschauen, welche Joysticks im System sind (beginnen mit js..) und dann mit jstest /dev/input/js0 (oder js1 usw.) diese testen.
      1. Hier mein Ergebnis:
        ls /dev/input
        by-id by-path event0 event1 event2 event3 event4 event5 js0 js1 mice

        jstest /dev/input/js0
        Driver version is 2.1.0.
        Joystick (HuiJia USB GamePad) has 6 axes (X, Y, Z, Rz, Hat0X, Hat0Y)
        and 16 buttons (Trigger, ThumbBtn, ThumbBtn2, TopBtn, TopBtn2, PinkieBtn, BaseBtn, BaseBtn2, BaseBtn3, BaseBtn4, BaseBtn5, BaseBtn6, BtnDead, BtnA, BtnB, BtnC).
        Testing … (interrupt to exit)
        Axes: 0: 0 1: 0 2:-32767 3:-32767 4: 0 5: 0
        Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off 9:off 10:off 11:off 12:off 13:off 14:off 15:off

        jstest /dev/input/js1
        Driver version is 2.1.0.
        Joystick (HuiJia USB GamePad) has 6 axes (X, Y, Z, Rz, Hat0X, Hat0Y)
        and 16 buttons (Trigger, ThumbBtn, ThumbBtn2, TopBtn, TopBtn2, PinkieBtn, BaseBtn, BaseBtn2, BaseBtn3, BaseBtn4, BaseBtn5, BaseBtn6, BtnDead, BtnA, BtnB, BtnC).
        Testing … (interrupt to exit)
        Axes: 0:-32767 1:-32767 2:-32767 3:-32767 4: 0 5: 0
        Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off 9:off 10:off 11:off 12:off 13:off 14:off 15:off

        1. Es sei dazu erwähnt, dass ich beim Zeitpunkt des Tests nur einen Controller angeschlossen hab.
          Ich habe im Anschluss einen weiteren Controller in die zweite Buchse gesteckt und den Test bei js0 nochmals gefahren. Er lieferte mir dann ebenfalls das Ergebnis wie vorher nur bei js1:
          Axes: 0:-32767 1:-32767 2:-32767 3:-32767 4: 0 5: 0

        2. Die eigentliche Frage ist, ob alle Tasten / Achsen bei jstest /dev/input/js0 funktionieren. Also Programm starten und kontrollieren, ob sich die Anzeige beim betätigen der Tasten / Sticks ändert.
  9. hallo,
    habe versucht laut deiner anleitung zur config der gamepads unter retroarch vorzugehen.
    Hat auch alles funktioniert, aber nach beenden von retroarch funktioniert kein gamepad mehr auch nicht die tastatur?
    Es sind zwei usb snes fake controller, habe die prozedur mehrmals wiederholt und auch auf die speicheroption geachtet.
    Die option mit der bearbeitung der retroarch.cfg datei hab ich noch nicht verstanden, da sind unzählige inputs drin.
    Auch nur ein gamepad zu benutzen funktioniert nicht, nach der controller config in emustation kann ich durch die emus scrollen und ein rom auswählen sobald ein spiel gestartet ist funktioniert nichts mehr….
    bitte um hilfe

    1. Hallo,
      ich würde ein Backup der SD-Karte machen und dann nochmal alles frisch installieren. Dabei solltest du vorerst auf sämtliche Updates verzichten.

      Dann nur einen Controller über die EmulationStation einrichten -> läuft dieser dann mit RetroArch?

      Falls ja, als nächstes die beiden Controller, wie beschrieben, über RetroArch einrichten -> gehen sie es jetzt?
      Falls ja gut, dann könntest du die Updates holen und schauen ob danach immer noch alles läuft.

      Falls nein, müsste man weiterschauen.

  10. Hey, erstmal danke für deine Arbeit, sie hat an vielen Stellen geholfen. Eine Frage hab ich noch, ich hoffe sie wurde nicht schon gestellt zumindest habe ich sie nicht gesehen. Ist es möglich 2 Tasten Mit der selben Funktion zu belegen? Ich hab an meinem Bartop aussen 2 Tasten zum flippren und die sollen zusätzlich zu den “normalen“ Tasten mit a,b belegt werden. Ich habe bisher versucht in der config einfach beide Tasten, durch ein Komma getrennt, anzugeben. Aber dies hat nicht funktioniert.
    Hast du eine Idee?

  11. Erstmal danke für deine Anleitungen, bei mir läuft jetzt fast alles so wie ich es haben möchte. Allerdings funktioniert das Konfigurieren des PS3-Controllers für den N64 Emulator nicht richtig. Kann es sein, dass die Einstellungen im RetroArch nicht für den N64 Emulator übernommen werden, denn beim NES und SNES scheint alles zu funktionieren. Bin mir auch nicht sicher wie ich die gelben pfeiltasten Konfigurieren soll. Ich wollte diese eigentlich auf den rechten analogstick vom PS3-Controller legen. Zusätztlich habe ich jetzt so viel herumprobiert, dass die Hotkeys (Select+Start) um das Spiel zu verlassen nicht mehr funktionieren beim N64 Emulator beim NES und SNES aber läuft es ohne Probleme.

  12. Hi,

    Ich bin am verzweifeln.

    Ich bringe meinen Wii U Pro Controller einfach nicht zum laufen.
    I RetroPie Setup hab ich aufgegeben. Hab übers Terminal (bluetoothctl) den controller pairen und verbinden können. Aber ich kann nichts damit tun. Weder nach dem manuellen verbinden erneut eine verbindung aufbauen noch den controller configurieren.

    Jemand Tipps für mich? Pi 2 Model B, RetroPie 4.0.2

  13. Hallo,
    was kann ich machen wenn mein Playstation1 Controller nicht gefunden wird?
    Ich habe das Teil über diesen Adapter mit USB verbunden ->
    CSL – Gamepad Adapter/Konverter | PS2 Controller zu USB Controller am PC / MAC | Neues Modell
    von Amazon.
    https://www.amazon.de/gp/product/B00BN5DRRO/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1

    (soll keine Werbung sein = sonst schmeiß die Bez. + Link raus)

    Habe es eben am win7 PC getestet – funktionieren tut der Controller und auch der Adapter.
    Aber unter RetroPi wird er nicht erkannt.
    Habe dort schon 10sec einen Knopf (verschiedene mehrmals) gedrückt.
    Aber es passiert nix 🙁

    Was kann ich tun, damit meine Playstation 1 Controller erkannt werden?

    Vielen Dank & viele Grüße

    1. habe mittlerweile herausgefunden, dass jstest die beiden Controller erkennt – also unter /dev/input werden zwei devices gelistet js0 und js1 – versuche ich diese zu testen kommen keine Signale an – egal ob auf analog oder nicht 🙁
      Ich habe leider keinen aktiven USB-Hub da – aber könnte es evtl. daran liegen, dass der Adapter zu wenig Strom über den USB Port bekommt? An der win7 Kiste funktioniert er ja 🙁

      Vielen Dank & viele Grüße

      1. Moin,
        da ich den Adapter nicht kenne, kann ich dazu leider nichts sagen.

        Falls du einen aktuellen Pi3 hast, sollte der Stromverbrauch eigentlich keine Rolle spielen. Dort steht schon mehr Leistung, als bei den alten Modellen zur Verfügung.

        Da der beim Image 3.8.1 vorhandene Raspbian-Kernal Probleme mit dem XBox-Treiber hat, könnte hier evtl. auch ein ähnliches Problem vorliegen. Vielleicht wäre ein Test mit einem älteren Image oder der aktuellen 4.0 Beta hilfreich. Um Seiteneffekte auszuschließen, könntest du beim Test auch mal alle anderen USB-Geräte abziehen.

        1. Hallo Jörn,

          vielen Dank für Deine Antwort.
          Ich habe nun “etwas” im Internet gesucht 🙁 schwieriges Thema…
          Habe folgendes herausgefunden:

          root@retropie:/# dmesg | grep Joystick
          [ 2.895329] usb 1-1.4: Product: Twin USB Joystick
          [ 3.927414] input: Twin USB Joystick as /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.4/1-1.4:1.0/0003:0810:0001.0001/input/input2
          [ 3.927819] input: Twin USB Joystick as /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.4/1-1.4:1.0/0003:0810:0001.0001/input/input3
          [ 3.933507] pantherlord 0003:0810:0001.0001: input,hidraw2: USB HID v1.10 Joystick [Twin USB Joystick] on usb-3f980000.usb-1.4/input0

          ich glaube irgendwie, dass das richtige Modul noch nicht geladen ist – der pantherlord wird erkannt und auch hidraw. Dazu habe ich nun viel gelesen aber verstehe noch nicht so ganz was mir fehlt – wie gesagt vermute ich ein modul … nur welches 🙂

          Vielen Dank & viele Grüße

          1. Mist – mein lsmod vergessen 🙁

            root@retropie:/# lsmod
            Module Size Used by
            binfmt_misc 6388 1
            hidp 13546 2
            bnep 10340 0
            hci_uart 17943 1
            btbcm 5929 1 hci_uart
            bluetooth 326105 9 bnep,hidp,btbcm,hci_uart
            brcmfmac 186343 0
            brcmutil 5661 1 brcmfmac
            cfg80211 427855 1 brcmfmac
            rfkill 16037 3 cfg80211,bluetooth
            evdev 11396 12
            snd_bcm2835 20511 2
            joydev 9024 0
            snd_pcm 75698 2 snd_bcm2835
            snd_timer 19160 1 snd_pcm
            bcm2835_gpiomem 3040 0
            snd 51844 6 snd_bcm2835,snd_timer,snd_pcm
            bcm2835_wdt 3225 0
            hid_pl 1230 0
            uio_pdrv_genirq 3164 0
            uio 8000 1 uio_pdrv_genirq
            uinput 7454 2
            fuse 83461 1
            ipv6 347530 34

  14. Hallo, ich verzweifle im Moment ein wenig…

    – In der config Datei im Unterordner /fba ändere ich zwei Buttons.
    – ich starte die emu station und anschließen den Emulator final burn alpha
    – alles läuft wie es soll -TOP! 🙂

    – Beende ich nun das Spiel und starte es direkt neu
    => sind die alten Einstellungen plötzlich wieder aktiv und ein Blick die veränderte config Datei zeigt mir das er scheinbar sie wieder überschrieben hat…. Hast Du eine Idee wo diese Automatik steckt, dass er meine Einstellungen wieder überschreibt?

    Achso, ich mach diese Einstellungen vor dem #include…. Beim ersten start geht es ja auch :-/

    grüße

  15. Hey, super TUT aber ich hab echt meine Probleme mit dem Einrichten der Controller. Ich hab meine Tastertur angeschlossen, aber wenn ich die abziehen, kann ich Retroarch nicht mehr mit dem PS3 Controller steuern. Ich stell dann wieder per Tastertur meinen Controller auf Port #1 bzw den 1. Spieler und alles klappt. Mit anderen Worten, jedesmal wenn ich die Tastertur neu einstecke, ändern sich der Port für den PS3 Controller!?

  16. Moin Jörn,

    Ich suche ein Script mit dem ich die ID der 360er Pads abfragen kann um über die GPIO Pins je eine Led pro aktiver ID aktivieren kann. Also Pad1 an, Led an PinXX an. Pad1 aus,Led an PinXX aus.
    Was ich bisher nur hinbekommen habe ist das komplette umleiten der Padeingaben an die Pins,nicht aber einfach die Abfrage. Ne Idee oder ein neuer Denkanstoß würde mich vielleicht ein wenig voran bringen.

    Danke, Gruß Lallek

  17. Hallo zusammen,

    hab mir den PIGRRL 2 mit Retrope 3.7 zusammengebaut und installiert. Leider bekomme ich das Gamepad PCB von Adafruit nicht zum laufen.
    Hat jemand evtl. eine Idee wie ich das teil konfigurieren muss.

    Gruß
    Lars

  18. Hallo Zusammen,
    ich habe immer noch Probleme mit dem Einrichten der COntroller.
    Zwischenzeitlich habe ich herausgefunden woran es liegt und zwar muss ich folgenedes tun.
    Der Controller von Player 1 muss so angesprochen werden:
    “sudo ./retroarch-joyconfig -o player1.cfg -p 1 -j 0 -t 5”

    Player 2 wird so angesprochen:
    “sudo ./retroarch-joyconfig -o player2.cfg -p 2 -j 1 -t 5”
    muss aber so angesprochen werden:
    “sudo ./retroarch-joyconfig -o player2.cfg -p 2 -j 1 -t 5”

    Mein Problem an der ganzen Sache ist, dass es seit Version 3.3 keinen “retroch-joyconfig” mehr gibt.
    “—-Wie oben angedeutet, gibt es retroarch-joyconfig ab dem Image 3.3 nicht mehr!—-”
    Wie kann ich nun auf die player.cfg zugreifen um die oben erwähnteänderung durchzuführen?!?

    Vielen Dank im voraus

    1. Wird bei dir der Hinweis:

      Da ich nicht pausenlos am Rechner sitze, kann es schon mal etwas dauern, bis ein Kommentar für alle sichtbar ist.

      nicht angezeigt oder warum postest du den gleichen Beitrag nach vier Stunden nochmal?

      Den ersten habe ich gelöscht!

      1. Achse ich hatte Internet Probleme und dachte der Kommentar wurde gar nicht abgeschickt.

        Danke und danke im voraus für eine Hilfestellung

    2. Die erste und vermutlich einfachste Lösung, die mir einfällt, wäre es retroarch-joyconfig von einem älteren Image zu holen (z. B. V3.2.1). Dann kannst du alles, so wie du es gewohnt bist einrichten.

      EDIT: Ich habe den Post etwas überarbeitet. Es geht auch nur über die RGUI, also ganz ohne manuelle Änderung an der retroarch.cfg!

      Es müsste aber, mit einem kleinen Kniff, auch über die RGUI gehen (die für die EmulationStation eingerichtete Tastatur wird benötigt):

      • starte die RGUI
      • richte, wie oben beschrieben, den Controller für Spieler-1 ein
      • ändere jetzt User 1 Device Index auf Disabled
      • gehe einen Schritt zurück und wähle Input User 2 Binds aus
      • richte den Controller für den zweiten Spieler ein
      • gehe danach wieder zu Input User 1 Binds
      • wähle dort bei User 1 Device Index, statt Disabled, wieder den richtigen Controller aus
      • verlasse die RGUI, damit alles gespeichert wird

      Jetzt sollten die Controller funktionieren.

      Ich habe so einen XBox360-Controller für Spieler 1 (D-Pad, A, B, SELECT & START) und Spieler 2 (der verwendet für die selben Funktionen den rechten Analogstick, X, Y, LB & RB) eingerichtet. Das hat problemlos funktioniert.

      1. sorry aber dein Tipp (2. Tipp) Hlft nicht. also ich weiß auch nicht recht was es bewirken soll. Das Problem mit Retropie und den Sticks ist, dass die Steuerungsaxen für beide Sticks in Retropie gleich erkannt werden:
        up D-Pad = -1
        down D-Pad= +1
        left D-Pad= -0
        right D-Pad= +0
        das gleche auch für Player 2…die Knöpfe sind aber alle einzig, fangen bei 1 an und geen bis 18…
        verzweifel langsam

        1. Der Auslöser meiner Antwort waren diese Zeilen und eine Vermutung meinerseits:

          Player 2 wird so angesprochen:
          „sudo ./retroarch-joyconfig -o player2.cfg -p 2 -j 1 -t 5“
          muss aber so angesprochen werden:
          „sudo ./retroarch-joyconfig -o player2.cfg -p 2 -j 1 -t 5“

          Wo ist der Unterschied in den beiden „sudo ./retro…“-Zeilen?
          Meine Antwort zielte darauf ab, dass beide Joysticks als einer vom System erkannt werden, ich dachte, du wolltest oben in der zweiten Zeile -j 0 schreiben.

          Aber wie heißt es doch so schön:
          Der Anfang jeder Katastrophe ist eine beschissene Vermutung. 😉

          1. Kp sorry sollte auch j0 heißen das hatte ich so anders gelesen. Wenn ich die Controller direkt in retroarch einrichte (direkt nach d neuen aufsetzen ) dann steht bei beiden hinter dem Device Name “Xin-Mo arcadestick (#0)”. Dann funktionieren die sticks aber gar nicht. Wenn ich die dann über retropie input konfigurieren dann werden die erkannt und mit “Xin-Mo arcadestick (#1)” angezeigt. Aber wie dem auch sei der 2.Player ist auch immer “… (#1)” und die ich Steuer Player 1 und 2 beide gleichzeitig.

          2. …und das wundert mich jetzt.

            Eigentlich macht mein RGUI-Vorschlag nichts anderes. Er richtet zwei Spieler für -j 0 (oder welchen Index man auch immer nimmt) ein.
            Sei es drum, wenn es „früher“ mit retroarch-joyconfig funktioniert hat, dann solltest du es erstmal wieder damit probieren (musst es dir halt von einem alten Image kopieren).

            Ansonsten bin ich raus aus der Nummer, mehr fällt mir dann auch nicht ein.

    3. Also kp ob das funktioniert. ich habe aus einem anderen Forum gelesen, dass es jemand so gemachthat. Das komische ist ja das es irgendwie keinen Sinn macht, da meine Sticks ja beide auf dem selben Index sind…=!?!

      1. Zunächst achte bitte darauf, dass du dich bei einer Antwort direkt auf den dazugehörigen Post beziehst. Dein letzter Kommentar macht für sich alleine sonst überhaupt keinen Sinn. Ich habe ihn einmalig eingruppiert. Dies wird allerdings kein zweites Mal passieren, das nächste mal landet soetwas im Papierkorb.

        Schade! Dass du das bisher noch nie hinbekommen hast, lese ich so nicht aus deinen bisherigen Postings. Hätte mir einiges an Arbeit erspart.

        Nett wie ich bin, habe ich aber einmal nach deinem dubiosen Controller gegoogelt und wundere mich nicht, dass du Probleme hast.
        Das Teil zickt seit Jahren auf dem Pi rum, Windows scheint kein Problem zu sein. Mal gehen Buttons nicht, dann muss man manuell das Kernal patchen, usw. Dass er sich als ein Controller im System meldet scheint auch relativ normal zu sein, aber nirgends findet sich ein Hinweis, dass beide Spieler die selben Achsen verwenden. Das darf auch nicht sein, sonst kann man die Einrichtung vergessen. Ich lese in verschiedenen Foren immer etwas von vier Achsen, was auch richtig ist.
        Dann funktioniert die Einrichtung (auch beim Verwendung des selben Joystickindex) genau so, wie ich es beschrieben habe.

        Deine Aufgabe ist es jetzt also zu untersuchen, was mit deinem Controller nicht stimmt! Dabei kann ich dir aber nicht großartik weiterhelfen.
        Du kannst im Terminal mal ls /dev/input eingeben. Dann werden alle Eingabegeräte aufgelistet. Dort sollte u. a. ein js0 erscheinen, wenn der Controller nur als ein Joystick im System bekannt ist (sonst gibt es auch ein js1). Teste ihn mal mit jstest /dev/input/js0, dann siehst du alle Button und Achsen. Sind dort vier Achsen? Ändern sich wirklich immer die beiden selben Achsen, egal ob man den Stick von Spieler 1 oder 2 bewegt?
        Wenn es keine vier Achsen gibt oder sich wirklich immer nur zwei davon ändern, dann solltest du mal deine Verkabelung kontrollieren und das Teil unter Windows testen.

  19. Hey auf ein enues, da bislang keiner mit Helfen konnte. Ich habe mir einen Arcadeautomat gebaut und das ist mein Problem:

    Ich habe zwei Arcadesticks (beide werden über einem Controller per USB angeschlossen), aber bei dem Einstellen des 2. Players komme ich nicht weiter.
    Zunächst wird mir bei “User 2 Device Index” ebenfalls der „Xin-Mo Xin-Mo Dual Arcade(#1)“ angezeigt (Xin-Mo Xin-Mo scheint der Name der Sticks zu sein). Ich denke mal er müsste hier nicht (#1) sondern (#2) anzeigen…
    Wie vermutet war es im Spiel auch sehr merkwürdig.
    Also sämtliche Knöpfe (von beiden Playern) funktionieren (auch getrennt). Aber die Bewegungen (oben, unten, rechts, links) durch die Sticks sind einfach identisch zum Player1, sprich wenn ich „nach oben“ steuere springen beide Figuren wenn ich „nach unten“ drücke ducken sich beide egal ob an dem Stick von Player1 oder von Player2, beide Sticks bewegen beide Figuren. Aber nochmal die Aktionsbuttons (A, B, X, Y, R, L) sind getrennt und funktionieren einwandfrei.
    Ich bin echt verzweifelt und komme nicht weiter…Hoffe auf einen guten Tipp. Hab die Sticks nicht manuell eingerichtet sondern über CONFIGURE RETROARCH / LAUNCH RETROARCH RGUI dann Input eingestellt.

    Vielen Dank


    EDIT: Den nicht mal fünf Stunden vorher abgeschickten und fast identischen Post, habe ich gelöscht! Ich denke nicht, dass es notwendig ist, eine Frage gleich mehrfach zu posten!

    1. Hatte das selbe Problem. Anscheinend sind die Treiber im Aktuellen Retropie gepustet worden. Mit der Anleitung unten werden zwei separate Joystick eingerichtet und das Problem mit den Axen ist vorbei:

      Making RetroPie identify 2 players instead of one with the Xin-Mo

      Add the following to /boot/cmdline.txt (just add a space to the existing entry so its all on one line)
      usbhid.quirks=0x16c0:0x05e1:0x040

      The first two numbers the vendor/product (16c0 and 05e1).
      You can find your vendor/product using lsusb

  20. Servus, Seite Gefällt mir sehr gut , bei mir ist das aber irgendwie anders leider. Hab mir von der seite http://www.powerpi.de recalboxOS 4.0.0-beta1 runtergeladen, muss aber den 1st und 2ten controller einrichten. im retropie selber geht das ohne probleme aber im spiel dann klappt das nicht . hab mir einen richtigen arcade automaten gebaut und verwende eine einfache usb tastatur die ich auseinander gebaut habe und die arcade buttons verkabelt habe . wenn ich f4 drücke wird der bildschirm schwarz. vielecht könnt ihr mir helfen .

    vielen dank

    1. Hi,
      da bist du wohl falsch abgebogen 😉 .

      Unter RecalboxOS gibt es kein RetroPie! Das sind zwei unterschiedliche Systeme, die zwar auf den gleichen Komponenten (EmulationStation, Libretro / RetroArch, Emulatoren) basieren aber unterschiedlich eingerichtet werden. Und hier dreht sich alles um RetroPie.
      Ich habe RecalboxOS nach enttäuschenden Erfahrungen erstmal wieder links liegen lassen und kann dir daher aktuell nicht weiterhelfen.

      Jedem anderen steht es natürlich frei, deine Frage zu beantworten.

      1. moin moin, habe jetzt alles gemacht, bin auch in der retroarch. nur wenn ich jetzt die tasten zuordnen möchte kommt da keine raktion also die taste wird nicht angenommen, woran kann das liegen ?? vielen dank

        1. Hallo, bei mir ist es genauso. Mein Logitech RumblePad 2 wird zwar erkannt, aber ich habe keine Reaktion auf irgendeine Taste. Das ist im RetroPie wie auch im Retroarch Menü so. Ich kann keinen der Knöpfe belegen.

          1. … und jetzt habe ich mal RecalboxOS installiert und dort funktioniert es sofort. Im EmuStation-Menü (mit einem etwas anderem Theme) wird der Controller namentlich erkannt (Logitech RumblePad 2) und auf Knopfdruck kann ich die Belegung einstellen, so wie auch die Tastatur als Controller. Letzteres funktioniert bei RetroPie auch.

          2. Falls du RetroPie 3.8 oder höher einsetzt, liegt es wohl am Kernel-Update. Aus dem selben Grund funktioniert der XBox360-Treiber auch nicht mehr. Dafür können die RetroPie-Macher aber nicht viel, das Problem liegt bei den Rasbian-Entwicklern. Bei der Recalbox klappt es aktuell noch, da das letzte Update schon ein paar Wochen alt ist.
  21. Hallo,
    Erstmal danke für deine Mühen die du hier aufbringst ohne dem würde bestimmt bei vielen nix laufen. Weisst du zufällig an was es legen kann wenn mein Xbox 360 Wireless Receiver nur noch 2 Controller annimmt? Es kommt auch das 2 Controller erkannt wurden müssten aber 4 sein.
    Danke

    1. Hi,
      hast du zufällig den XBox-Treiber installiert, damit die LED dauerhaft leuchtet?
      Dann werden nämlich standardmäßig nur noch 2 Controller angeboten. Dies lässt sich aber über das Setup-Script ändern.
  22. Hi Jörn,

    vielen Dank für all deine bisherigen Infos auf dieser Seite – sehr hilfreich. Ich habe ein paar Anmerkungen und Fragen bezüglich des NES30 Gamepads:

    Ich habe ein Skript geschrieben, welches dafür sorgt, dass sich ein oder mehrere Controller automatisch verbinden – vielleicht ist es für den Einen oder Anderen hilfreich: forum.8bitdo.com/forum.php?mod=viewthread&tid=328&page=7&extra=#pid2491

    Das Skript wird 1x pro Minute via Cronjob ausgeführt und verbindet den Controller falls aktuell keine Verbindung besteht.

    Komischerweise funktioniert der Keyboard-Modus (wichtig für z.B. den VICE Emulator) seit Firmware > 2.52 nicht mehr – deshalb nutze ich noch diese Version. Das hat aber nichts mit meinem Skript zu tun.

    Nun meine Fragen:
    1. hast du den NES30 oder FC30 Gamepad bei N64 Spielen getestet? Ich kann weder im Keyboard noch in einem anderen Modus ein vernünftiges Ergebnis erzielen. Ich kann zwar z.B. die Tasten START, A+B+R verwenden aber sie sind teilweise falsch belegt und die Richtungstasten funktionieren gar nicht. Es hieß ja eigentlich, dass sich ein N64 Emulator über die Retroarch-Config steuern lässt. Ich habe die verschiedenen N64 Emulatoren getestet aber ohne Erfolg.

    2. hast du es mal geschafft, den NES30/FC30 GAmepad für VICE im Gamepad Modus (Start+R) zu konfigurieren? Ich bekomme die Steuerung nur über den Keyboard Modus sauber eingestellt. Alle anderen für mich wichtigen Emulatoren (AMIGA,NES,SNES,MEGADRIVE, MASTERSYSTEM, ATARI2600,…) lassen sich sauber über den Gamepad-Modus (START+R) betreiben.

    3.

  23. Hallo Jörn,

    deine Tutorials sind super 🙂 ich konnte bisher alles zum Laufen bekommen. Allerdings habe ich ein Problem mit einem SFC30 Controller.

    Controller und Bluetooth Dongle sind alle konfiguriert und funktionieren ohne Probleme. Das einzige Ärgernis ist, dass wenn ich den Controller beim Start mit dem Pi per Bluetooth verbinde, schaltet das Menü unendlich lange nach rechts. Solange, bis ich einmalig auf den Controller irgendeine Taste drücke. Eine Verbindung per USB scheint dieses Problem nicht aufzuweisen.
    Dieses Verhalten tritt u.a. auch bei der Recalbox auf… Der Controller ist gerade einmal 1 Tag alt und ich hoffe nicht, dass er defekt ist…

    Hast du eine Idee?

    1. Hi,
      dass ist bei mir auch so. Da meine Controller am PC problemlos funktionieren, tippe ich mal auf ein Pi bzw. EmulationStation spezifisches Problem.

      Eine Lösung habe ich allerdings nicht, es hat mich bisher auch nicht sonderlich gestört.

  24. Hallo habe ein Problem beim Einrichten des Controllers.
    Bei mir fehlt der Punkt “1 Configure joystick/controller for use with RetroArch”

    Bei mir gibt es nur die 2 anderen Punkte.
    Bei mir startet der Raspberry auch nicht neu nach “Update RetroPie-Setup Script”
    Habe ihn aber manuell neu gestartet.
    Hat nichts gebracht :/

    1. Hi,
      da haben die Entwickler wohl einen Fehler ins Script eingebaut. Ich habe eben mal mein Script aktualisiert und nun fehlt bei mir auch der 1. Punkt, vor dem Update gab es den noch. Da hilft nur, aufs nächste Update warten oder das Image erneut einspielen und vorläufig auf die Updates verzichten.

      Ich rate aber eh zu manuellen Einrichtung, folge also besser der Beschreibung.

      Übrigens, nur das SCRIPT startet nach “Update RetroPie-Setup Script” neu, nicht der Pi!


      Update: Es ist wohl gewollt, dass der Punkt fehlt (siehe neues Image 3.3).

  25. Tolles Tutorial, vielen Dank!
    Inzwischen läuft mein RetroPie auch sehr gut, mit einem Problem: meine Tastatur scheint keine F12 Taste zu haben. Kann ich die Funktion auf eine andere Taste legen? Gerne auch zusätzlich auf die PS-Home Taste des PS3 Controllers.
    Für jeden Tipp wäre ich dankbar!
    Bitte weiter so mit den tollen Artikeln.

    Gerald

      1. Ich möchte die Standardfunktion von F12 anders belegen. Fast immer kommt man damit in die Konfiguration eines Emulators. So kann ich etwa bei Hatari kein TOS zuweisen, weil ich nicht in das Menü komme.

        1. Bei RetroArch wäre es kein Problem, aber bei den eigenständigen Emulatoren bin ich auch überfragt und kann dich nur auf die jeweilige Dokumentation verweisen.
          Ob man unter Linux das Tastaturlayout komplett ändern oder eine Sondersteuerung (z. B. + = ) verwenden kann, ist mir leider auch nicht bekannt. Um eine Taste auf den Controller legen zu können, müsste man einen passenden Treiber haben. Bei den XBox-Controllern geht das (siehe Kodi), für die PS3-Pads ist mir so ein Treiber noch nicht unter gekommen.
  26. Hallo,

    ich habe ein Problem mit dem Controller von Sega. Habe einen 6-Button Controller von Sega an einem USB Adapter. Dieser wird soweit auch erkannt. Mein Problem ist, dass ich gern Super Street Fighter 2 für den Mega Drive spielen möchte. Allerdings wird im Spiel nur ein 3-Button Pad erkannt. Wenn ich im Mainmenü von Retropie den Controller einstellen will (Controller Tasten Abfrage) wird mir nur A, B, X, Y, Start, Select und diverse Steuerkreuzfolgen angezeigt, C und Z fehlen in der Auflistung.
    Hat jemand eine Lösung für mich wie das 6-Button Pad erkannt wird?

      1. Hi,
        hast du im RetroArch-Menü das 6-Button-Pad eingestellt?

        Ich habe jetzt kein Menü vor Augen, aber es sollte unter Options -> Core Options einen Punkt Input-Device oder so ähnlich geben. Den musst du auf 6-Button stellen.

  27. Hallo,
    vielen Dank für deine super Anleitung.
    Leider habe ich trotzdem noch ein Problem.
    Ich habe 2 xbox360 controller nach deiner Anleitung eingerichtet. Auch mit dem xboxdrvr zuerst und dann nochmal die controller eingerichtet.
    Aber leider funktioniert es nicht bei SNES SuperBomberman2 im Zwei-Spieler-Modus. Der Spieler 2 kann Aktionen ausführen wenn bei Spieler 1 eine Taste gedrückt wird.
    Woran kann das liegen?
    Vielen Dank
    Grüße

    1. Hi,
      da es sechs SNES-Emulatoren gibt, welchen nutzt du überhaupt? Die vier unter Libretro / RetroPie sollten eigentlich keine Probleme machen. Funktionieren denn andere 2-Spielerspiele?
  28. Hallo,
    ich habe folgendes Problem mit meinem Setup:

    Habe mir einen Arcade automaten gebaut und einen Raspberry Pi 2 Moedell B rein gesetzt.
    Joysticks und Knöpfe habe ich über kabel sowhol links(Spieler1) als auch Rechts(spieler2) mit einen Ipac 2 verbunden. dieser hat einen usb ausgang den ich dann mit meinem Pi verbunden habe.

    wenn ich jetzt die einstellungen für die verschiedenen Spieler vornehmen möchte (wie oben beschrieben)habe ich das Problem, dass es mir das drücken der Knöpfe und bewegen der Joysticks als eingabe auf einer Tastatur erkennt und diverse buchstaben und zahlen in das Eingabefeld eingibt. auch in der Emulatiton Station wird das Drücken der knöpfe als eingabe über ein keyboard erkannt. Bei der eingabe kommt dann nach dem eingestellten zeitraum die “time out …” meldung und es geht weiter mit der nächsten taste, die natürlich auch nicht erkannt wird. (kann die Bilder von meinem Problem auch noch irgendwie schicken/hochladen, weiss nur nicht wie…)

    Jetzt meine Fragen:
    -was muss ich tun, dass ich über diesen IPAC meine 2 Spieler konfigurieren kann?

    -manche Emulatoren erscheinen nicht in der Emu-station obwohl schon roms in die Ordner kopiert wurden, so z.B. neogeo oder Atari2600. woran kann das liegen? bzw. wie kann ich es beheben ?

    1. Hi,
      ich kenne das IPAC2 zwar nicht, daher möge man mich korrigieren, falls ich falsch liege. Aber es scheint die Joystickfunktionen als Tastatureingaben umzusetzen. Daher kannst du die oben beschriebene Einrichtung nicht nutzen, diese setzt einen ‘echten‘ Joystick voraus.

      Die EmulationStation kannst du normal einrichten, es geht dann dort aber nur einer der beiden Sticks. Für Libretro / RetroArch kannst du einfach die retroarch.cfg manuell anpassen. Dazu musst du nur die input_player1_[Knopf] = [Taste] Stellen (ohne _btn bzw. _axis am Ende) suchen und mit den entsprechenden Tasten anpassen. Also z. B. input_player1_b = "z". Falls dir Schalter fehlen, scroll hier mal etwas runter, bis nach “Alle? Schalter... und klicke dort drauf. In der Liste solltest du alle benötigten Schalter finden. Für den zweiten Spieler nutzt du dann einfach input_player2_[Knopf] = [Taste].

      Zu deiner zweiten Frage:
      Stimmen denn die Endungen? Schau mal in die es_systems.cfg, ob deine Endungen bei den NeoGeo und VCS2600 ROMs zu denen in der Datei passen.

      1. Hallo und Danke für die sehr schnelle Antwort 🙂 das erste Problem hab ich jetzt mehr oder weniger gelöst, hab den 2 Spieler Modus hinbekommen. 🙂

        Jetzt habe ich allerdings bemerkt, dass wenn ich beispielsweise nach oben rechts springen möchte(zb street fighter 2) das ganze nicht funktioniert. gibt es also die Möglichkeit irgendwie “up” und “right” in einen befehl zu packen und dann auf ein “oben rechts” zu legen (existiert überhaut sowas wie oben rechts) ?

        1. Ein spezielles oben-rechts gibt es es nicht. Das wird immer durch die gleichzeitige Eingabe von oben und rechts erzielt. Hast du schonmal versucht, ob das Springen mit einer normalen USB-Tastatur funktioniert? Falls ja, liegt das Problem wohl beim IPAC2 und dann bin ich ebenfalls überfragt.
      2. also Bei dem NeoGeo Emulator lag es wirklich daran, dass die Endungen nicht passend waren, hab jetzt versucht einfach mal von den roms die endung geändert und es ist NeoGeo in meiner Emulatoren Auswahl gekommen, haben dann halt nicht funktionniert aber war auf jeden fall da.

        Beim Atari 2600 war es leider nicht so, da haben die endungen meiner Spieldatein eigentlich zu denen aus der Liste im “es_systems.cfg” gepasst.

  29. Hallo,
    wie bekomme ich in meinem Fall im Amsrad CPC die komplette Tastatur zur Verfügung? Ich habe kein Gamepad und das Spiel was ich spielen möchte benötigt die Tastatur.

      1. Hallo Jörn,
        Erst mal vielen Dank für die Antwort. Ich verwende den r-caprice32 Emu. Der CPC4-rpi beendet sich selbst sofort. Ich komme nicht in das Amstrad Basic.

          1. Hab ich es mir doch gedacht.

            Leider ist die cpc4rpi Installation auf dem Image 3.1 fehlerhaft.

            Wirf nach einem erfolglosen Start mal einen Blick in die /tmp/runcommand.log.
            Dort findest du den Grund:
            /opt/retropie/emulators/cpc/cpc4rpi: error while loading shared libraries: libEGL.so.1: cannot open shared object file: No such file or directory

            Um dies zu beheben, folge diesen Punkten:

            • RetroPie-Setup script starten
            • U – Update RetroPie-Setup script
            • 5 – Install…
            • 104 – cpc…
            • s – source (keine Angst, dauert nur knapp 2 Minuten)

            Danach sollte der Emulator wieder starten.

    1. Vielen Dank es funktioniert, Du bist genial!
      Hab schon das ein und andere getestet. Kann man noch wo auf das erste Modell mit 64K umstellen? Ich hab ein Spiel das reklamiert das.

  30. Frage: Was wenn ich verschiedene Gamepads folgendermaßen nutzen möchte:
    Für NES und SNES benutze ich einen Snes-USB-Controller-Verschnitt. Möchte ich jedoch Emulatoren von Systemen nutzen die mehr Eingabequellen benötigen, dann würde ich auf ein xbox-pad zurückgreifen. Die Controller scheinen aber an Spieler gebunden zu sein, wenn ich also den als Spieler 3 konfigurierten(da ich ihn nur in Außnahmen nutze) XBOX-Controller anstecke, ohne dass ein anderer Controller angesteckt ist, wird dieser dann als Spieler 1 erkannt? Oder muss ich bei Controller-Wechsel immer erst den entsrpechenden Controller als Spieler 1 festlegen?
    LG Pascal

    1. Hi,
      die einfachste Lösung, in meinen Augen, stellen die getrennten retroarch.cfg Dateien dar.

      Verwende die manuelle Einrichtung.
      Trage das SNES-Pad in die retroarch.cfg unter all ein. Das gilt dann erstmal für alle RetroArch-Emulatoren.
      Erstelle als nächstes für das XBox-Pad eine abweichende Konfiguration. Kopiere diese in die retroarch.cfg im jeweiligen Emulator-Verzeichnis, für den du das XBox-Pad nutzen möchtest. Ich würde das XBox-Pad zusätzlich anstöpseln! Dann kannst du in der EmulationStation einfach das Spiel starten und musst nur zum richtigen Pad greifen, ohne umzustecken. Schau dir oben unter dem Link mal die Parameter für retroarch-joyconfig an. Du kannst jedes Pad für jeden Spieler einrichten, also auch das 2. Pad für den ersten Spieler -p 1 -j 1.

      Klingt evtl. etwas verwirrend, aber ich hoffe du kommst damit klar. Eigentlich steht alles notwendige, oben im Text.

  31. Ich hätte doch noch eine Frage.
    Ich spiele gerne die CPC Amstrad Spiele. Kann man es irgendwie machen, dass die in der Emulation sofort starten?

    1. Ich kenne den CPC-Emulator viel zu wenig, um eine gesicherte Aussage zu treffen. Aber auf den ersten Blick kann ich keine Kommandozeilenparameter entdecken, mit denen es möglich wäre.
  32. Hej,

    ich will mich einfach mal nur für die geniale und ausführliche(!) Anleitung bedanken. Sehr geil was du da recherchiert und dokumentiert hast. Hat dich sicher einige Nerven gekostet. 🙂

  33. Laut Tante Google sollen ja die Xbox One Controller per USB laufen, leider schmiert mir der Pie beim starten ab. Ich habe auf die letzte version geupdatet, mehrfach neugestartet sowie die xbox 360 Treiber installiert.

    Hat irgendjemand noch eine Ahnung wie ich die COntroler zum laufen bekomme?

  34. Salute!
    Weiß jemand wie man 2 Joysticks die übern USB adapter laufen ) richtig einstellen kann? Wenn ich zb. AdvMame starte dann kann man zwar die tasten einzeln zuordnen aber wenn ich mit einem joystick lenke bewegen sich immer beide figuren. Wollte jetzt wie hier beschrieben (https://www.retro-programming.de/?page_id=9588) beide joysticks konfigurieren aber ich krieg nur die meldung das kein 2ter joystick erkannt wurde…

    1. Hi.
      Vorne weg: Ich habe keine Ahnung von dem Adapter, aber kann es sein, dass er nur einen Joystick zur Verfügung stellt?

      Begib dich bitte mal ins Terminal und wirf mit ls /dev/input einen Blick auf die vorhandenen Eingabegeräte. Die Joysticks tauchen dort mit js<0 bis n> auf.
      Falls wirklich nur js0 vorhanden ist, gib mal jstest /dev/input/js0 ein. Bewege dann Stick-1 und beobachte, was sich ändert. Nimm danach Stick-2 zur Hand und kontrolliere, ob sich etwas tut und falls ja, ob sich andere Werte verändern.

      Falls sich bei js0 nichts ändert, könnte es sein, dass der Adapter Tastatureingaben sendet. Dies kannst du am einfachsten im Terminal kontrollieren. Tauchen für die Richtungen und Buttons Zeichen auf dem Bildschirm auf bzw. bewegt sich der Cursor?

      1. Hallo,
        danke für die schnelle antwort.
        Habs jetzt probiert und es scheint als würden beide joysticks die selbe befehle senden…
        Bei den knöpfen passts, da kommen alle anders an. kann ich da jetzt irgendwas machen um beide joysticks nutzen zu können?

        1. Nabend,
          dann muss ich leider passen!

          Ich hätte erwartet, dass auch die Richtungen getrennt sind. Wenn es am Adapter keine Einstellungen oder einen speziellen Treiber dafür gibt, fällt mir nichts mehr dazu ein. Wie sollen die Signale am Pi unterschieden werden, wenn sie für beide Joysticks identisch sind?

          Hast du das ganze eigentlich schon mal unter Windows ausprobiert? Wenn der Adapter dort auch nur als ein Joystick funktioniert, wüsste man wenigsten, dass das Problem dort zu suchen ist und sonst eher beim Raspberry.

  35. Hallo.

    Ich nutze Retropie V3.0 und habe meinen X360 wireless Contoller manuell mit dem Programm “retroarch-joyconfig” eingerichtet.

    Jetzt habe ich das Problem dass die Tastenzuweisung bei dem PSX Emu dennoch falsch ist (verglichen mit dem orig. PS-Controller).
    -> z.B.: Taste “X” (PS) sollte auf dem X360 Pad auf “A” liegen.
    Tatsächlich befindet sich aber “X” (PS) auf “B” (X360 Pad)

    Habe ich nun einen Fehler bei der anfänglichen Tastenzuweisung gemacht oder muss ich die Zuweisung explizit für den einzelnen Emulator neu machen?

  36. Hi
    icg habe auf meinem raspi das Retropie 3.0 Image installiert und möchte neben den PiFba Emulator noch den Libreto Fba Emulator parallel auf der Oberfläche haben. Welchen Eintrag muss ich in der es_system.cfg vornehmen um beide systeme nebeneinader zum laufen zu bringen!?
    Und dann habe ich noch ein Problem mit meinem PS3 Controller. Ich habe ihn wie in der Anleitung beschrieben installiert und er läuft ohne Probleme mit Bluetooth Dongle. Es gehen auch alle Emulatoren bis auf Neo Geo und PiFba. Da geht dann weder mein wireless keyboard noch mein controller. Egal welche taste oder welchen knopf ich drücke es passiert nichts! Wenn ich den Controller via Kabel an den Raspi anschliesse gehen beide wieder.
    Habe schon im netz gesucht. Bin langsam am verzweifeln weil ich keine lösung finde!! Was kann ich machen damit der bluetooth ps3 controller in den besagten Emulatoren erkannt wird!? Ich hoffe mir kann jemand helfen

    Danke schon mal im vorraus


    EDIT: Du brauchst nicht mehrfach zu posten, dadurch geht es auch nicht schneller 😉 . Wie bei den Kommentaren in rot hervorgehoben steht, kann es etwas dauern, bis ein Kommentar für alle sichtbar ist. Daher habe ich deinen ersten Post gelöscht.
    1. Hi,
      es hat zwar etwas länger gedauert, aber eben bin ich zu FBA gekommen.

      Leider kann ich deine Angaben nur bestätigen, sobald das PS3-Pad per Bluetooth verwendet wird, geht auch bei mir die kabellose Tastatur nicht mehr. Das Pad verweigert außerdem ebenfalls seinen Dienst, obwohl ich die Configdatei /opt/retropie/configs/fba/fba2x.cfg angepasst habe.

      1. Vielen Dank erstmal dass dir die Mühe gemacht hast. Schade dass dafür noch keine Lösung gibt wie man den Wireess Controller zum laufen bringt im FBA.
        Hasz du evtl schon eine Lösung für meine andere Frage wie man beide FBA Emus parallel auf die Oberfläche der Emulationstation bringt? Würde mich freuen wenn ich neben dem PiFBA auch den Libreto FBA Emu im Menü der Station hätte!?

        1. Du musst doch nur einen entsprechenden Block in die es_systems.cfg einfügen. Am einfachsten geht der ‘alte’ Weg (also ohne runcommand.sh), wie zur Zeit noch in den Tipps & Tricks beschrieben. Den korrekten Aufruf findest du in der Datei emulators.cfg. Sofern ich das ohne nachzusehen richtig hinbekomme, müsste die unter /opt/retropie/configs/fba liegen.
  37. Hallo,
    ich möchte gerne Crash Bandicoot o.ä. mit dem linken Analogstick, anstatt mit dem Steuerkreuz spielen.
    Was muss ich dafür ändern?

    Gruß

    1. Hi.
      Ich nehme mal an, dass du das auf der PSX zocken möchtest (worauf auch sonst 🙂 ).
      Hier eine kurze Anleitung, wie man das mit dem Xbox-Controller hinkriegt.

      Gehe zu:

      sudo nano /opt/retropie/configs/psx/retroarch.cfg

      Gibt folgenden Text ein:

      input_player1_left_axis = -0
      input_player1_right_axis = +0
      input_player1_up_axis = -1
      input_player1_down_axis = +1

      Fertig! 🙂

      Jetzt kannst du deine Spielfigur in jedem PSX-Spiel sowohl mit dem Steuerkreuz als auch mit dem Joystick steuern.

      Das funktioniert übrigens auch bei sämtlichen anderen Retroarch-Emulatoren. Einfach den Text in die entsprechende Config einfügen, dann kannst du auch Sonic oder Mario mit dem Joystick steuern.

  38. Hi. Ich hab mir einen Competition Pro USB Retro-Klick-Joystick gekauft. Sehr geiles Teil. Aber welche der Buttons muss wie gemappt werden ?
    Ich gehe mal von DPAD up/down/left/right für den Stick aus, dann oben links Button A rechts daneben Button B und dann der kleine Linke x und der kleine rechte y ?

    hier sind alle Controller gut beschrieben zum Anlernen, aber wie sieht es beim Competition Pro aus ?
    https://github.com/RetroPie/RetroPie-Setup/wiki/RetroArch-Configuration

    1. Moin,
      es hängt davon ab, wo du ihn einsetzen willst. Der Sinn dieser freien Konfiguration ist ja gerade, dass du bestimmen kannst, was – wie funktionieren soll.

      Ich nutze den Stick fast nur für C64 und Amiga, die bringen eigene Treiber mit, da muss man vorher nichts einstellen. Für die RetroArch-Emulatoren lege ich dann START & SELECT auf die oberen / kleinen Knöpfe, damit der Stick dann z. B. auch mit dem NES- oder Gameboy-Emulator funktioniert. Fürs Mega Drive könnte man z. B. Y & START verwenden, dann hat man alle Funktionen des ‘alten‘ 3-Button Pads. Richte ihn also so ein, wie du es brauchst, es gibt da keine allgemein gültige Belegung.

      Die Bilder zeigen dir übrigens nur, wie die Buttons standardmäßig für die dazugehörigen Emulatoren (Systeme) gemappt werden. Daher findest du dort auch keinen Competition Pro bzw. die zig tausend anderen Joysticks & Pads, die es so gibt, da diese zu keinem System gehören. Schau dir einfach an, welche Funktionen das jeweilige System bietet und konfiguriere deinen Stick dann entsprechend.

  39. Ich könnte Hilfe bei der Controllerkonfiguration bezüglich dem NeoGeo Emulator (GnGeoPi) brauchen (bei der V. 3.0 RC 1). Ich habe zurzeit 2 USB SNES-Pads (über das RetroPie-Setup konfiguriert (funktionieren beide im Multiplayer)) am Pi und mit beiden lässt sich der Emulator nicht steuern. Auf der älteren RetroPie Version 3.0 BETA 3 hat dies noch funktioniert, dass ich über die Datei gngeorc (in /home/pi/.gngeo) die Controller ändern konnte. Jedoch ist die Datei bei der jetzigen Version leer und das manuelle Einfügen hat auch nichts gebracht. Nun ist für mich die Frage wie ich das zum laufen kriege.

    1. Hat sich nun bereits erledigt. Ich habe nun die Datei entsprechend konfiguriert. Sofern Bedarf besteht, kann ich die Konfiguration genauer beschreiben.

  40. Hi,
    weißt du zufällig wie man die Tastenbelegung für die einzelnen Emulatoren ändern kann?
    Möchte die Belegung vom SNES Controller im NES Emulator ändern. Aber auch nur explizit für den NES. Sonst soll er wie gewohnt funktionieren.

    1. ??? Das steht doch oben ???
      Du kannst mit einer eigenen retroarch.cfg im jeweiligen Emulator-Verzeichnis,
      Unterordner
      die Einstellungen aus dem all-Verzeichnis übersteuern.
  41. Vielen Dank für Deine Top-Anleitung, genial!

    Habe nun folgendes Problem:
    Die Controller (PS4) sind aktiv und leuchten Rot bzw. Blau.
    Wenn ich im Emulator bin funktionieren die ein paar Sekunden, d.h. sobald ich ein paar mal hin- und her navigiere schaltet der Controller aus.
    Der zweite leuchtet noch immer, aber ich kann nichts mehr machen.

    Das gleiche Problem, wenn ich nur einen Controller angeschlossen habe.

    Die retroarch.cfg habe ich übrigens noch nicht verändert, lediglich die Controller hinzugefügt.

    Danke für einen Hinweis.

    1. Hi,
      ich kann dir da leider nicht weiterhelfen.
      Das Verhalten ist mir bisher vollkommen unbekannt und ich habe auch keine PS4-Controller, mit denen ich das mal testen könnte.

      Vielleicht hat ja noch jemand anderes eine Idee.

  42. Hi, schonmal nen riesen Dank für die sehr ausführliche Schritt für Schritt Anleitung zum einrichten des Retropies, macht super viel Spaß die alten Klassiker wieder zu spielen 🙂
    Ich bin allerdings auf das Problem gestoßen das ich nicht zu 3. oder zu 4. spielen kann. An meinem Pi hängt ein usb-splitter, an dem ein x-box controler, ein nes usb controler und ein original snes controler mit adapter hängt. Habe die Controler für player1,2,3 wie beschrieben konfiguriert und in der emulatoren übersich lässt sich auch mit allen 3 controlern navigieren. Allerdings reagiert z.B. bei super Bomberman oder secret of mana der 3. Controler einfach nicht. Liegt das an meinen Einstellungen oder an dem jeweiligen Emulator?

    1. Bisher ging die SNES-Multitap-Unterstützung nicht, aber seit der BETA 2 fürs Image 3.0 soll es klappen.
      Allerdings musst du dazu “lr-snes9x-next” unter LibRetro / RetroArch einsetzen und in die retroarch.cfg für den SNES-Emulator die Zeile input_libretro_device_p2 = “257” aufnehmen.

      Soweit die Theorie, getestet habe ich es bisher nämlich nicht.

  43. Hallo! 🙂
    Vielen lieben Dank für die ausführliche Anleitung.
    Ich habe ein ganz seltsames Problem – und zwar funktioniert der xbox360 Controller nur teilweise in Emulatoren. Eingestellt habe ich ihn, wie oben angegeben. Bei der Vereinfachten Version über das Menü in der EmulationStation lässt er sich zwar soweit konfigurieren, aber nicht bestätigen. Ach und in selbiger funktioniert der Controller einwandfrei – nur im Spiel nicht. Danke im Vorraus!

    1. Sorry, aber so ganz werde ich aus den Aussagen nicht schlau.

      Wie hast du den Controller nun genau eingerichtet, nur über die EmulationStation?
      Was soll "...lässt er sich zwar soweit konfigurieren, aber nicht bestätigen" bedeuten?
      Handelt es sich um ein Pad mit oder ohne Kabel?
      In welchen Emulatoren will er nicht?

      Da ich, wie im Text erwähnt, kein Fan der einfach Einrichtung bin, empfehle ich dir, falls nicht bereits geschehen, die manuelle Einrichtung.

      1. Nochmal in hochdeutsch 😀 Der Controller (xbox360 mit Kabel) ist manuell eingerichtet, wie beschrieben. In der Menü Funktion kann ich am Ende nicht auf OK drücken, damit er die Einstellungen übernimmt also setzt er sie zurück. In keinem Emulator funktioniert das D-Pad. Man kann springen, schießen usw, aber nicht laufen.

        1. Ok, das klingt eigentlich nach einer falschen Konfiguration. Schick mir doch mal deine retroarch.cfg an die E-Mail-Adresse aus dem Impressum.

          Verwendest du die aktuelle BETA 4 oder eine ältere und welches Pi-Model setzt du ein?

          1. Ja, ich hab’ die aktuelle Beta 4 und das Pi-2.
            In der retroarch.cfg ist mir direkt aufgefallen, dass beim D-Pad in dem kompletten Absatz überhaupt nichts hinter dem = steht, im Gegenteil zu den anderen konfigurierten Tasten. Das Pi ist am TV angeschlossen, ist das okay, wenn ich das abfotografiere?
            Mir fällt keine andere Methode ein..
            Das ist übrigens das erste mal, dass ich mich überhaupt mit Programmierung auseinander setze.

          2. Wenn du wirklich alles, wie beschreiben durchgeführt hast, dann müsste das Ende der retroarch.cfg so aussehen:
            input_player1_joypad_index = "0"
            input_player1_b_btn = "1"
            input_player1_y_btn = "3"
            input_player1_select_btn = "6"
            input_player1_start_btn = "7"
            input_player1_up_btn = "h0up"
            input_player1_down_btn = "h0down"
            input_player1_left_btn = "h0left"
            input_player1_right_btn = "h0right"
            input_player1_a_btn = "0"
            input_player1_x_btn = "2"
            input_player1_l_btn = "4"
            input_player1_r_btn = "5"
            input_player1_l2_axis = "+2"
            input_player1_r2_axis = "+5"
            input_player1_l3_btn = "9"
            input_player1_r3_btn = "10"
            input_player1_l_x_plus_axis = "+0"
            input_player1_l_x_minus_axis = "-0"
            input_player1_l_y_plus_axis = "+1"
            input_player1_l_y_minus_axis = "-1"
            input_player1_r_x_plus_axis = "+3"
            input_player1_r_x_minus_axis = "-3"
            input_player1_r_y_plus_axis = "+4"
            input_player1_r_y_minus_axis = "-4"

            Diese Werte stammen von meinem kabelgebundenen XBox-Pad. Ich kann die Einstellungen in der EmulationStation übrigens mit A (OK) bestätigen und sie werden gespeichert.

            Auch wenn die Seite ‘retro-programming’ heist, hat dies nichts mit Programmierung zu tun 😉 . Ein Foto würde übrigens nichts nützen, da ich die komplette Datei kontrollieren müsste bzw. zum Testen bräuchte. Du kannst die Datei einfach mit sudo cp /opt/retropie/configs/all/retroarch.cfg /boot kopieren, die SD-Karte dann am PC verwenden und auf das entsprechende Laufwerk schauen. Von dort kannst du die dann direkt verschicken.

  44. hi ich habe zwei ps3 controller über einen bluetooth adapter angeschlossen und alles wie beschrieben eingerichtet es werden auch beide controller als 1 und 2 erkannt, aber bei super mario bros. für nes kann ich trotzdem nicht den 2 player modus spielen…hat irgendjemand eine idee woran das liegen könnte?

    1. Wie hast du das denn hinbekommen? Ich hab zuerst einen PS3 Controller wie beschrieben zum laufen gebracht. Hab danach probiert, mehrere Controller einzurichten, aber dann erkennt der den PS3 Controller nicht mehr via Bluetooth. Nur per Kabel.

      Benutze RetroPie V3.0

  45. Hi Jörn,
    herzlichen Dank für die Anleitung, sie hat mir extrem geholfen meinen Retro-Pi einzurichten. 😀
    Ein paar Kleinigkeiten (Hotkeys etc) muss ich noch anpassen aber jetzt funktioniert es endlich. (Pi 2 + PS2->USB Adapter (Twin USB Joystick) + 2 x Logitech Cordless Action PS2 Controller+ Edimax WiFi + Logitech K400 keyboard).

    Was nicht geht ist, mit zwei Playern Atari 2600 Spiele zu spielen, bei allen anderen funktioniiert der 2-Spieler Modus perfekt. 🙁
    Hast Du eine Ahnung an was es liegen kann?

    Gruß und nochmal DANKE !!!
    Sas

    1. Hallo,
      das ist mir noch gar nicht aufgefallen. Aber du hast recht, mit der LibRetro / RetroArch Version von Stella, will der 2-Spieler-Modus anscheinend nicht direkt funktionieren, keine Ahnung warum.

      Du kannst aber auch die eigenständige Stella-Fassung nehmen. Nachdem ich dort meine Controller eingerichtet hatte, klappte es auch mit zwei Spielern.

      1. Ui! Wie geht das mit der eigenständigen Stalla Fassung? Ich dachte die braucht X und das ist bei V3.0 nicht mehr dabei?
        Liebe Grüße,
        Sas

        1. Wenn du ein ROM startest, kommt auf dem Bildschirm der Hinweis, dass du mit ‘x’ (Tastatur!) einige Einstellungen vornehmen kannst. Dir bleibt eine Sekunde Zeit, ‘x’ zu drücken. Dann kannst du z. B. mit dem ersten Punkt auswählen, welcher Emulator standardmäßig genommen werden soll. Sobald die eigenständige Fassung von Stella läuft, kannst du mit [TAB] die Optionen öffnen und die Controller einrichten.
          1. Yaheeeee!!!!
            Und nochmal ein Mega-Danke, das hat geklappt!
            Ich war schon am verzweifeln. 😀
            Endlich wieder Freeway mit 2 Personen spielbar 😉

  46. Hi,
    die Anleitung funktioniert wunderbar, ich habe auch meine Tasten konfiguriert bekommen, allerdings kann ich im Menü nichts damit steuern. Wenn der Bildschirm abgedunkelt wird kann ich allerdings durch Interaktion mit dem PS3 Controller dieses wieder abschalten, also generell erkannt wird das Teil. Könnte natürlich daran liegen, dass ich in der initialen Konfiguration die Tastatur als Input Device konfiguriert hatte.
    In der Datei “/opt/retropie/configs/all/retroarch.conf” hatte ich die Tastaturkonfiguration allerdings wieder auskommentiert und durch die PS3 Konfiguration ersetzt, keine Wirkung.
    Irgendwelche Tips? Habs noch nicht wieder probiert die Tastatur anzuschließen, könnte mir aber durchaus vorstellen, dass das nicht funktioniert.

    1. Moin,
      ich nehme an, du meinst mit Menü die EmulationStation. Hast du den Controller denn auch dort eingerichtet?

      Die retroarch.cfg ist nur für die RetroArch-Emulatoren zuständig und hat nichts mit der EmulationStation zu tun! Die Controller-Einstellungen für die EmulationStation findest du in der Datei ~/.emulationstation/es_input.cfg.

      Wirf mal einen Blick in diesen Kommentar und folge zur Einrichtung dem Link.

      1. Hi, wow, superschnelle Antwort, danke 🙂
        Ich hatte tatsächlich nicht daran gedacht, dass das unterschiedliche Konfigurationen sein können. Einmal den Controller im Menü eingerichtet und schon fluppt alles 🙂
        Danke für die Hilfe und super Seite, weiter so!

  47. Habe eine Tastatur, einen original SNES und einen original NES Controller eingerichtet wie du es beschrieben hast.

    Mit der Tastatur und der SNES funktioniert alles tadellos. Kann durch die Channels wechseln und auch Spielen funktioniert ohne Probleme.

    Jetzt habe ich den NES Controller eingericht usw. Allerdings funktioniert der nur im Spiel selber. Die Channels muss ich aber mit der Tastatur wechseln da hier der NES Controller nicht reagiert. Im Spiel jedoch ohne Probleme.

    Weißt du des Rätsel Lösung?

    Es hängt nur die Tastatur und der NES Controller am Retropie.
    Verwende die neueste Version 3

    Gruß
    Martin

    PS: Weiter so mit den Retropie Artikeln 😉

    1. Meinst du mit Channels das Menü der EmulationStation? Hast du dort denn auch den NES-Controller eingerichtet? Falls ja, wie sieht die ~/.emulationstation/es_input.cfg (ich hoffe der Pfad stimmt, sitze gerade nicht am Pi) aus?
      1. Korrekt. Meine das Menü der Emulation Station.
        Bin nur so vorgegangen wie in diesem Artikel beschrieben.

        Habe mit “configure joystick/controller for use with RetroArch” den Controller hinzugefügt.

        Wie füge ich bei der Emulation Station einen Controller hinzu?

          1. Ach das meintest du.
            Hab den Wald vor lauter Bäumen nicht mehr gesehen 🙂

            Danke. Jetzt klappt auch alles mit dem NES Controller 🙂

  48. Hallo,

    ich hab folgendes Problem mit meinen Controllern:
    Ein Xbox360-Pad ist als /dev/input/js0 gemappt. Dazu sind noch zwei Competition Pros über eine selbstgelöteten GPIO-Adapter angeschlossen und über den Db9_gpio_rpi-Treiber als /dev/input/js1 und /dev/input/js2 eingebunden. Das funktioniert auch in den Retroarch-Emus (z.B. C64, Atari 2600) und auch im Atari ST Emu einwandfrei.
    Allerdings kriege ich in UAE4ALL2 nur das Xbox-Pad zum Laufen und das auch nicht richtig (es geht nur hoch, rechts und Feuer).
    Eigentlich sollten die oldschool Digital Joysticks js1 und js2 in dem Fall zum Einsatz kommen. Ich hab aber leider keine Ahnung, wie ich das dem Emu mitteile.
    Ich wäre für jede Hilfe dankbar…

    PS: System ist ein Pi 2 mit Retropie Beta 3 Version 2.

      1. Ja, ich habe inzwischen auch schon versucht herauszufinden, welche Entwickler man zu dem Thema mal ansprechen kann. Es ist aber bei den ganzen Derivaten von UAE für den Raspi, die es inzwischen gibt (Uae4all, Uae4all2, Uae4all2 chips, Uae4arm usw.) gar nicht so einfach herauszufinden, an wen man das am Besten adressiert…
        Das Problem besteht auf jeden Fall bei allen Varianten, die ich ausprobiert habe.

      2. Ich wollte noch mal ein Feedback geben, was ich bis jetzt herausgefunden habe: Alle Amiga-Emus für den Raspi sind Abkömmlinge der Version der Pandora-Konsole. Da diese eine einheitliche Hardware hat, sind die Joysticks im Sourcecode “hart” verdrahtet, d.h. was auch immer unter /dev/input/js0 und js1 vorhanden ist, wird an Port 1 und 2 des Amiga gemappt. Hat man nun mehr als zwei Joysticks (wie ich ein XBox-Pad + 2 Competition Pros am GPIO), dann kann das zum Problem werden.
        Man muss also irgendwie dafür sorgen, dass man die für UAE gewünschten Joysticks unbedingt als die erstes geladen kriegt, solange es keinen Fix im Source Code gibt (ich hab den aktivsten Entwickler in dem Bereich kontaktiert und gebeten, sich der Sache anzunehmen. Mal sehen…)
        Momentan versuche ich herauszufinden, wie ich es bewerkstelligen kann, dass der GPIO-Driver (geladen über /etc/modules) als erstes im System landet und dann erst die weiteren devices für Xbox, Mouse usw.

  49. Guten morgen,
    irgendwie komme ich mit der DOSBOX nicht zurecht. Eigentlich sollte doch mit STRG-F1 das Keymapping möglich sein. Bei mir sind seltsamerweise ALLE Tasten komplett unterschiedlich. Das hat zur folge, dass ich mit STRG und F1 nirgends hinkomme, weil der stattdessen irgendwelche Buchstaben und Zahlen auslöst aber eben nicht die gewünschte kombination.
    Ich habe mal gegoogelt und den Tipp gefunden, dass man sich durch das Keymapping den doppelpunkt und sowas richtig zurecht legen kann, aber bei mir sind ja alle Tasten durcheinander. Auf “2” oder “3” oder so ist ESC und auf Enter/Return ist ne “8” und so weiter… seltsam.
    Gibt es denn vielleicht eine zentrale Datei wo ich quasi manuell mappen kann wie die /configs/all/retroarch.cfg oder was kann da nicht stimmen?

      1. Super gut, hat geklappt 🙂 Besten Dank

        Was für Soundeinstellungen muss ich denn im Spiel vornehmen, dass auch was aus den Boxen kommt?

  50. Hallo,
    eine Frage habe ich bzgl. der Tastatur Hotkeys. Es gibt scheinbar ein paar wie zum Beispiel die Tasten “N”, “O”, “P”, “H” und so weiter und teilweise stehen die in der configs/all/retroarch.cfg nicht drin.
    Das “O” für Movie aufzeichnen habe ich finden können auskommentiert und es brachte keinen Erfolg. Dann habe ich den Eintrag gelöscht = geht auch nicht. Werden die noch woanders festgelegt?

    1. Wenn ein Eintrag nicht vorhanden ist, dann wird der Standard genommen. Auskommentieren bzw. löschen bringen also nichts. Setze die Werte auf nul z. B. input_movie_record_toggle = "nul", um die Funktion zu deaktivieren.
        1. In der retroarch.cfg gibt es für jeden ‘Player‘, für jede Eingabeart (Taste, Button, Achse) einen extra Eintrag pro Funktion.
          Du musst also für Player 2, für z. B. START, nur input_player2_start, statt input_player2_start_btn verwenden, um Tastaturcodes zuzuweisen.
  51. Hallöchen,

    ich hoffe das mir jemand zu diesem Thema hier weiter helfen kann.
    Habe etwas tolles gefunden damit ich für mein Arcade Automat auf zusätzliche Hardware (I-PAC) verzichten kann.

    https : / / github.com / ian57 / Raspicade-Retrogame-2Player-Pi2

    Habe einfach unten die Installationsschritte durchgeführt.
    Also folgendes eingegeben:
    Erst das:
    $ git clone https : / / github.com / ian57 / Raspicade-Retrogame-2Player-Pi2
    $ cd Raspicade-Retrogame-2Player-BPlus
    $ make

    Dann:
    sudo modprobe uinput
    sudo sh -c ‘echo uinput >> /etc/modules’

    Dann so wie im Tutorial beschrieben getestet mit:
    sudo ./retrogame

    Dann die sudo nano /etc/rc.local
    Folgendes eingefügt:
    /home/pi/Raspicade-Retrogame-2Player-BPlus/retrogame &

    Und neu gestartet…

    Aber ich muss wohl irgend was falsch bzw missverstanden haben..
    Ich meine wenn ich nun gewisse GPIO Kontakte verbinde… Dann wirft er mir auch zahlen aus… Also z.b. die 1
    Ich denke mal das soll so auch richtig sein.

    Aber wenn ich nun in die Controller Configuration gehe mit dem RetroPie Setup und er mich die Tasten abfragt, und ich dann über den GPIO das signal für die Taste 1 gebe, zeigt er mir die 1 auch in der Controller Configuration an aber meldet dann time out also er erkennt nicht wirklich das es scheinbar eine Taste simulieren soll.

    Ich hoffe ich habe es verständlich erklärt… Bin da nicht so der erklärbär 🙁
    Muss ich für RetroPie noch weitere einstellungen vornehmen ? Oder woran könnte das liegen ?

    1. Hi,
      das ist doch ‘nur‘ ein weiterer ‘GPIO keyboard daemon’.

      Damit simulierst du keinen Controller, sondern die Tastatur. Daher auch die von dir erwähnte 1.
      Du musst also RetroArch für die Steuerung per Keyboard einrichten und dort die in der retrogame.c definierten Tasten verwenden.

  52. Hallo. Ich verwende einen Raspberry Pi 1 mit Retropi Version 3
    Und deine Anleitungen sind einfach Weltklasse.
    Leider scheitere ich immer wieder beim versuch meine zwei 8bitdo NES30 Pads mit dem Pi zu verbinden. Hierzu gibt es sehr viele verschiedene Ansätze im Internet wie man hier vorzugehen hat. Leider klappt einfach nichts bei mir.
    Hast du eventuell Erfahrung mit diesen Pads

  53. Hallo, ich habe von 2.6 auf 3.0 geupdated und meine controller spinnen plötzlich. Wenn man select drückt, wird das Spiel beendet. A macht einen Neustart. Bestätigen kann man anscheinend nicht mehr. Vor dem update lief alles perfekt. Habe dann deine Anleitung für die manuelle controller Einrichtung gemacht, leider ohne Erfolg. Jetzt kann ich gar nichts mehr spielen 🙁 Wäre nett, wenn du helfen könntest.

    1. Wie hast du ‘upgedatet‘? Welche Controller verwendest du denn? Es wäre auch hilfreich mal einen Blick auf deine retroarch.cfg werfen zu können. Wenn du möchstest, schick die einfach an die E-Mail-Adresse aus dem Impressum.
      1. Ich hab im RetroPie Setup den Punkt 1, Binary-based installation, ausgeführt.

        Als controller verwende ich die nachgemachten snes controller.

        Inzwischen hab ich es doch geschafft den controller manuell einzurichten. Hab versehentlich bei der Eingabe in der retroarch.cfg geschludert. Habe bei der Einrichtung des Hotkeys den konkreten Button in die Zeile ‘input_enable_hotkey’ geschrieben statt in ‘input_enable_hotkey_btn’.

        Dennoch, der controller wurde nicht mehr automatisch korrekt wie zuvor bei 2.6 erkannt. Liegt das an der Version oder hätte ich beim updaten etwas anders machen müssen? Danke für deine schnelle Antwort!

        1. Ich habe eben selbst mal getestet, wie ein Update von 2.6 auf 3.0 funktioniert. Wie befürchtet, klappt einiges nicht! Bei mir wurde der komplette Inhalt der es_systems.cfg gelöscht. Also habe ich die aus der Sicherung verwendet. Hier stimmen aber die Aufrufe für RetroArch nicht, da die Cores in anderen Verzeichnissen liegen. Außerdem gibt es teilweise wieder neue Verzeichnisse für die ROMs, sodass man diese ggf. umkopieren muss. Um die neuen Möglichkeiten von runcommand.sh nutzen zu können, müssen die Aufrufe in der es_systems.cfg angepasst werden. Was evtl. noch alles nicht passt, keine Ahnung. Ich ziehe eine Neuinstallation weiterhin vor.

          Da der Controller nun läuft, brauche ich die retroarch.cfg nicht mehr. Ich hatte einen Fehler, wie von dir selbst gefunden, erwartet. Nach meinem Update lief der XBox-Controller weiterhin automatisch. Ich habe aber keine SNES-Pads, daher kann ich das nicht überprüfen.

  54. Hast du auch schon das Problem gelöst, dass manche Spiele im PSX-Emulator nicht funktionieren? Beispielsweise Tomb Raider lässt sich nur starten, wählt man im Menü Start New Game kommt nur noch ein Blackscreen.

    1. Mir ist ein solches Problem nichtmal bekannt. Was aber u. a. daran liegt, dass ich den Pi aktiv nur verwende, um Systeme bis zur 4. Generation (z. B. SNES & Mega Drive) zu emulieren. Die Playstation starte ich sonst nur mal zum Test und dann kommen meistens TR III & FF VII zum Einsatz.
  55. Hast du auch schon versucht einen Controller über Bluetooth zu verbinden? Ich würde gerne meinen PS4 Controller verwenden, laut einigen Websites soll das auch funktionieren, nur ich bekomm es nicht hin!

    1. Ich habe eben zum Test versucht einen PS3-Controller über Bluetooth anzuschließen. Es hat allerdings NICHT auf Anhieb geklappt!
      Dann habe ich einen anderen Bluetooth-Stick genommen und es funktionierte direkt ohne nenneswerte Probleme.

      Ich werde das noch mal genauer untersuchen und dann am langen Wochenende einen Text dazu verfassen.

      Da ich keine PS4-Controller besitze, kann auf diese nicht gesondert eingehen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Protected by WP Anti Spam