EmulationStation unter Archlinux

Ich möchte hier kurz erklären, wie ich EmulationStation unter Archlinux installiert habe. Wer nicht weiss, was EmulationStation ist, findet hier ein kleines Teaser-Video auf YouTube.

Installation

Installiert werden müssen

  • EmulationStation
  • Emulatoren (hauptsächlich RetroArch bzw. die entsprechenden LibRetro-Plugins)
  • Spiele-ROMs
  • joyutils, zum Auslesen der angeschlossenen Gamepads

Dies geschieht unter Archlinux per:

pacaur -S emulationstation-git retroarch joyutils jstest-gtk-git

RetroArch benötigt nun für jedes zu emulierende System ein entsprechendes libretro-Plugin. Eine Übersicht der verfügbaren Plugins im AUR findet sich hier: https://aur.archlinux.org/packages/?O=0&K=libretro

Ich habe Emulatoren für den Atari7800, NES, SNES, GameboyColor und Gameboy Advanced installiert, zB per:

pacaur -S libretro-snes9x-next-git libretro-quicknes-git libretro-fceumm-git libretro-prosystem-git libretro-gambatte-git libretro-mgba-git

Für den N64 habe ich mupen64plus eigenständig installiert, da es besser läuft als das libretro-plugin.

pacaur -S mupen64plus

EmulationStation startet nun mit dem Befehl:

emulationstation

Noch funktioniert aber fast gar nichts…
Mit F4 kann es jederzeit beendet werden.
Führe zunächst die folgenden Schritte durch:

Konfiguration

Das Arbeitsverzeichnis von EmulationStation befindet sich im Homeordner:
~/.emulationstation

Theme installieren

Ich verwende das Theme „carbon“.
Dieses findet sich zB bei github: https://github.com/RetroPie/es-theme-carbon.
Lade dir das zip-Paket herunter und entpacke den Inhalt nach ~/.emulationstation/themes/carbon.
Editiere nun die Datei ~/.emulationstation/es_settings.cfg und trage das carbon-Theme entsprechend ein:

<string name="ThemeSet" value="carbon"></string>

ROM-Ordner anlegen

Alle meine Spiele-ROMs kommen in den Ornder ~/Dokumente/Medien/Spiele/ROM. Dort existiert für jedes System ein Unterordner (zB NES, SNES, N64), und in diesen liegen die entsprechenden ROMs für das entsprechende System.
Ihr dürft nur ROMs von solchen Spielen haben, die euch auch tatsächlich gehören!
ROMs findet ihr zB bei http://www.emuparadise.me/.

Systeme hinzufügen

Systeme (sprich die alten Spielekonsolen) werden in der Datei ~/.emulationstation/es_systems.cfg festgelegt.
Ein System entspricht hierbei einer Konsole (zB NES, SNES, N64).
Ihr müsst für jedes System angeben, in welchem Pfad die ROMs zu finden sind, wie die Dateiendungen der ROMS lauten, und wie der Emulatoraufruf erfolgen soll. Als Emulator wird hauptsächlich RetroArch verwendet.
Für den RetroArch-Aufruf muss immer über die Option -L der Pfad auf das entsprechende libretro-Plugin.so angegeben werden. Alle installierten Plugins finden sich im Ordner /usr/lib/libretro/

Hier mal als Beispiele meine Einträge für den GameBoy (Retroarch), SNES (Retroarch) und den N64 (mupen64plus):

	<system>
		<name>gb</name>
		<fullname>Nintendo Gameboy</fullname>
		<path>~/Dokumente/Medien/Spiele/ROM/GB</path>
		<extension>.gb</extension>
		<command>retroarch -L /usr/lib/libretro/gambatte_libretro.so %ROM%</command>
		<platform>gb</platform>
		<theme>gb</theme>
	</system>


	<system>
		<name>snes</name>
		<fullname>Super Nintendo Entertainment System</fullname>
		<path>~/Dokumente/Medien/Spiele/ROM/SNES</path>
		<extension>.sfc</extension>
		<command>retroarch -L /usr/lib/libretro/snes9x_next_libretro.so %ROM%</command>
		<platform>snes</platform>
		<theme>snes</theme>
	</system>

	
	<system>
		<name>n64</name>
		<fullname>Nintendo 64</fullname>
		<path>~/Dokumente/Medien/Spiele/ROM/N64</path>
		<extension>.n64 .z64</extension>
		<command>mupen64plus %ROM% </command>
		<platform>n64</platform>
		<theme>n64</theme>
	</system>

Lege für jedes System, welches du installiert hast, einen entsprechenden <system>-Eintrag an.

Gamepads auslesen

Ich habe hier einen Playstation-3-Controller, den ich per USB an den Laptop angeschlossen habe.
Jetzt muss ich herausfinden, welcher Knopf welchem Button entspricht.
Hierfür starte ich jstest-gtk. Mein PS3-Controller wird direkt erkannt, und über „Eigenschaften“ kann ich die Belegung auslesen.
Für meinen PS3-Controller gilt:

Playstation 3 Controller

analoges Steuerkreuz
--------------------
oben	Button 4
unten	Button 6
links	Button 7
rechts	Button 5


joystick links
--------------
oben	Axis1 -1
unten	Axis1 +1
links	Axis0 -0
rechts  Axis0 +0
klick	Button 1

joystick rechts
--------------
oben	Axis3 -3
unten	Axis3 +3
links	Axis2 -2
rechts  Axis2 +2
klick  	Button 2


BUTTONS
-------
PS	Button 16
Select  Button 0
Start	Button 3

L1	Button 10  // Axis14 1
L2	Button 8	//Axis12 1
R1	Button 11	//Axis15 1
R2	Button 9 	/Axis13 1

A(kreis)	Button 13	/Axis17
B(kreuz)	Button 14	/Axis18
C(dreieck)	BUtton 12	/Axis16
D(QUadrat)	Button 15	/Axis19

Diese Werte muss ich mir merken!!!

Gamepads hinzufügen

Jetzt wo ich weiss, welche Knöpfe und Sticks mein Gamepad hat, kann ich es in EmulationStation sowie in RetroArch bekanntmachen.

  • Emulationstation: um mit dem Gamepad durch das Emulationstation-Menü navigieren zu können.
  • RetroArch: um mit dem Gamepad zocken zu können
  • Mupen64plus: um mit dem Gamepad zocken zu können

Gamepad für Emulationstation

Editiere hierfür die Datei ~/.emulationstation/es_input.cfg.
Die Einträge für meinen PS3-Controller sehen dann so aus:

< ?xml version="1.0"?>
<inputlist>
	<inputconfig type="joystick" deviceName="Sony PLAYSTATION(R)3 Controller" deviceGUID="030000004c0500006802000011010000">
		<input name="a" type="button" id="14" value="1" />
		<input name="b" type="button" id="15" value="-1" />
		<input name="down" type="button" id="6" value="1" />
		<input name="left" type="button" id="7" value="-1" />
		<input name="menu" type="button" id="16" value="1" />
		<input name="pagedown" type="button" id="10" value="1" />
		<input name="pageup" type="button" id="11" value="-1" />
		<input name="right" type="button" id="5" value="1" />
		<input name="select" type="button" id="0" value="1" />
		<input name="start" type="button" id="3" value="1" />
		<input name="up" type="button" id="4" value="-1" />
	</inputconfig>
 
</inputlist>

Gamepad für RetroArch

Editiere hierfür die Datei ~/.config/retroarch/retroarch.cfg.
Hier muss der input für Player1 an die Knöpfe des Pads angepasst werden.
Eingetragen wird immer in den Erweiterungen _btn (Knopf) und _axis (Joysticks).

Die Einträge für meinen PS3-Controller sehen dann so aus:

input_player1_b = "z"
input_player1_b_btn = "14"
input_player1_b_axis = "nul"
input_player1_y = "a"
input_player1_y_btn = "12"
input_player1_y_axis = "nul"
input_player1_select = "rshift"
input_player1_select_btn = "0"
input_player1_select_axis = "nul"
input_player1_start = "enter"
input_player1_start_btn = "3"
input_player1_start_axis = "nul"
input_player1_up = "up"
input_player1_up_btn = "4"
input_player1_up_axis = "-1"
input_player1_down = "down"
input_player1_down_btn = "6"
input_player1_down_axis = "+1"
input_player1_left = "left"
input_player1_left_btn = "7"
input_player1_left_axis = "-0"
input_player1_right = "right"
input_player1_right_btn = "5"
input_player1_right_axis = "+0"
input_player1_a = "x"
input_player1_a_btn = "13"
input_player1_a_axis = "nul"
input_player1_x = "s"
input_player1_x_btn = "15"
input_player1_x_axis = "nul"
input_player1_l = "q"
input_player1_l_btn = "10"
input_player1_l_axis = "nul"
input_player1_r = "w"
input_player1_r_btn = "11"
input_player1_r_axis = "nul"
input_player1_l2 = "nul"
input_player1_l2_btn = "8"
input_player1_l2_axis = "nul"
input_player1_r2 = "nul"
input_player1_r2_btn = "9"
input_player1_r2_axis = "nul"

Außerdem lege ich hier „Hotkeys“ fest, mit denen ich die Emulation beenden, und zur EmulationStation zurückkehren kann:

input_enable_hotkey_btn = "16" # PS3-Knopf
input_exit_emulator_btn = "3"  # Start-Knopf

Wenn ich jetzt während der Emulation auf den PS3-Knopf gedrückt halte, und dann den Start-Knopf drücke, gelange ich zurück zu Emulationstation.

Die Einstellungen gelten für sämtliche libretro-Plugins.

Gamepad für mupen64plus

Editiere hierfür die Datei /usr/share/mupen64plus/InputAutoCfg.ini.
Hier sollte fast alles richtig sein.
Ich habe sie so verändert, dass an meinem PS3-Controller die „L2“-Taste zur „Z“-Taste wird, und die „R2“-Taste zum Hotbutton.
Hierfür habe ich den Bereich [PLAYSTATION(R)3 Controller] wie folgt angepasst:

[PLAYSTATION(R)3 Controller]
[Sony PLAYSTATION(R)3 Controller]
[Sony Computer Entertainment Wireless Controller]
[SHENGHIC 2009/0708ZXW-V1Inc. PLAYSTATION(R)3Conteroller]
plugged = True
plugin = 2
mouse = False
AnalogDeadzone = 4096,4096
AnalogPeak = 32768,32768
DPad R = button(5)
DPad L = button(7)
DPad D = button(6)
DPad U = button(4)
Start = button(3)
Z Trig = button(8)
B Button = button(15)
A Button = button(14)
C Button R = axis(2+)
C Button L = axis(2-)
C Button D = axis(3+)
C Button U = axis(3-)
R Trig = button(11)
L Trig = button(10)
Mempak switch =
Rumblepak switch =
X Axis = axis(0-,0+)
Y Axis = axis(1-,1+)

Der Hotbutton selbst wird in der Datei ~/.config/mupen64plus/mupen64plus.cfg aktiviert:

# Joystick event string for stopping the emulator
Joy Mapping Stop = "J0B9"

J0 bedeutet „Joystick 0“, B9 bedeutet „Button 9“ (ist beim PS3-Controller R2).
Drückt man nun während der Emulation „R2“, gelangt man zurück zur EmulationStation.

Fertig!

Fertig!
Jetzt kann ich emulationstation starten und meine alten ROMs zocken!

Weblinks

This entry was posted in Arch, ubuntuusers. Bookmark the permalink. Follow any comments here with the RSS feed for this post. Post a comment or leave a trackback.

1 Comment

  1. Stefano
    Posted 30. März 2016 at 10:16 | Permalink

    Schöne Anleitung. Hab sie (noch?) nicht getestet. Woher kommt die deviceGUID?

Schreibe einen Kommentar

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

Your email address will never be published.