RetroPie: Wo liegt was und wie fange ich überaupt an?
Diese Seite soll als Referenz dienen. Ich fasse hier Infos zusammen, die auf den anderen Seiten verteilt stehen. Wer nur mal schnell wissen möchte, wo die es_system.cfg liegt oder warum die EmulationStation 2 so langsam lädt, ist hier genau richtig. Von Zeit zu Zeit werde ich die Liste erweitern.
Ich gehe vom RetroPie-Image 2.3 aus, außerdem sollte der Pi im Netzwerk ‚hängen‚.
Was euch hier erwartet…
- Linux – Erste Schritte
- Autovervollständigen mit <TAB>
- root Passwort
- Fernzugriff mit PuTTY per SSH
- Dateien mit WinSCP per SSH übertragen
- Dateien mit nano editieren
- es_systems.cfg
- runcommand.sh
- retroarch.cfg
- Warum die EmulationStation 2 so langsam lädt
- Übertakten
- BIOS
- Analoges Videokabel für den Rasberry Pi Model B+
- Ein USB-Laufwerk einbinden
- Über das Netzwerk auf ROMs zugreifen
- Systemwarnungen
Linux – Erste Schritte
Da RetroPie ja auf Rasbian aufsetzt, das wiederum ein Linux-Ableger ist, hier einige wichtige Punkte, falls ihr von anderen Systemen (z. B. Windows) kommt.
Groß- und Kleinschreibung ist sehr wichtig! Linux unterscheidet zwischen der Groß- und Kleinschreibung bei Befehlen, Datei- und Verzeichnisnamen.
Sobald ihr die EmulationStation verlasst, befindet ihr euch im Terminal (unter Windows ‚Eingabeaufforderung‘ genannt). Dort braucht ihr eine Reihe von Kommandos / Befehlen, die ihr mit <ENTER> abschließen müsst, um die gewünschten Änderungen vorzunehmen. Möchtet ihr z. B. die EmulationStation nach dem Verlassen wieder starten, dann reicht die Eingabe von emulationstation.
Wichtige Befehle
Ich verwende in meinen Beschreibungen häufig folgende Befehle / Anweisungen:
- sudo um einige geschützte Verzeichnisse oder Dateinamen zu verwenden oder sicherheitsrelevante Befehle auszuführen, braucht ihr ‚Superuser‘-Rechte, diese erhaltet ihr über diesen Befehl.
Beispiel: sudo reboot
- reboot damit startet ihr den Pi neu.
Beispiel: reboot
- shutdown möchtet ihr den Raspberry über das Terminal herunterfahren, dann verwendet ihr diesen Befehl.
Beispiel: shutdown -h now
- cd bedeutet ‚change directory‘, damit könnt ihr das Verzeichniss wechseln
Beispiel: cd ~/RetroPie/roms- . der Punkt steht für das aktuelle Verzeichnis
- .. zwei Punkte gehen eine Verzeichnisebene zurück
- ~ die Tilde steht für das Home-(Arbeits-)Verzeichnis z. B. /home/pi
- / ein Slash steht für die Root (das Hauptverzeichnis)
- – das Minus wechselt zum letzten gewählten Verzeichnis und wieder zurück
- cp steht für copy und kopiert Dateien und Verzeichnisse
Beispiel: cp ~/RetroPie/BIOS/kickstart20.rom ./kick.rom
- ls listet euch die Dateien und Verzeichnisse im aktuellen Ordner auf.
Beispiel: ls
- rm steht für remove und löscht Dateien oder Verzeichnisse.
Beispiel: rm ~/RetroPie/BIOS/kick.rom
- mkdir mit ‚make directory‘ könnt ihr ein neues Verzeichnis anlegen.
Beispiel: mkdir BIOS
- chmod hiermit lassen sich die Berechtigungen von Dateien und Verzeichnissen ändern. Ich gebe in den Beispielen meistens Vollzugriff, dieser wird z. B. durch die Zahlenkombination 777 erreicht.
Beispiel: chmod 777 BIOS
- mv dient zum Verschieben ‚move‘ sowie umbenennen von Dateien und Verzeichnissen.
Beispiel: mv ~/RetroPie/roms/msx/* ~/.openMSX/share/.
Es gibt natürlich noch Unmengen an weiteren Befehlen. Außerdem gibt es für die obigen Anweisungen noch zig Optionsschalter, die ihr mit angeben könnt. Abhängig davon, mit welchen Berechtigungen ihr euch anmeldet, müsst ihr viele Befehle von oben mit einem sudo beginnen.
Autovervollständigen mit <TAB>
Besonders bei der Eingabe von langen Verzeichnissen und Dateinamen ist das Autovervollständigen hilfreich. Drückt ihr nach den ersten Zeichen die <TAB>-Taste, dann wird der Name automatisch ergänzt.
Ein kleines Beispiel:
Verlasst die EmulationStation und wechselt mit cd ~/RetroPie-Setup das Verzeichnis. Hier wollen wir nun das Script retropie_setup.sh starten. Mit ls -n lassen wir uns einmal zur Kontrolle alle Dateien nach Namen sortiert anzeigen.
Gebt jetzt sudo ./r ein, drückt dann auf <TAB> und schon wird die Eingabe zu sudo ./retropie_. Dies ist noch nicht ganz das gewünschte Ergebnis. Wie wir oben im Bild sehen, gibt es zwei Dateien, die mit retropie_ beginnen, daher endet die Vervollständigung hier. Ihr könnt euch jetzt übrigens durch einen erneuten Druck auf <TAB> die betroffenen Dateien anzeigen lassen.
Wir brauchen jetzt nur unsere Eingabe um ein „s“ ergänzen sudo ./retropie_s und nochmal auf <TAB> drücken, schon erhalten wir die komplette Befehlszeile sudo ./retropie_setup.sh.
root Passwort
Mit den bekannten Zugangsdaten Benutzer (User) = pi | Passwort = raspberry meldet ihr euch als normaler Benutzer am Pi an, so startet z. B. auch das RetroPie-Image. Dann müsst ihr Befehlen / Programmen häufig das eben erwähnte sudo voranstellen, da euch sonst die Rechte fehlen. Möchtet ihr euch daher lieber als root (kann man mit ‚Als Administrator ausführen‘ von Windows vergleichen) anmelden, um das sudo zu sparen, müsst ihr erstmal ein root-Passwort festlegen. RetroPie setzt nämlich auf Rasbian auf und das ist wiederum ein Debian Abkömling. Unter Debian gibt es standardmäßig kein root-Passwort. Um an eins zu kommen, gebt im Terminal einfach sudo passwd root ein und folgt den Anweisung.
Danach könnt ihr euch mit den Zugangsdaten Benutzer (User) = root | Passwort = <euer Passwort> mit Adminrechten einloggen. Vom Terminal könnt ihr euch mit su – als root einloggen. Beachtet aber, dass die EmulationStation dann automatisch startet und einen Fehler wirft! Sie ist schließlich für den Benutzer pi installiert worden.
Sobald ihr euch als root anmeldet, ändert sich der Prompt im Terminal (s. oben). Wollt ihr wieder als normaler Benutzer arbeiten, dann gebt einfach login pi gefolgt vom Passwort raspberry ein.
Interessanter sind die root-Rechte evtl. für die nächsten beiden Punkte.
Fernzugriff mit PuTTY per SSH (Secure SHell)
Möchtet ihr keine Tastatur an den Pi anschließen oder ihn später etwas versteckt verbauen, dann bietet sich der Fernzugriff per SSH an. Startet dazu vom Terminal mit sudo raspi-config die Raspberry-Konfiguration, um zu kontrollieren, ob SSH aktiviert ist. Folgt einfach den Schritten auf den Bildern.
Sobald der SSH-Server läuft erscheint abschließend folgende Meldung, wenn ihr diese bestätigt habt, könnt ihr raspi-config wieder verlassen.
Jetzt benötigen wir noch ein Programm, um per SSH auf den Pi zuzugreifen. Das bekannteste ist wohl PuTTY. Der Download liefert euch ein direkt ausführbares Programm, es muss also nichts installiert werden.
Verwendet ihr die Standardeinstellungen beim Pi, dann könnt ihr PuTTY wie auf dem folgenden Bild einrichten.
- Netzwerkname (normalerweise raspberrypi) oder IP-Adresse des Raspberry
- Port ggf. auf 22 stellen
- SSH als Verbindungstyp wählen
- Hier einen beliebigen Namen eingeben, unter dem gespeichert werden soll.
- [Save] anklicken, um die Einstellungen dauerhaft zu speichern.
- Der gewählte Name taucht jetzt in der Liste auf.
- Um eine Verbindung herzustellen auf [Open] klicken.
Stellt ihr zum ersten Mal eine Verbindung zu einem Rechner her, dann erscheint eine Meldung, wie diese.
Speichert den Key mit [Ja], wir verbinden uns schließlich nur mit unserem Raspberry Pi, dann bekommt ihr die Warnung in Zukunft nicht mehr.
Jetzt öffnet sich das Terminal und ihr könnt euch als pi mit dem Passwort raspberry einloggen:
Hinweis: PuTTY ist nur in der Lage das Terminal darzustellen. Ihr könnt also nichts starten, was eine grafische Oberfläche benötigt, darunter fällt natürlich auch die EmulationStation 2.
Aber ansonsten könnt ihr alles wie am Pi machen. Ihr könnt euch hier natürlich auch mit dem oben erwähnten root-Passwort anmelden. Ein weiterer Vorteil ist, dass ihr mit der Maus Texte aus dem Fenster kopieren und durch einen Klick mit der rechten Maustaste sogar einfügen könnt. Dies erleichtert einige Eingaben.
Natürlich bietet PuTTY noch viele weitere Einstellungen, z. B. könnt ihr euch die Eingabe des Benutzernamens sparen:
- Unter Connection auf Data klicken
- pi als Namen eingeben (natürlich geht auch root, wenn ihr es wollt und das Passwort angelegt habt)
- Wieder auf Session klicken und wie zuvor die Einstellungen speichern.
Das soll jetzt aber zu PuTTY reichen, kommen wir zur Dateiübertragung per SSH.
Dateien mit WinSCP per SSH übertragen
Der einfachste Weg Daten für RetroPie auf die SD-Karte zu bekommen führt direkt über den Windows-Dateiexplorer. Gebt einfach \\raspberrypi in die Adresszeile ein und schon habt ihr Zugriff auf die freigegebenen Ordner.
Möchtet ihr auch Dateien per SSH übertragen, dann bietet sich WinSCP an. Der Vorteil, gegenüber dem direkten Zugriff per \\raspberrypi aus dem Windows-Dateiexplorer, ist, dass ihr direkten Zugriff auf die komplette SD-Karte habt. Natürlich gelten hier auch die Zugriffsbeschränkungen von Linux, aber wie oben beschrieben könnt ihr euch hier auch als root anmelden. Ich verwende übrigens WinSCP portable, da dies nicht installiert werden muss. Die Einrichtung ist auch hier wieder sehr einfach…
- ‚Neues Verbindungsziel‘ auswählen, dann werden die Eingabefelder freigegeben.
- SFTP als Protokoll
- Der Rechnername sollte immer noch raspberrypi lauten
- Port wieder auf 22
- Benutzername – Ich empfehle hier den oben eingerichteten root-Zugang.
- Das passende Passwort eingeben
- [Speichern] anklicken
Es öffnet sich ein neues Fenster: - Legt fest unter welchem Namen die Verbindung gespeichert werden soll
- Auch wenn es nicht empfohlen wird, ich würde das Passwort für die Verbindung zum Pi speichern.
- [OK] anklicken, um die Einstellungen endgültig zu speichern.
- Jetzt taucht euer Name in der Liste auf.
- Nun könnt ihr ganz einfach über [Anmelden] eine Verbiundung herstellen.
Sobald die Verbindung steht öffnet sich das Hauptfenster.
Hier könnt ihr nun nach belieben Dateien und Verzeichnisse kopieren, löschen, umbenennen usw. Rechts seht ihr das Hauptverzeichnis der SD-Karte. Um z. B. in das roms-Verzeichnis zu gelangen, geht in den Ordner home => pi => RetroPie und schließlich in das Verzeichnis roms.
Übrigens könnt ihr direkt von diesem Fenster aus, PuTTY starten. Ihr müsst in den Einstellungen nur den Pfad zum Programm hinterlegen.
Dateien mit nano editieren
Ich verwende in erster Linie nano, um meine Einstellungen in den Konfigdateien zu ändern.
Der Texteditor wird vom Terminal gestartet und läßt sich relativ einfach bedienen. Aufruf ganz einfach per nano <Dateiname>.
Wichtig Kommandos / Befehle im Editor:
- <STRG> + <X> beendet den Editor, bei Änderungen erfolgt eine Sicherheitsabfrage, ob gespeichert werden soll.
- <STRG> + <O> speichert die aktuelle Datei
- <STRG> + <K> schneidet die aktuelle Zeile aus
- <STRG> + <U> fügt die Zeile wieder ein
- <STRG> + <G> öffnet die Hilfe
- F6 startet die Suche
Wer möchte kann auch jeder Zeit vom Terminal mit startx die grafische Oberfläche starten und seine Dateien dort bearbeiten.
es_systems.cfg
Welche Emulatoren die EmulationStation überhaupt anzeigt, wird über die es_systems.cfg festgelegt. Die Datei findet ihr seit Version 2 unter /etc/emulationstation.
Werfen wir am Beispiel des C64 Eintrags einen Blick auf den Dateiaufbau, dieser ist für andere Systeme natürlich identisch.
<system> <fullname>C64</fullname> <name>c64</name> <path>~/RetroPie/roms/c64</path> <extension>.crt .CRT .d64 .D64 .g64 .G64 .t64 .T64 .tap .TAP .x64 .X64 .zip .ZIP</extension> <command>/opt/retropie/supplementary/runcommand/runcommand.sh 4 "/opt/retropie/emulators/vice-2.4/installdir/bin/x64 -sdlbitdepth 16 %ROM%"</command> <platform>c64</platform> <theme>c64</theme> </system>
Ein einzelnes System wird also zwischen <system> … </system> definiert, aber betrachten wir mal die ganze Datei. Mit <!– … –> kann man übrigens Kommantare in die Datei aufnehmen.
<!-- Beginn der Liste aller verfügbaren Systeme --> <systemList> <!-- Beginn eines neuen Systems --> <system> <!-- Lesbarer Name für Menüs usw. (optional) --> <fullname>C64</fullname> <!-- Kurzname für Verzeichnisse und Fehlermeldungen --> <name>c64</name> <!-- Verzeichnis das (inkl. Unterverzeichnisse) nach ROMs / Images durchsucht wird --> <path>~/RetroPie/roms/c64</path> <!-- Erlaubte Dateierweiterungen --> <extension>.crt .CRT .d64 .D64 .g64 .G64 .t64 .T64 .tap .TAP .x64 .X64 .zip .ZIP</extension> <!-- Befehl, um den Emulator (ggf. inkl. dem gewählten Spiel) zu starten --> <command>/opt/retropie/supplementary/runcommand/runcommand.sh 4 "/opt/retropie/emulators/vice-2.4/installdir/bin/x64 -sdlbitdepth 16 %ROM%"</command> <!-- Hilft ES_Scraper die richtigen Daten zu finden. (optional) --> <platform>c64</platform> <!-- Passendes Theme (optional sonst wird <name> ausgewertet --> <theme>c64</theme> <!-- hier enden die System-Parameter --> </system> <!-- Ende der gesamten Liste --> </systemList>
Die Reihenfolge der System in dieser Datei bestimmt auch die Reihenfolge in der EmulationStation.
runcommand.sh
In der es_systems.cfg werdet ihr viele Systeme finden, die mit runcommand.sh gestartet werden. Dabei handelt es sich um ein Script, dass die Auflösung vor dem Start des Emulators ändert. Der Aufruf sieht dabei so aus runcommand.sh <Nr.> <Startbefehl>.
Über <Nr.> wird der geünschte Bildschirmmodus gewählt, dabei sind aktuell folgende Werte möglich:
# 1: VGA-Modus nur wenn HDMI verwendet wird # 2: keine Änderung der Auflösung, einfach starten # 3: VGA-Modus # 4: 720p mit 60 Hz nur wenn HDMI verwendet wird # 5: 576p mit 50 Hz nur wenn HDMI verwendet wird # 6: 720p mit 50 Hz nuri wenn HDMI verwendet wird # 7: PAL 4:3 (Standard-TV) # 8: NTSC 4:3 (Standard-TV)
retroarch.cfg
In dieser Datei werden sämtliche Einstellungen für die RetroArch-Emulatoren gespeichert.
Exkurs: Was zum Teufel ist denn jetzt ‘RetroArch‘ schon wieder?
Meistens ‘rede’ ich nur von RetroPie und EmulationStation, aber die eigentliche Arbeit verrichtet zum Größtenteil RetroArch oder um noch genauer zu sein Libretro. Unser Emulatorsystem ist hirachisch (von unten nach oben) wie folgt aufgebaut:
- 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, …
- Emulatoren / Apps: Angepasste Programme greifen auf Libretro zu und versorgen uns so mit Emulatoren und anderen Tools (z. B. Mediaplayern).
- RetroArch: 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 aus den zu RetroArch gehörenden Emulatoren aufrufen.
- 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.
- 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.
Die übergreifende retroarch.cfg findet ihr im Verzeichnis /opt/retropie/configs/all. Übergreifend deshalb, weil jeder Emulator seine eigene retroarch.cfg haben kann. Dazu gibt es für jedes System unter /opt/retropie/configs einen eigenen Ordner. Die Emulatoren laden nun erst die Datei aus dem all-Ordner und anschließend die aus dem jeweiligen Systemverzeichnis. Neue Parameter werden automatisch hinzugefügt, gibt es einen Parameter in beiden Dateien, dann ‚gewinnt‚ der aus der retroarch.cfg aus dem Systemverzeichnis. Ihr könnt so also erstmal allgemeine Einstellungen festlegen und dann zusätzlich bei Bedarf diese Werte für die einzelnen System überschreiben und ergänzen.
Die Parameter sind dabei so umfangreich, dass ich hier nur eine Übersicht bieten kann.
input_axis_threshold = "0.500000" load_dummy_on_core_shutdown = "true" fps_show = "false" libretro_path = "/opt/retropie/emulatorcores/pocketsnes-libretro/libretro.so" libretro_directory = "" libretro_info_path = "" cheat_database_path = "" rewind_enable = "false" audio_latency = "64" audio_sync = "true" audio_block_frames = "0" rewind_granularity = "2" video_shader = "/opt/retropie/emulators/RetroArch/shader/snes_phosphor.glslp" video_shader_enable = "false" video_aspect_ratio = "1.330000" video_windowed_fullscreen = "true" video_xscale = "3.000000" autosave_interval = "0" video_yscale = "3.000000" video_crop_overscan = "true" video_scale_integer = "false" video_smooth = "false" video_threaded = "true" video_shared_context = "false" video_fullscreen = "false" video_refresh_rate = "59.950001" video_monitor_index = "0" video_fullscreen_x = "0" video_fullscreen_y = "0" video_driver = "gl" menu_driver = "rgui" video_vsync = "true" video_hard_sync = "false" video_hard_sync_frames = "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 = "4" audio_device = "" audio_dsp_plugin = "" audio_rate_control = "true" audio_rate_control_delta = "0.005000" audio_driver = "alsathread" audio_out_rate = "48000" video_font_size = "32.000000" video_font_enable = "true" system_directory = "~/RetroPie/roms/../BIOS" extraction_directory = "" audio_resampler = "sinc" savefile_directory = "default" savestate_directory = "default" video_shader_dir = "/opt/retropie/emulators/RetroArch/shader/" video_filter = "" video_filter_dir = "default" audio_filter_dir = "default" content_directory = "default" assets_directory = "default" rgui_browser_directory = "default" rgui_config_directory = "default" rgui_show_start_screen = "false" game_history_path = "" game_history_size = "100" joypad_autoconfig_dir = "/opt/retropie/emulators/RetroArch/configs/" input_autodetect_enable = "true" overlay_directory = "default" input_overlay = "" input_overlay_enable = "false" input_overlay_opacity = "0.700000" input_overlay_scale = "1.000000" gamma_correction = "false" triple_buffering_enable = "false" soft_filter_enable = "false" flicker_filter_enable = "false" flicker_filter_index = "0" soft_filter_index = "0" current_resolution_id = "0" custom_viewport_width = "958" custom_viewport_height = "720" custom_viewport_x = "161" custom_viewport_y = "0" block_sram_overwrite = "false" savestate_auto_index = "false" savestate_auto_save = "false" savestate_auto_load = "true" fastforward_ratio = "-1.000000" slowmotion_ratio = "3.000000" config_save_on_exit = "false" sound_mode = "0" state_slot = "0" netplay_spectator_mode_enable = "false" netplay_mode = "false" netplay_nickname = "" netplay_ip_address = "" netplay_ip_port = "0" netplay_delay_frames = "0" custom_bgm_enable = "false" input_driver = "udev" input_joypad_driver = "" input_keyboard_layout = "" input_device_p1 = "0" input_player1_joypad_index = "0" input_libretro_device_p1 = "1" input_player1_analog_dpad_mode = "1" 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_player1_b = "z" input_player1_b_btn = "1" input_player1_b_axis = "nul" input_player1_y = "a" input_player1_y_btn = "3" input_player1_y_axis = "nul" input_player1_select = "rshift" input_player1_select_btn = "6" input_player1_select_axis = "nul" input_player1_start = "enter" input_player1_start_btn = "7" input_player1_start_axis = "nul" input_player1_up = "up" input_player1_up_btn = "13" input_player1_up_axis = "nul" input_player1_down = "down" input_player1_down_btn = "14" input_player1_down_axis = "nul" input_player1_left = "left" input_player1_left_btn = "11" input_player1_left_axis = "nul" input_player1_right = "right" input_player1_right_btn = "12" input_player1_right_axis = "nul" input_player1_a = "x" input_player1_a_btn = "0" input_player1_a_axis = "nul" input_player1_x = "s" input_player1_x_btn = "2" input_player1_x_axis = "nul" input_player1_l = "q" input_player1_l_btn = "4" input_player1_l_axis = "nul" input_player1_r = "w" input_player1_r_btn = "5" input_player1_r_axis = "nul" input_player1_l2 = "nul" input_player1_l2_btn = "nul" input_player1_l2_axis = "+2" input_player1_r2 = "nul" input_player1_r2_btn = "nul" input_player1_r2_axis = "+5" input_player1_l3 = "nul" input_player1_l3_btn = "9" input_player1_l3_axis = "nul" input_player1_r3 = "nul" input_player1_r3_btn = "10" input_player1_r3_axis = "nul" input_player1_l_x_plus = "nul" input_player1_l_x_plus_btn = "nul" input_player1_l_x_plus_axis = "+0" input_player1_l_x_minus = "nul" input_player1_l_x_minus_btn = "nul" input_player1_l_x_minus_axis = "-0" input_player1_l_y_plus = "nul" input_player1_l_y_plus_btn = "nul" input_player1_l_y_plus_axis = "+1" input_player1_l_y_minus = "nul" input_player1_l_y_minus_btn = "nul" input_player1_l_y_minus_axis = "-1" input_player1_r_x_plus = "nul" input_player1_r_x_plus_btn = "nul" input_player1_r_x_plus_axis = "+3" input_player1_r_x_minus = "nul" input_player1_r_x_minus_btn = "nul" input_player1_r_x_minus_axis = "-3" input_player1_r_y_plus = "nul" input_player1_r_y_plus_btn = "nul" input_player1_r_y_plus_axis = "+4" input_player1_r_y_minus = "nul" input_player1_r_y_minus_btn = "nul" input_player1_r_y_minus_axis = "-4" 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 = "7" 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 = "8" 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_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" core_specific_config = "false" libretro_log_level = "0" log_verbosity = "false" perfcnt_enable = "false"
Warum die EmulationStation 2 so langsam lädt
Die neue EmulationStation 2 ist zwar sehr hübsch, aber hat aktuell auch einige Probleme. Euch ist evtl. schon aufgefallen, dass der Start oder die Rückkehr von einem Emulator sehr lange dauern kann.
Hier zwei Gründe, weshalb dies so ist.
Umso mehr Systeme ihr in die EmulationStation 2 einbindet, umso länger braucht diese zum Starten. Außerdem kommt es zu Anzeigefehlern. Der Grund ist das Standard-Theme. Der Name ‚simple‘ ist etwas irreführend, das Theme verbraucht unheimlich viele Resourcen. Allerdings will ich nicht alle Schuld dem Theme zuschieben, die Art und Weise, wie die EmulationStation 2 damit umgeht ist eigentlich das Hauptproblem. Sie lädt sämtliche Systembilder…
… die benötigt werden direkt beim Start in den Speicher. Jedes dieser verwaschenen Bilder liegt in FullHD vor. Die Logos und Systemnamen sind Vectorgrafiken. Um dies zu beschleunigen könnt ihr das Theme bearbeiten, euer eigenes erstellen oder einfach komplett auf ein Theme verzichten. Für ein leeres Theme, verlasst die EmulationStation und wechselt mit cd /etc/emulationstation/themes das Verzeichnis. Hier werden alle Themes abgelegt, aktuell findet ihr dort nur das mitgelieferte ‚Simple‘-Theme.
Legt nun mit sudo mkdir none einen leeren Ordner an. Der Ordnername (hier none) erscheint gleich in der EmulationStation als auswählbares Theme. Startet nun die EmulationStation durch Eingabe von emulationstation wieder, drückt dort eure Menü-Taste und wählt UI SETTINGS aus.
Scrollt dann runter bis THEME SET und wählt das leere Theme aus (hier none).
Dann könnt ihr über BACK wieder zum vorherigen Menü zurückkehren und auch dieses verlassen.
Nun seht ihr das neue Theme in seiner ganzen Pracht 😉 .
Dies ist natürlich nur für Puristen oder zum Testen gedacht. Falls ihr mal Probleme mit der Geschwindigkeit oder Darstellung habt, könnt ihr so kontrollieren, ob es am Theme liegt. Ich empfehle eher ein eigenes Theme zu erstellen, das weniger Speicher belegt und hoffe gleichzeitig auf eine Überarbeitung der EmulationStation 2.
Ein weiterer Grund, weshalb die EmulationStation 2 langsam startet sind eure Spiele & Programme. Die EmulationStation grast beim Start alle Verzeichnisse ab, die in der es_systems.cfg unter <path> zufinden sind. Dabei geht das Programm alle Dateien in allen Verzeichnissen und Unterverzeichnissen durch und kontrolliert, ob die Endung für das jeweilige System ‚gültig‘ ist (siehe <extension>). Die gefundenen Dateien werden in einer Stuktur gespeichert und hier kommt es zur Verzögerung! Umso größer die Struktur wird, umso langsamer läuft das Eintragen der Dateiinfos in diese.
Ich habe dies mal getestet. Mein Setup war ein nicht übertakteter (preset NONE) Pi Model B, mit leerem Theme. Der Zugriff auf die ROMs erfolgt direkt übers Netzwerk (Kabel).
Gemessen wurde die Startzeit für einen manuellen Start vom Terminal (vom ENTER, bis das Menü vollständig sichtbar ist).
- Versuch
10.000 Einträge für drei verschiedene Systeme (2.000 + 3.000 + 5.000).
Startzeit = 7 Sekunden
- Versuch
Zusätzlich ein weiteres System mit allein 28.500 Einträgen.
Startzeit = 2 Min. 20 Sek.
Das Beenden der EmulationStation, bis der Prompt wieder sichtbar ist, dauert länger als der Start 2 Min. 50 Sekunden! Außerdem steigt der Speicherbedarf von 5,7% auf 12,4% an.
- Versuch
Die 28.500 Einträge auf Verzeichnisse A-Z aufgeteilt und für jeden Buchstaben ein eigenes System angelegt.
Startzeit = 28 Sekunden (die Dateien aus Versuch 1 waren ebenfalls noch aktiv!) Der Speicherbedarf ist natürlich noch etwas höher. Nur A-Z Ordner ohne Aufteilung auf verschiedene Systeme bringen übrigens nichts!
Wie ihr seht verringert sich die Startzeit, wenn man die 28.500 Dateien auf 26 Systeme aufteilt von 2 Minuten 20 Sekunden auf nur noch 28 Sekunden.
Schön wäre es natürlich, wenn die EmulationStation angepasst würde, aber bis dahin kann ich nur folgende Tipps anbieten:
- Unter einem System sollten nicht zuviele Spiele (auf jeden Fall unter 10.000) verwaltet werden. Sonst wird die Struktur für ein einzelnes System zu groß und dann benötigt das Hinzufügen neuer Einträge zunehmend mehr Zeit.
- Die <path>-Angabe sollte direkt auf die Spiele zeigen, damit möglichst wenige Unterordner vergeblich durchsucht werden müssen. Außerdem sollten möglichst nur solche Dateien in den Ordnern liegen, die auch zum jeweiligen Emulator gehören.
- Da PC-Spiele häufig viele Unterverzeichnisse und sehr viele Dateien haben, würde ich mir evtl. überlegen eigene Startscripte für PC-Spiele anzulegen, die die EmulationStation dann anzeigt. Ähnlich wie bei den Spielen unter ports.
Übertakten
Der Raspberry Pi ist mit seinen 700Mhz nicht gerade einer der Schnellsten. Dies hat auch die Raspberry Foundation erkannt und bietet daher ein Übertakten ohne Einfluß auf die Garantie an. Falls euch der eine oder andere Emulator zu sehr ruckelt, könnt ihr durch Erhöhung der der Taktfrequenzen evtl. ein besseres Ergebnis erzielen.
Beachtet aber, dass sich das Übertakten auf die Lebensdauer eures Pi auswirkt!
Dass er dadurch nicht länger hält, sollte klar sein.
Verlasst die EmulationStation, gebt sudo raspi-config ein und wählt 7 Overclock aus.
Es erscheint eine wichtige Meldung. Hier wird noch mal auf Probleme hingewiesen, die es durchs Übertakten geben kann. Außerdem findet ihr dort den Hinweis, dass ihr beim Booten die <SHIFT>-Taste gedrückt halten könnt, um das Übertakten zu deaktivieren.
So kommt ihr immer wieder in die Einstellungen, falls ihr es mal übertrieben habt und nichts mehr geht.
Schließlich erhaltet ihr eine Auswahl an vorgefertigten Übertaktungsmöglichkeiten.
Damit eure Änderungen ‚greifen‘ müsst ihr den Pi booten, bestätigt die Abfrage beim Verlassen von raspi-config einfach mit <Yes>.
BIOS
Vielleicht habt ihr euch schon mal gefragt, wie man an das BIOS des Raspberry gelangt. Ihr wisst bestimmt, dass das BIOS bei eurem PC oder Notebook in einem nicht flüchtigem Speicher abgelegt ist. Früher war dies ein fest programmiertes ROM – heute häufig ein beschreibarer Speicher. Wer kennt nicht die Spannung bei einem BIOS-Update.
Beim Pi gibt es so etwas aber nicht!
Hier liegt das BIOS als Textdatei auf der SD-Karte. Ihr findet es im Verzeichnis /boot in der Datei config.txt. Diesen Ordner seht ihr übrigens auch, wenn ihr die SD-Karte in euren Kartenleser am PC / Notebook steckt. Die config.txt könnt ihr somit ganz einfach am PC oder mit nano einsehen / bearbeiten.
Hier findet ihr z. B. auch die Werte der Übertaktung von eben. Ihr könnt also auch andere Einstellungen, als die Vorgegebenen, verwenden. Häufig werden hier auch die HDMI-Einstellungen für den Pi angepasst, falls es Probleme mit der Anzeige gibt.
Wie immer gilt: Seid vorsichtig, wenn ihr mit dem BIOS-Einstellungen rumspielt.
Analoges Videokabel für den Raspberry Pi Model B+
Die bisher getrennten Anschlüsse für analoges Audio & Video werden beim B+ über eine 4 polige 3,5mm Klinkenbuchse zur Verfügung gestellt.
Achtung: Beim Kabel müsst ihr etwas aufpassen! Leider hat sich die Industrie auf keine Norm geeinigt! Wie ihr unten im Bild seht, kann es also passieren, dass ihr die Stecker anderes anstöpseln müsst (Camcorder) oder dass das Kabel überhaupt nicht funktioniert (MP3-Player)!
Ich verwende übrigens ein Camcorder-Kabel von Vesalia und muss daher Audio-rechts und Video vertauschen.
Ein USB-Laufwerk einbinden
Der Raspberry Pi bootet zwar immer von der SD-Karte, aber ihr könnt natürlich trotzdem eine USB-Festplatte oder einen USB-Stick anschließen, um davon die ROMs zu laden.
Fahrt den Pi hoch und begebt euch ins Terminal. Schließt dann das USB-Laufwerk an. Verwendet ihr eine USB-Festplatte ohne eigenes Netzteil, dann könnte es ratsam sein, einen aktiven USB-Hub zu verwenden. Sobald das Laufwerk am Pi hängt und eingeschaltet ist, gebt sudo fdisk -l ein. Damit listet ihr alle angeschlossenen Laufwerke auf. Als erstes solltet ihr die Infos über die SD-Karte sehen, am Schluß dann das USB-Laufwerk.
Wir müssen uns nun für den nächsten Schritt einmal den ‚Namen‘ merken, unter dem das Lauferwerk eingebunden wurde. Hier bei mir /dev/sda1.
Jetzt brauchen wir noch einen sog. mount point. Dies ist nichts anderes als ein Verzeichnis, in dem wir das USB-Laufwerk einblenden. Ich habe mich für einen weiteren Ordner unter roms entschieden. Für das USB-Laufwerk lege ich dort einfach ein Verzeichnis mit dem Namen usb an. Ihr könnt selbstverständlich auch einen anderen Ort und Namen wählen. Ihr müsst dann nur daran denken, für die folgenden Schritte eure Werte zu nehmen. Das benötigte Verzeichnis wird mit sudo mkdir ~/RetroPie/roms/usb erzeugt.
Damit das Laufwerk in Zukunft automatisch im usb-Verzeichnis sichtbar wird, müssen wir jetzt noch eine Zeile zur fstab hinzufügen. Öffnet diese Datei mit sudo nano /etc/fstab zum Bearbeiten. Gebt die folgende Zeile am Ende der Datei ein:
/dev/sda1 /home/pi/RetroPie/roms/usb vfat defaults,umask=000 0 0
Achtung: Der Parameter vfat ist für Laufwerke, die als FAT formatiert sind. Verwendet ihr ein NTFS-Laufwerk, dann müsst ihr stattdessen dort ntfs eingeben! Das umask=000 gibt euch Vollzugriff auf Dateien und Ordner, dadurch könnt ihr auch als User Pi auf den USB-Stick schreiben. RetroArch speichert z. B. standardmäßig eure States und Spielstände in selben Verzeichnis, wie die ROMs.
Beendet nano und speichert eure Eingaben. Wenn ihr nun den Pi bootet oder im Terminal sudo mount -a eingebt, dann sollte euer Laufwerk im usb-Ordner erscheinen.
Nun braucht ihr nur noch die es_systems.cfg anzupassen, damit die EmulationStation die ROMs über das neue usb-Verzeichnis vom USB-Laufwerk lädt.
Übers Netzwerk direkt auf ROMs zugreifen
Liegen eure ROMs (wie bei mir) z. B. auf einem NAS und ihr möchtet euch das ewige Kopieren sparen oder die Daten erst bei Bedarf am Pi kopieren, dann wäre es doch schön, wenn ihr direkt übers Netzwerk auf die ROMs zugreifen könntet. Ich gehe hier davon aus, dass es sich um ein von Windows ansprechbares Netzlaufwerk handelt.
Um dies zu bewerkstelligen, legt zunächst einen Ordner an. Ich habe mich dazu entschieden diesen im bekannten roms-Verzeichnis, auf der SD-Karte, zu erzeugen.
Verlasst also, falls notwendig, die EmulationStation und wechselt mit cd ~/RetroPie/roms ins entsprechende Verzeichnis. Legt dann über sudo mkdir network euren Ordner an. Ihr könnt natürlich auch ein anderes Ziel-Verzeichnis wählen und auch den Namen network, für den neue Ordner, könnt ihr ändern, wichtig ist nur, dass ihr euch merkt, wo das neue Verzeichnis liegt und wie es heißt. Dieses Verzeichnis verwenden wir jetzt um unser Netzwerk-Verzeichnis zu ‚mounten‘.
Um in Zukunft direkt dafür zu sorgen, dass unsere Netzwerkverbindung beim Start automatisch hergestellt wird, müssen wir mal wieder eine Datei, nämlich fstab, ändern. Startet den Editor also über sudo nano /etc/fstab, geht dann ans Ende der Datei und fügt folgende Zeile hinzu.
//nas/daten/emulatoren/roms /home/pi/RetroPie/roms/network cifs username=ich,password=geheim 0 0
Natürlich müsst ihr eure echten Werte nach diesem Muster eintragen:
<Netzwerkpfad> <Pi-Verzeichnis> cifs username=<Benutzername>[,password=<Passwort>] 0 0
Beendet die Eingabe dann wieder mit <STRG>+x, drückt anschließend bei der Abfrage y damit gespeichert wird und bestätigt den Dateinamen einfach mit <ENTER>.
Bootet danach den Pi über sudo reboot, verlasst, nach dem Hochfahren, die EmulationStation aber direkt wieder.
Jetzt sollten wir kontrollieren, ob alles geklappt hat. Gebt df -h ein, dies zeigt den freien Speicher der Laufwerke an. Eure Ausgabe könnte z. B. so aussehen
Filesystem Size Used Avail Use% Mounted on rootfs 15G 3.4G 11G 25% / /dev/root 15G 3.4G 11G 25% / devtmpfs 180M 0 180M 0% /dev tmpfs 38M 416K 38M 2% /run tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 75M 0 75M 0% /run/shm /dev/mmcblk0p1 56M 19M 38M 34% /boot //nas/daten/emulatoren/roms 918G 762G 156G 84% /home/pi/RetroPie/roms/network
Wichtig ist, dass euer Netzwerklaufwerk jetzt erscheinen muss (Markierung). Falls dies nicht der Fall ist, kontrolliert die eben gemachten Angaben in der fstab.
Anschließend schauen wir auch mal ins neue Verzeichnis. Wechselt mit cd ~/RetroPie/roms/network dort hin und lasst euch anschließend über ls den Inhalt anzeigen.
Nun sollte ihr eure Netzwerkdaten und -Verzeichnisse sehen.
Damit die EmulationStation auch ROMs übers Netzwerk sucht und startet, müssen wir noch das neue Verzeichnis in die es_systems.cfg eintragen. Startet den Editor sudo nano /etc/emulationstation/es_systems.cfg und ändert nun alle PATH=-Angaben, die aufs Netzwerk zugreifen sollen, so dass unser neuer Ordner verwendet wird. Für das Atari VCS 2600-System könnte es wie folgt aussehen (ihr müsst selbstverständlich eure echten Netzwerkpfade verwenden):
<path>/home/pi/RetroPie/roms/network/Atari/VCS2600</path>
Speichert eure Eingaben und startet die EmulationStation, nun solltet ihr auf die ROMs übers Netzwerk zugreifen können.
Systemwarnungen
Falls ihr euren Pi übertaktet oder sehr viele Geräte daran angeschlossen habt, könnte es sein, dass der Pi am Limit läuft und euch auf Probleme aufmerksam machen möchte.
Mitte 2014 wurde die Firmware um zwei Warnzeichen erweitert. Sollte die CPU-Themperatur zu hoch sein, dann zeigt der Pi in der rechten oberen Ecke ein rotes Quadrat an.
Diese Warnung kann jeder Pi anzeigen, der eine aktuelle Firmware verwendet. Ihr solltet dann überlegen, ob ihr den Pi wieder etwas langsamer laufen lasst, Kühlkörper einsetzt oder einen kühleren Platz sucht. Zu große Hitze ist der Feind jeder Elektronik. Standardmäßig kommt die Warnung, sobald 85°C überschritten werden. Ihr könnt in der config.txt mit temp_limit= übrigens auch eine eigene Grenze angeben.
Die zweite Warnung gibt es nur bei Modellen ab B+ (also auch beim Pi2). Hier wird die Spannung überwacht. Spannungsprobleme treten meistens bei zu schwachen Netzteilen auf oder falls ihr zuviele Geräte an den Pi gestöpselt habt. Sollte die Spannung unter 4,65V fallen, erscheint ein regenbogenfarbenes Quadrat rechts oben. Außerdem erlischt dann auch die Power LED!
Diese Info kann übrigens auch an GPIO35 abgegriffen werden. Ihr solltet auch dieses Problem unbedingt beseitigen! Der Pi neigt dann, wie bei Überhitzung, zu Abstürzen und es droht evtl. Datenverlust! Besorgt euch besser ein stärkeres Netzteil oder schließt USB-Geräte über einen aktiven HUB an.
Wie bereits bei der WLAN-Einrichtung beschrieben, kann ein Spannungsproblem aber auch eine andere Ursache haben:
Direkt am Pi zieht der WLAN-Stick die Spannung bei jedem Netzwerkzugriff anscheinend ganz übel nach unten. Pausenlos erscheint die Spannungswarnung! Es schien also ratsam zu sein, einen aktiven USB-Hub einzusetzen. Gesagt, getan – Wie sich dann allerdings herausstellte, war das auch nicht die Lösung. Andere Netzteile brachten ebenfalls keine Besserung. Sogar, wenn nur der WLAN-Stick am Pi hing, kam es zu Spannungseinbrüchen. Als Verursacher für das Problem stellte sich schließlich ein zu langes (oder ‚schlechtes‚) USB-Kabel für die Stromversorgung heraus! Durch dieses Kabel fiel die Spannung schon merklich ab, sodass am Pi nicht mehr genug zur Verfügung stand. Ich verwende jetzt ein anderes Kabel und schon kann ich alle vier USB-Ports (Tastatur-Receiver, XBox360-Receiver, Bluetooth und WLAN) verwenden, ohne dass auch nur einmal die Spannungswarnung erscheint.
Für die Dauer beider Warnungen wird automatisch der Turbo-Modus deaktivert. Die Warnungen bleiben nur solange sichtbar, solange das Problem tatsächlich besteht.
Ihr habt die Möglichkeit den Turbo-Modus bei mangelhafter Spannung weiterhin aktiviert zu lassen. Tragt dazu avoid_warnings=2 in die config.txt ein. Mit avoid_warnings=1 könnt ihr die Anzeige der Warn-Quadrate abschalten. Ich würde aber davon abraten! Beseitigt besser das Problem.
Hallo,
ich bin neu und benötige Hilfe..
Wie kann ich die Konfiguration meiner Tastatur im attrack mode auf “Standard” setzen?
Unter Retropie / hyperpie funktioniert die “Return” Taste leider nicht.
Habe auch schon unter Emulationstation versucht alles auf default zu setzen aber leider ohne Erfolg.
Vielen Dank & viele Grüße
Gibt es denn ein deutschsprachiges – aktuelles – Forum für Retropie bzw. Recalbox?
Ich bin total begeistert vom Thema Pi3 und Retro-Gaming-Emulatoren, hab mir schon Käbel, Schalter, 2 Speicherkarten, hardware usw gekauft.
Retropie läuft super, drauf kopiert, eingerichtet, die wifikeyfile.txt angepasst, keine Tastatur oder Maus gebraucht, alles nur mit dem Controller – funktioniert !
Bei Recalbox brauche ich eine Tastatur um bspw. WIFI anzupassen.
Irgendwer schrieb mal hier im Netz dass Recalbox so viel einfacher sei und man überhaupt nix einzurichten braucht. Das stimmt ja so nicht.
Jedenfalls suche ich ein deutschsprachiges Retropie bzw. Retropie und Recalbox Forum und wollte mal fragen, ob ihr da was “gutes” kennt, wenns sowas überhaupt gibt.
Schau ich mir aber die Verkaufszahlen aus allen möglichen Online-Shops an (reichelt, comtech, conrad….) dann müsste die Retro-Gaming-PI3-Community doch schier unendlich groß sein, oder irre ich?
Wäre toll Antworten zu bekommen
Grüße
Auch kann man an Hand der Verkaufszahlen des Pi nicht direkt auf den Retro-Einsatz schließen. Sehr viele kaufen den Pi auch ohne damit jemals alte Spiele zocken zu wollen. Außerdem braucht man fürs daddeln weder Recalbox noch RetroPie. Einige packen einfach nur den Wunsch-Emulator auf die SD-Karte.
Hallo
Würde gerne den wd pidrive als bootlaufwerk benutzen, also ohne sd karte, kann man ein fertiges image auf den pidrive brennen und davon starten?
Viele grüsse
aktuell nein, ohne SD-Karte geht nichts.
Aber mit dem Pi3 wurde die Möglichkeit vorgesehen, von anderen Geräten zu booten. Näheres findest du hier…
Moin moin,
das mit dem Nutzen der Roms per USB oder SD-Karte funzt ja wunderbar, gibt es aber einen Weg das mit beiden Medien zur gleichen Zeit zu machen?
Mit Symlinks gehts leider nicht, da streikt Linux mit dem Hinweis das es Laufwerksübergreifend nicht zulässig ist.
Hast du da eine Idee das vielleicht in der es_systems.cfg mit mehreren Pfaden zu realisieren?
MfG, LAllek
das habe ich auch noch nicht ausprobiert.
Bei der EmulationStation gibt es seit Feburar 2015 ein „Feature-Request“ für mehrere Pfade. Aber ob da noch etwas passiert??? Es ist sehr still geworen.
Du könntest es evtl. mal mit
mount --bind /quelle /ziel
versuchen. Ich kann aber nicht sagen, ob dies Laufwerksübergreifend funktioniert.Kann man bei V3.0 die C64 Emulation bzw. VICE so einrichten dass man die Ladegeräusche über die Boxen hört? Oder hat der sowas nicht?
Hallo,
kann man eigentlich den RetroPie 3.0 so einstellen, dass der nach dem booten nicht in die Emulationstation geht sondern direkt VICE startet, zum Beispiel?
grüße
thomas
Hallo,
ich weiß nun dass ich einmal in RetroArch einen Input_Enable_Hotkey_btn = und einen Input_enable_Hotkey = also eine Tastatur-Taste UND einen Button auf nem Pad/Joystick vergeben kann und das geht auch parallel. Aber wie kann ich denn 2 Hotkeys für die Tastatur vergeben?
Zwei mal hintereinander in der Configs.all ein “Input_Enable_Hotkey = funkt nicht. Da er anscheinend nur eine Taste zulässt, kann das sein?
Naja war nur ein Gedanke. Wir bauen uns einen Arcade Automaten mit dem Raspberry und RetroPie und bedienen das Ganze mit einem Keyboardhack und Arcade Buttons und Joysticks. Um nun möglichst viele Systeme unter einem Hut zu bekommen ist das so eine Sache mit der Steuerung. Zum Beispiel gibt es einige Standard Hotkeys für RetroArch. Wenn ich also eine Tastatur Steuerung für Player 1 und Player 2 einrichte muss ich die deaktivieren und zwar jeden einzelnen (wenn ich die entsprechenden Tasten “erwischen” sollte). Einfacher ist es alle mit einem Enable-Hotkey quasi auszublenden, dann brauch ich mich darum gar nicht kümmern. Dann habe ich aber das Problem, dass ich meinen Menu-Button und Exit-Button mit der Enable-Hotkey-Taste verbinden muss.
Um nun möglichst eine Einheitliche Steuerung für möglichst viele Systeme zu haben sind manche Buttons eh schon doppelt belegt. Zum Beispielt UAE4ALL-RPi und Vice haben einmal F11 und einmal F12 um ins Menu zu kommen. Also habe ich beide auf einen Button gelegt. Dieser Menu Button wird aber auch fürs RetroArch Menu benötigt. Also laaaaaange Rede kurzer Sinn 😉 War nur ein Gedanke für unseren Keyboard-Hack 🙂
muss jetzt wenn ich ne externe usb festplatte verwenden möchte überall bei den verzeichnis usb mit einbauen wie zbs megadrive was im tut steht geht das auch bei 30 beta2 ?
Wie ist das eigentlich? Die V3.0 ist ja noch im Beta-Stadium. Was ist denn wenn die dann sozusagen als Vollversion raus ist. Kann man dann sein bestehendes System von der beta weg updaten, oder muss man dann das neue v3.x image auf eine sd karte ziehen und alles neu einrichten?
Oder ist das immer unterschiedlich und man kann das noch gar nicht sagen?
Hallo,
meinst Du dass man XBMC neben RetroPie wie hier beschrieben unter V3.0 noch installieren kann?
http://www.forum-raspberrypi.de/Thread-tutorial-rertropie-und-xbmc
XBMC ist doch veraltet, du solltest jetzt Kodi nehmen und das läßt sich beim Image 3.0 direkt über das RetroPie-Setup installieren. Unter ‘RetroPie: Media Center (XBMC / Kodi)‘ findest du eine ähnliche Anleitung für das Image 2.3. Am Wochenende erscheint eine überarbeitete Fassung für V3.0.
UPDATE:
Hier die ‘neue’ Fassung inkl. XBox-Controller Einrichtung: ‘RetroPie V3.0: Media Center (Kodi)‘
Hallo,
ich konnte erfolgreich ein USB Stick als Speicher einbinden und das läuft auch alles super. Allerdings habe ich letztens festgestellt, dass ich keine Spielstände mehr in RetroArch speichern konnte. Kommt nur die Meldung, “Save State…Failed…:” muss ich wohl für die Spielstände auch noch etwas beachten?
sorry da habe ich einen Parameter vergessen!
Es fehlte ein
umask=000
, sonst hatte man nur alsroot
Schreibrechte. Ich habe das korrigiert, schau dir oben nochmal an, was in derfstab
stehen muss.Oh, super. Klasse, vielen lieben Dank 🙂