Der heutige Beitrag ist aus einem kleinen Projekt entstanden. Ziel ist es, zum Beispiel an einem Notebook und ggf. Videoprojektor im Garten mit Freunden sitzen zu können und die alten Computerspiele aus der Kindheit zu spielen. Einfach nur aus Spaß.
Damit alles angemessen „präsentiert“ werden kann, empfiehlt es sich mit Emulation Station zu befassen.
Siehe hierzu: http://www.emulationstation.org
Damit die Einrichtung nicht für alle Windows basierenden Systeme erneut durchgeführt werden muss, empfiehlt es sich dies als portable Lösung zu realisieren. Hier zusammenfassend meine Lösung.
Als Basis verwende ich einen älteren PC von ca. 2009, mit SSD und aktuellem Windows 10 (64bit). Als Controller verwende ich einen Xbox 360-Controller mit USB-Adapter.
Die Einrichtung ist jedoch nicht ganz trivial und es sind mehrere Aspekte zu beachten. Der zeitliche Aufwand zur Einrichtung, sobald das System verstanden wurde, ist jedoch überschaubar.
Zur Einrichtung von mir verwendete Tools sind:
Download und Vorbereitung EmulationStation
Zu Beginn laden wir für Windows die Variante zip file über folgende Seite:
http://emulationstation.org/#download
herunter und entpacken diese. Den Inhalt speichern wir direkt auf einem USB-Stick im Verzeichnis emulationstation:
Anschließend starten wir als erstes launch_portable.bat und bekommen folgende Meldung, dir wir mit ENTER wieder schließen:
Im Unterverzeichnis .emulationstation finden wir jetzt zwei Dateien, die uns im späteren Verlauf helfen und benötigt werden:
In der es_systems.cfg haben wir jetzt ein Beispiel zur Steuerung und Hinterlegung der Systeme, die wir gerne über Emulatoren etc. nutzen wollen:
Hilfe zur Einrichtung des Systems finden wir auf der Seite von retroarch. Hier sind ein paar sehr gute Beispiele dokumentiert:
https://github.com/HerbFargus/EmulationStation_Windows/wiki/Portable-Emulationstation
Zur vereinfachten Übernahme bereinigen wir zunächst die erstellte es_systems.cfg:
<!– This is the EmulationStation Systems configuration file.
All systems must be contained within the tag.–>
<systemList> ~\.emulationstation\roms </systemList>
Danach übernehmen wir von retrocharch als Beispiel:
und erhalten somit:
<!-- This is the EmulationStation Systems configuration file. All systems must be contained within the tag.--><systemList> ~\.emulationstation\roms <system> <name>snes</name> <fullname>Super Nintendo Entertainment System</fullname> <path>~\.emulationstation\roms\snes</path> <extension>.smc .sfc .SMC .SFC</extension> <command>%HOME%\.emulationstation\systems\retroarch\retroarch.exe -L %HOME%\.emulationstation\systems\retroarch\cores\snes9x_next_libretro.dll "%ROM_RAW%"</command> <platform>snes</platform> <theme>snes</theme> </system> </systemList>
Gemäß den Beispielen übernehmen wir in unserem Dateisystem die hier übernommen Strukturen in den Tags path und command. Daher erstellen wir zwei Unterverzeichnisse innerhalb .emulationstation (unbedingt das Verzeichnis mit dem beginnenden Punkt verwenden):
- roms
- systems
Im Verzeichnis roms erstellen wir jetzt das Verzeichnis snes und hinterlegen ein von uns bereits besitzendes ROM mit einer der notwendigen Erweiterung wie im Tag extension
smc .sfc .SMC .SFC
aufgeführt. Zum Test von EmulationStation reicht jedoch zunächst eine leere Datei mit einem Namen und entsprechender Erweiterung. Ich verwende hierbei:
Beispiel Textdatei.smc
Zusätzlich benötigen wir mindestens ein passendes System.
Hinweis: Ist das Verzeichnis für die ROMs nicht korrekt, so wird später beim Start von EmulationStation gemeldet, dass kein System gefunden werden konnte, obwohl das System korrekt hinterlegt ist. Für EmulationStation ist ein System erst vorhanden, wenn auch das Verzeichnis für die ROMs korrekt ist. Weitere Hinweise später unter: Hinweise zur Fehlersuche und bekannte Probleme.
Download und Vorbereitung retroarch
Zunächst laden wir die aktuelle stablie Version vom Projekt retroarch herunter:
https://github.com/HerbFargus/EmulationStation_Windows/wiki/Portable-Emulationstation
Wählen HERE direkt nach You can either download the stable version:
Dann win-x64 für Windows mit 64bit:
und anschließend die entsprechende 7z-Datei:
Die 7z-Datei entpacken wir anschließend mit dem zum Beginn des Eintrags aufgeführten Tool 7-zip und verschieben anschließend die Dateien in ein neues Verzeichnis retroarch unterhalb des Verzeichnis systems:
Wichtiger Hinweis: Zu empfehlen ist an dieser Stelle, dass die retroarch.cfg gesichert wird. Fehler beim Mapping von Tasten etc. können das weitere Verwenden von retroarch verhindern.
Damit wir anschließend beim Aufruf von EmulationStation auch die benötigten Emulatoren nutzen können, benötigen wir zunächst den jeweiligen Core. Welcher benötigt wird und ggf. welcher der richtige ist, sehen wir anhand der Parameter im command-Tag der es_systems.cfg
%HOME%\.emulationstation\systems\retroarch\retroarch.exe -L %HOME%\.emulationstation\systems\retroarch\cores\snes9x_next_libretro.dll "%ROM_RAW%"
Zum Download der Cores starten wir daher retroarch über die retroarch.exe
Zur Navigation verwenden wir folgende Tasten auf der Tastatur:
- Pfeiltasten zur Steuerung in den Menüs
- x zur Auswahl
- y zum Wechsel in überliegendes Menü
Bei meinem XBox 360-Controller sind dies B für Auswahl und A für Zurück.
Wir wählen zum Download des hier benötigten Cores Online Updater aus:
Core Updater:
Jetzt suchen wir in der Liste den wahrscheinlich richtigen Core (leider nicht eindeutig erkennbar):
In meinem Beispiel ist es SNES / Super Famicon (Snes9x Next):
Anschließend sehen wir kurz den Download der Datei zum Core:
Zur Prüfung, ob wir den richtigen Core erwischt haben, wechseln wir hier in das Unterverzeichnis cores:
und vergleichen den Dateinamen mit dem Namen der aufzurufenden Datei zum -L -Argument im command-Tag:
-L %HOME%\.emulationstation\systems\retroarch\cores\snes9x_next_libretro.dll
Perfekt!
Wichtiger Hinweis: Während meiner Tests hatte sich der Name der dll-Datei geändert. Ggf. ist es auch bei euch der Fall. Unbedingt vergleichen und korrigieren!
Erster richtiger Start von EmulationStation
Jetzt starten wir EmulationStation erneut über launch_portable.bat. Wer einen Controller hat, bitte vorab einschalten.
Wenn alles in Ordnung ist (es befindet sich mind. eine entsprechende ROM-Datei mit passender Dateiendung im richtigen roms-Verzeichnis), sehen wir eine der folgenden Meldungen:
oder
Mit einem langen Tastendruck des jeweiligen Controller (auch bei Tastatur) kann die Steuerung eingerichtet werden.
ACHTUNG: Das sich öffnende Menü ist kein Menü. Es wird hier sofort die richtige Taste zur Eingabe verlangt.
In meinem Fall musste ich nach meinem Fehlversuch mit ALT + F4 das Fenster über die Tastatur schließen und habe die Einrichtung der Eingabe über einen erneuten Start erfolgreich durchgeführt.
Wer jetzt einen Fehler gemacht hat, kann entweder im LOG das Mapping einsehen (es_log.txt). Beispiel:
lvl2: Configuring device 0 (XInput Controller #1). lvl2: Mapping [Button 0] -> Up lvl2: Mapping [Button 1] -> Down lvl2: Mapping [Button 2] -> Left lvl2: Mapping [Button 3] -> Right lvl2: Mapping [Button 10] -> A lvl2: Mapping [Button 11] -> B lvl2: Mapping [Button 4] -> Start lvl2: Mapping [Button 5] -> Select lvl2: Mapping [Button 8] -> PageUp lvl2: Mapping [Button 9] -> PageDown
um mit dieser Info die richtigen Tasten zur Navigation zu nutzen oder verwendet einen anderen Controller oder löscht die Datei es_input.cfg im Verzeichnis .emulationstation
Danach sehen wir:
und nach Auswahl:
Nach dem Aufruf von retroarch müssen wir ggf. einmalig manuell in den Vollbildmodus wechseln. Innerhalb von retroarch kann mit der F1-Taste ins Menü gewechselt werden. Die weiteren F-Tasten haben auch entsprechenden Funktionen. Mit der Taste f kann zwischen Vollbild und Fensteransicht gewechselt werden.
Als Beispiel bei erfolgreichem Aufruf sehen wir:
Wer jetzt den Emulator beenden möchte, kann dies entweder über das Menü mit F1 machen oder einfach die ESC-Taste kurz drücken.
Jetzt wo wir den Aufruf erfolgreich getestet haben, löschen wir in den ROMs Beispiel Textdatei.smc und starten erneut EmulationStation. Sofern jetzt weiterhin Beispiel Textdatei zur Auswahl zur Verfügung steht, kann jetzt die Datei gamelist.xml im entsprechend passenden ROM-Verzeichnis unter .emulationstation\gamelists\ löschen.
In meinem Beispiel befindet sich die Datei unter:
- emulationstation\.emulationstation\gamelists\snes
Der Inhalt ist folgender:
<?xml version="1.0"?> <gameList> <game> <path>./Beispiel Textdatei.smc</path> <name>Beispiel Textdatei</name> <playcount>1</playcount> <lastplayed>20170207T202234</lastplayed> </game> <game> <path>./Donkey Kong Country 1.smc</path> <name>Donkey Kong Country 1</name> <playcount>2</playcount> <lastplayed>20170207T202234</lastplayed> </game> </gameList>
Hinweise zur Fehlersuche und bekannte Probleme:
- Verwendung des Logs von EmulationStation
emulationstation\.emulationstation\es_log.txt - ggf. fehlender Pfad zu den ROMs in der es_systems.cfg
~\.emulationstation\roms - fehlendes Verzeichnis für die ROMs gemäß path-Tag der es_systems.cfg oder fehlende ROM-Datei mit passender Endung.
Beispiel-Meldung im LOG von EmulationStation bei fehlendem Verzeichnis oder fehlendem ROM:lvl1: Error - folder with path ""G:/emulationstation//.emulationstation/roms/snes"" is not a directory! lvl2: Parsing XML file "G:/emulationstation//.emulationstation/gamelists/snes/gamelist.xml"... lvl1: System "snes" has no games! Ignoring it. lvl0: No systems found! Does at least one system have a game present? (check that extensions match!)
- gelöschte Spiele bleiben gelegentlich in der Liste erhaltenauch. Das LOG es_log.txt gibt uns hier entsprechende Informationen
lvl2: Parsing XML file "G:/emulationstation//.emulationstation/gamelists/snes/gamelist.xml"...
Wie bereits beschrieben einfach die gamelist.xml im entsprechen Verzeichnis .emulationstation\gamelists\<system> passend löschen
- Ist ein Spiel zur Auswahl verfügbar und wird der Emulator unmittelbar nach Auswahl wieder geschlossen, den Aufruf im LOG prüfen:
lvl2: %HOME%\.emulationstation\systems\retroarch\retroarch.exe -L %HOME%\.emulationstation\systems\retroarch\cores\snes9x_next_libretro.dll "G:\emulationstation\\.emulationstation\roms\snes\Donkey Kong Country 1.smc"
In meinem Fall war nach einem Update des Core von Retroarch der Name der dll-Datei abweichend. Hier war eine einfach Korrektur in der es_systems.cfg erfolgreich.
Für mögliche Fehler und Probleme ggf. eine Kopie von launch_portable.bat erstellen (Beispiel zu fehlersuche.bat), die erste Zeile belassen, den Pfad aus dem LOG übernehmen und am Ende den Befehl pause einfügen:
Auszug aus dem Log es_log.txt kopieren:
lvl2: %HOME%\.emulationstation\systems\retroarch\retroarch.exe -L %HOME%\.emulationstation\systems\retroarch\cores\snes9x_next_libretro.dll "G:\emulationstation\\.emulationstation\roms\snes\Beispiel Textdatei.smc"
und in der fehlersuche.bat einfügen:
set HOME=%~dp0 %HOME%\.emulationstation\systems\retroarch\retroarch.exe -L %HOME%\.emulationstation\systems\retroarch\cores\snes9x_next_libretro.dll "G:\emulationstation\\.emulationstation\roms\snes\Beispiel Textdatei.smc" pause
Alles speichern und testen.
Erweiterung EmulationStation und retroarch um weitere Emulatoren
Anschließend können weitere Emulatoren über retroarch eingebunden werden. Ich habe dies für Megadrive, ScummVM und DosBox getestet. Leider sind die Ergebnissen für ScummVM und DosBox über retroarch sehr bescheiden. Anbei mein Versuch. Etwas später zeige ich meine Lösung auf.
Zunächst über retroarch die notwendigen Cores heruntergeladen:
Im Verzeichnis für die ROMs neue Ordner angelegt und die Spiele gespeichert (bei pc und scummvm jeweilis mit Unterordner pro Spiel):
Anschließend die Beispiele von retroarch für Dosbox:
<system> <name>pc</name> <fullname>PC (x86)</fullname> <path>~\.emulationstation\roms\pc</path> <extension>.sh .bat .com .exe .SH .BAT .COM .EXE</extension> <command>%HOME%\.emulationstation\systems\retroarch\retroarch.exe -L %HOME%\.emulationstation\systems\retroarch\cores\dosbox_libretro.dll "%ROM_RAW%"</command> <platform>pc</platform> <theme>pc</theme> </system>
und ScummVM:
<system> <name>scummvm</name> <fullname>ScummVM</fullname> <path>~\.emulationstation\roms\scummvm</path> <extension>.bat .BAT</extension> <command>~\.emulationstation\roms\scummvm .bat .BAT %HOME%\.emulationstation\systems\retroarch\retroarch.exe -L %HOME%\.emulationstation\systems\retroarch\cores\scummvm_libretro.dll "%ROM_RAW%"</command> <platform>pc</platform> <theme>scummvm</theme> </system>
und Mega Drive:
<system> <name>megadrive</name> <fullname>Sega Mega Drive / Genesis</fullname> <path>~\.emulationstation\roms\megadrive</path> <extension>.smd .bin .gen .md .sg .SMD .BIN .GEN .MD .SG</extension> <command>%HOME%\.emulationstation\systems\retroarch\retroarch.exe -L %HOME%\.emulationstation\systems\retroarch\cores\genesis_plus_gx_libretro.dll "%ROM_RAW%"</command> <platform>megadrive</platform> <theme>megadrive</theme> </system>
übernommen.
Beim ersten Versuch mit Mega Drive und Sonic the Hedgehog konnte ich gleich erfolgreich den ersten Level mit zusätzlichem Leben beenden. In retroarch gleich mit der F2-Taste den aktuellen Status im state slot #1 gespeichert.
Mit F6 und F7 kann zwischen den state slots gewechselt werden und mit F4 wird aus dem jeweiligen state slot der gespeicherte Zustand geladen. Geil, so muss es sein!
Mittels retroarch und Core für Dosbox funktionierte zwar der Aufruf zu den Spielen. Die Verzeichnisse werden in Dosbox gemappt, aber es passiert dann nichts mehr. Teilweise erschien die Meldung Datenfile nicht gefunden. Da wo ich ins Eingabefenster springen konnte ist mir aufgefallen, dass mit der Leertaste die Geschwindigkeit massiv erhöht wird. Ein Leerzeichen ist dann schnell mal 20 Zeichen lang. Auch alle anderen Funktionen von retroarch blieben erhalten, was sich sehr ungünstig bei Tastatureingaben verhielt. In dieser Form absolut für mich ungeeignet.
Bei der Variante mit retrocharch und dem Core für ScummVM ist ein Starten zunächst überhaupt nicht möglich. Nach vielen Tests in der Kommandozeile war mir aufgefallen, dass mit dem Aufruf von retroarch und dem Core für ScummVM durch:
g:\emulationstation\.emulationstation\systems\retroarch\retroarch.exe -L g:\emulationstation\.emulationstation\systems\retroarch\cores\scummvm_libretro.dll
die anschließende Datei als Parameter, ausgelesen und der Inhalt als Aufrufparameter für ScummVM interpretiert wird. Mir ist derzeit keine Quelle bekannt wo das entsprechend beschrieben wird.
Ich habe daher zum Test die Datei Monkey Island 2.scummvm mit folgendem Inhalt erstellt:
"--path=g:\emulationstation\.emulationstation\roms\scummvm\Monkey Island 2" monkey2
Hinweis: Hier muss bereits das Anführungszeichen vor der Option –path bei Langnamen verwendet werden. Alternativ geht es auch ohne Anführungszeichen, wenn hierzu die Kurznamen für Nicht-8Punkt3-Namen verwendet werden. Zum Ermitteln unter Windows in der Kommandozeile folgendes Beispiel:
Für Monkey Island 2 wäre es dann:
--path=g:\emulationstation\.emulationstation\roms\scummvm\Monkey~2 monkey2
Anschließend konnte ich es mit dem Befehl:
g:\emulationstation\.emulationstation\systems\retroarch\retroarch.exe -f -L g:\emulationstation\.emulationstation\systems\retroarch\cores\scummvm_libretro.dll "g:\emulationstation\.emulationstation\roms\scummvm\Monkey Island 2.scummvm"
erfolgreich testen.
Damit dies auch direkt unter EmulationStation möglich ist, habe ich den Eintrag für das System zu:
<system> <name>scummvm</name> <fullname>ScummVM</fullname> <path>~\.emulationstation\roms\scummvm</path> <extension>.bat .BAT</extension> <command>~\.emulationstation\roms\scummvm .scummvm %HOME%\.emulationstation\systems\retroarch\retroarch.exe -L %HOME%\.emulationstation\systems\retroarch\cores\scummvm_libretro.dll "%HOME%\.emulationstation\roms\scummvm\%BASENAME%.scummvm"</command> <platform>pc</platform> <theme>scummvm</theme> </system>
geändert. Im Ergebnis, bei Aufruf über EmulationStation, konnte ich folgenden Test erfolgreich durchführen:
Jedoch habe ich auch hier wieder das Problem, dass ich derzeit nicht die Tastatur verwenden kann und ich bis dato keine Möglichkeit finden konnte, die störenden Funktionen zu deaktivieren. Zusätzlich bin ich noch nicht mit dem Menü in EmulationStation für ScummVM-Spiele zufrieden und das viel größere Problem ist die zum Start notwendige Game ID zu hinterlegen. Diese muss zusätzlich zum erfolgreichen Starten übergeben werden. In meinem Test:
--path=g:\emulationstation\.emulationstation\roms\scummvm\Monkey~2 monkey2
war es monkey2
Ein weiteres Problem ist, dass ich derzeit fest Laufwerk G: in Monkey Island 2.scummvm hinterlegt habe. Dadurch ist die portable Variante nicht mehr gegeben.
Sollte einer meiner Leser eine Lösung für das beschriebene Tastaturproblem haben, bitte melden. Zum Test in retroarch einfach f für den Wechsel zwischen Vollbild und Fenster verwenden.
Erweiterung EmulationStation um DosBox und ScummVM (nicht retroarch)
Durch die leider vorliegenden Probleme mit DosBox und ScummVM als Core in retroarch habe ich im Ordner .emulationstation\systems zwei zusätzliche Verzeichnisse
- dosbox
- scummvm
erzeugt. Anschließend laden wir die Dateien zu DosBox und ScummVM herunter:
Diese entpacken wir (auch die exe-Datei von DosBox) und verschieben den Inhalt in das jeweilige zuvor erstellte Verzeichnis. Damit sieht es so aus:
Zusätzlich war mir in EmulationStation aufgefallen, dass alle Dateien mit den hinterlegten Erweiterungen als Spiel gezählt werden. Bei Dune sind das immerhin:
Damit ich nun pro Spiel nur einen Eintrag habe, waren mehrere Dinge notwendig:
- Verwendung eines Verzeichnis mit einer Datei pro Spiel – Beispiel: Monkey Island 2.game (kann leer sein)
- Hinterlegung einer start.bat-Datei pro Spiel im Spieleverzeichnis, wo die notwendigen Befehle zum Start jeweils einmalig hinterlegt werden. Wenn sie fehlt, dann landen wir direkt im Verzeichnis und können manuell das Spiel starten.
- Korrektur des path– und extension-Tags in der sc_systems.cfg
- Anpassung command-Tag für den neuen Aufruf von DosBox als System in der es_systems.cfg
Um in Zukunft einen geringeren Aufwand zu haben, wenn ich Spiele hinzufüge oder lösche, generiere ich die jeweiligen Dateien mit Dateierweiterung .game.
Hierzu erzeuge ich zunächst ein Verzeichnis batch unterhalb .emulationstation und anschließend im Verzeichnis batch einen Ordner pc.
Damit nun zum Start von EmulationStation die Dateien generiert werden, habe ich die bestehende launch_portable.bat von:
@echo off set HOME=%~dp0 emulationstation.exe
zu:
@echo off set HOME=%~dp0 set HOME=%HOME:~0,-1% :create_pc_gamelist_files set PCGAMESDIR=%HOME%\.emulationstation\roms\pc set PCGAMESBATCHDIR=%HOME%\.emulationstation\batch\pc REM for /f "tokens=*" %%D in ('dir /B "%PCGAMESDIR%"') do del "%PCGAMESBATCHDIR%\%%D.game" for /f "tokens=*" %%D in ('dir /B /A:D "%PCGAMESDIR%"') do ( echo "%%D" in pc game dir found echo create "%PCGAMESBATCHDIR%\%%D.game" to start echo. echo. > "%PCGAMESBATCHDIR%\%%D.game" ) cls emulationstation.exe
angepasst. Nach dem ersten Start erhalten wir, vorausgesetzt wir haben Spiele im Verzeichnis
emulationstation\.emulationstation\roms\pc
gespeichert, die entsprechenden .game-Dateien.
Damit diese jetzt für die Darstellung in EmulationStation genutzt werden können und das bei Auswahl DosBox gestartet wird passen wir den System-Eintrag in der es_systems.cfg wie folgt an:
<system> <name>pc</name> <fullname>PC (x86)</fullname> <path>~\.emulationstation\batch\pc</path> <extension>.game</extension> <command>%HOME%\.emulationstation\systems\dosbox\dosbox.exe -exit -fullscreen -c "mount c: '%HOME%\.emulationstation\roms\pc\%BASENAME%'" -c "c:" -c "start.bat" </command> <platform>pc</platform> <theme>pc</theme> </system>
Beim Test sehen wir jetzt nur noch die einzelnen Spiele:
Damit jetzt die jeweiligen Spiele gestartet werden können, erstellen wir im Verzeichnis zum jeweiligen Spiel die start.bat-Datei. Am einfachen Beispiel von Lost Vikings 1 ist der Inhalt:
@echo off VIKINGS.exe exit
Hinweis: Durch den abschließenden Befehl exit wird anschließend DosBox beendet.
Wenn wir jetzt das Spiel über Emulation Station starten sehen wir (mit ALT+ENTER kann der Vollbildmodus verlassen werden) das Spiel in der DOSBox:
Erläuterungen und Informationen zur der oben genannten Anpassung in der es_systems.cfg:
<system> <name>pc</name> <fullname>PC (x86)</fullname> <path>~\.emulationstation\batch\pc</path> <extension>.game</extension> <command>%HOME%\.emulationstation\systems\dosbox\dosbox.exe -exit -fullscreen -c "mount c: '%HOME%\.emulationstation\roms\pc\%BASENAME%'" -c "c:" -c "start.bat" </command> <platform>pc</platform> <theme>pc</theme> </system>
Das Verzeichnis ~\.emulationstation\batch\pc und die extension .game werden verwendet, um die Spiele in EmulationStation im Menü darzustellen. Bei Auswahl wird der Befehl im command-Tag ausgeführt:
%HOME%\.emulationstation\systems\dosbox\dosbox.exe -exit -fullscreen -c "mount c: '%HOME%\.emulationstation\roms\pc\%BASENAME%'" -c "c:" -c "start.bat"
Betrachten wir die einzelnen Elemente zum Aufruf haben wir:
- %HOME%\.emulationstation\systems\dosbox\dosbox.exe
dosbox.exe wird gestart - -exit
nach beenden soll dosbox geschlossen werden - -fullscreen
die Darstellung erfolgt sofort im Vollbildmodus - -c „mount c: ‚%HOME%\.emulationstation\roms\pc\%BASENAME%'“
in DosBox wird der Befehl mount c: ‚%HOME%\.emulationstation\roms\pc\%BASENAME%‘ ausgeführt, wobei %BASENAME% als Wert den Spielname, wie im Menü von EmulationStation angezeigt, übernimmt. - -c „c:“
in DosBox wird der Befehl zum Wechsel zu Laufwerk c: ausgeführt - -c „start.bat“
in DosBox wird der Befehl zum Starten der start.bat ausgeführt
Erläuterungen und Informationen zur Erweiterung der launch_portable.bat:
@echo off set HOME=%~dp0 set HOME=%HOME:~0,-1% :create_pc_gamelist_files set PCGAMESDIR=%HOME%\.emulationstation\roms\pc set PCGAMESBATCHDIR=%HOME%\.emulationstation\batch\pc REM for /f "tokens=*" %%D in ('dir /B "%PCGAMESDIR%"') do del "%PCGAMESBATCHDIR%\%%D.game" for /f "tokens=*" %%D in ('dir /B /A:D "%PCGAMESDIR%"') do ( echo "%%D" in pc game dir found echo create "%PCGAMESBATCHDIR%\%%D.game" to start echo. echo > "%PCGAMESBATCHDIR%\%%D.game" ) cls emulationstation.exe
Mit:
set HOME=%HOME:~0,-1%
wird das unnötige doppelte \ entfernt, welches ich bei meinen Tests immer gesehen habe. Da ich Probleme unter DosBox befürchtet habe, habe ich dies hierdurch korrigiert.
Mit:
for /f "tokens=*" %%D in ('dir /B /A:D "%PCGAMESDIR%"') do ( echo "%%D" in pc game dir found echo create "%PCGAMESBATCHDIR%\%%D.game" to start echo. echo. > "%PCGAMESBATCHDIR%\%%D.game" )
durchsuche ich das Verzeichnis, definiert durch:
set PCGAMESDIR=%HOME%\.emulationstation\roms\pc
auf Unterverzeichnisse und erstelle pro Unterverzeichnis eine Datei mit Verzeichnisname als Name plus .game als Dateiendung im definierten Verzeichnis:
set PCGAMESBATCHDIR=%HOME%\.emulationstation\batch\pc
Dadurch wird immer der vorliegende Ordnername vom jeweiligen Spiel der Name in Emulation Station.
Die Zeile:
REM for /f "tokens=*" %%D in ('dir /B "%PCGAMESDIR%"') do del "%PCGAMESBATCHDIR%\%%D.game"
wird durch das am Anfang stehende REM nicht ausgeführt. Wer möchte, dass sein hinterlegtes Verzeichnis von .game-Dateien immer bereinigt wird, damit gelöschte DOS-Spiele auch in EmulationStation nicht mehr zu sehen sind, kann auf eigene Gefahr das REM entfernen!!!
ScummVM direkt als System in EmulationStation
Bei ScummVM gibt es noch die Besonderheit, dass zum Spielaufruf, neben Verzeichnis auch die game id benötigt wird. Mittels der game id erkennt ScummVM die zu ladenden Dateien. Um die game id zu ermitteln kann scummvm.exe mit der Option -z gestartet werden:
G:\emulationstation\.emulationstation\systems\scummvm>scummvm.exe -z
Als Ergebnis bekommen wir ein recht große Liste:
Da jeder nur einmalig die Ordnernamen vergibt, habe ich zur Vereinfachung eine Datei createscummvmbatchfiles.bat geschrieben, die bei Übergabe eines Namen/Ordnernamen die game id zurückliefert. Diese Datei wurde anschließend im Verzeichnis:
emulationstation\.emulationstation\batch
gespeichert.
Inhalt von createscummvmbatchfiles.bat
@echo off SETLOCAL ENABLEDELAYEDEXPANSION set args=%* set args=!args:"=! set args=!args: = ! set args=!args: Talkie=! set gameid=none set SCUMMVMEXE=%HOME%\.emulationstation\systems\scummvm\scummvm.exe for /f "tokens=*" %%S in ('"%SCUMMVMEXE%" -z ') do ( set line=%%S set line=!line::=! set line=!line:/= ! REM echo !line! set test=!line:%args%=! if NOT "!line!" == "!test!" ( for /f "tokens=1*delims= " %%i in ("!line!") do ( set gameid=%%i goto output ) ) ) :output echo !gameid!
Zusätzlich erzeuge ich ein Verzeichnis scummvm unterhalb:
emulationstation\.emulationstation\batch
in welchem später die generierten Startdateien für ScummVM plus Speicherort ScummVM-Spiele und ScummVM-Savegames (Standard wäre innerhalb des Benutzerprofils und somit nicht mehr „portable“) durch folgende Erweiterung der launch_portable.bat gespeichert werden.
:create_scummvm_game_bat SETLOCAL ENABLEDELAYEDEXPANSION set SCUMMVMGAMESDIR=%HOME%\.emulationstation\roms\scummvm set SCUMMVMBATCHDIR=%HOME%\.emulationstation\batch\scummvm set SCUMMVMEXE=%HOME%\.emulationstation\systems\scummvm\scummvm.exe set SCUMMBATCHCREATE=%HOME%\.emulationstation\batch\createscummvmbatchfiles.bat REM for /f "tokens=*" %%S in ('dir /B "%SCUMMVMGAMESDIR%"') do del "%SCUMMVMBATCHDIR%\%%S.bat" for /f "tokens=*" %%S in ('dir /B /A:D "%SCUMMVMGAMESDIR%"') do ( set game=%%S set gameid=none for /f "tokens=*" %%G in ('"%SCUMMBATCHCREATE%" !game!') do set gameid=%%G if not "!gameid!"=="none" ( echo "%%S" with ScummVM game id !gameid! found echo create "%SCUMMVMBATCHDIR%\%%S.bat" to start echo. echo %SCUMMVMEXE% --savepath="%SCUMMVMGAMESDIR%\%%S" -f -p "%SCUMMVMGAMESDIR%\%%S" !gameid! > "%SCUMMVMBATCHDIR%\%%S.bat" ) )
Zur Vereinfachung hier das fertige Ergebnis – launch_portable.bat:
@echo off set HOME=%~dp0 set HOME=%HOME:~0,-1% :create_pc_gamelist_files set PCGAMESDIR=%HOME%\.emulationstation\roms\pc set PCGAMESBATCHDIR=%HOME%\.emulationstation\batch\pc REM for /f "tokens=*" %%D in ('dir /B "%PCGAMESDIR%"') do del "%PCGAMESBATCHDIR%\%%D.game" for /f "tokens=*" %%D in ('dir /B /A:D "%PCGAMESDIR%"') do ( echo "%%D" in pc game dir found echo create "%PCGAMESBATCHDIR%\%%D.game" to start echo. echo. > "%PCGAMESBATCHDIR%\%%D.game" ) :create_scummvm_game_bat SETLOCAL ENABLEDELAYEDEXPANSION set SCUMMVMGAMESDIR=%HOME%\.emulationstation\roms\scummvm set SCUMMVMBATCHDIR=%HOME%\.emulationstation\batch\scummvm set SCUMMVMEXE=%HOME%\.emulationstation\systems\scummvm\scummvm.exe set SCUMMBATCHCREATE=%HOME%\.emulationstation\batch\createscummvmbatchfiles.bat REM for /f "tokens=*" %%S in ('dir /B "%SCUMMVMGAMESDIR%"') do del "%SCUMMVMBATCHDIR%\%%S.bat" for /f "tokens=*" %%S in ('dir /B /A:D "%SCUMMVMGAMESDIR%"') do ( set game=%%S set gameid=none for /f "tokens=*" %%G in ('"%SCUMMBATCHCREATE%" !game!') do set gameid=%%G if not "!gameid!"=="none" ( echo "%%S" with ScummVM game id !gameid! found echo create "%SCUMMVMBATCHDIR%\%%S.bat" to start echo. echo %SCUMMVMEXE% --savepath="%SCUMMVMGAMESDIR%\%%S" -f -p "%SCUMMVMGAMESDIR%\%%S" !gameid! > "%SCUMMVMBATCHDIR%\%%S.bat" ) ) cls emulationstation.exe
Entsprechende Spieleordner von ScummVM Spielen speichern wir unter:
emulationstation\.emulationstation\roms\pc
Anschließend wird die es_systems.cfg für ScummVM angepasst zu:
<system> <name>scummvm</name> <fullname>ScummVM</fullname> <path>~\.emulationstation\batch\scummvm</path> <extension>.bat .BAT</extension> <command>"%ROM_RAW%"</command> <platform>pc</platform> <theme>scummvm</theme> </system>
Bei meinem anschließenden Aufruf von launch_portable.bat wurden im Verzeichnis
emulationstation\.emulationstation\batch\scummvm
mehrere bat-Dateien erzeugt, deren Inhalt jeweils wie folgt (abhängig vom Spiel) ist:
G:\emulationstation\.emulationstation\systems\scummvm\scummvm.exe --savepath="G:\emulationstation\.emulationstation\roms\scummvm\Indiana Jones and the Fate of Atlantis Talkie" -f -p "G:\emulationstation\.emulationstation\roms\scummvm\Indiana Jones and the Fate of Atlantis Talkie" atlantis
In Emulation Station sehen wir anschließend:
Nach Aufruf von, zum Beispiel Monkey Island 2, wird ScummVM mit dem Spiel erfolgreich geöffnet. Beispiel (Menü-Aufruf über F5-Taste):
Erläuterungen und Informationen zur der oben genannten Anpassung in der es_systems.cfg:
<system> <name>scummvm</name> <fullname>ScummVM</fullname> <path>~\.emulationstation\batch\scummvm</path> <extension>.bat .BAT</extension> <command>"%ROM_RAW%"</command> <platform>pc</platform> <theme>scummvm</theme> </system>
Das Verzeichnis ~\.emulationstation\batch\scummvm und die extension .bat werden verwendet, um die Spiele in EmulationStation im Menü darzustellen. Bei Auswahl wird durch Verwendung „%ROM_RAW%“ die jeweilige bat-Datei im Verzeichnis ~\.emulationstation\batch\scummvm gestartet, die den gleichen Namen wie im Menü von Emulation Station hat.
Erläuterungen und Informationen zur Erweiterung der launch_portable.bat:
SETLOCAL ENABLEDELAYEDEXPANSION set SCUMMVMGAMESDIR=%HOME%\.emulationstation\roms\scummvm set SCUMMVMBATCHDIR=%HOME%\.emulationstation\batch\scummvm set SCUMMVMEXE=%HOME%\.emulationstation\systems\scummvm\scummvm.exe set SCUMMBATCHCREATE=%HOME%\.emulationstation\batch\createscummvmbatchfiles.bat REM for /f "tokens=*" %%S in ('dir /B "%SCUMMVMGAMESDIR%"') do del "%SCUMMVMBATCHDIR%\%%S.bat" for /f "tokens=*" %%S in ('dir /B /A:D "%SCUMMVMGAMESDIR%"') do ( set game=%%S set gameid=none for /f "tokens=*" %%G in ('"%SCUMMBATCHCREATE%" !game!') do set gameid=%%G if not "!gameid!"=="none" ( echo "%%S" with ScummVM game id !gameid! found echo create "%SCUMMVMBATCHDIR%\%%S.bat" to start echo. echo %SCUMMVMEXE% --savepath="%SCUMMVMGAMESDIR%\%%S" -f -p "%SCUMMVMGAMESDIR%\%%S" !gameid! > "%SCUMMVMBATCHDIR%\%%S.bat" ) )
Mit:
for /f "tokens=*" %%S in ('dir /B /A:D "%SCUMMVMGAMESDIR%"') do ( set game=%%S set gameid=none for /f "tokens=*" %%G in ('"%SCUMMBATCHCREATE%" !game!') do set gameid=%%G ... )
durchläuft das Skript alle Verzeichnisse unterhalb:
%HOME%\.emulationstation\roms\scummvm
und prüft den jeweiligen Namen über:
%SCUMMBATCHCREATE%" !game!
ob eine game id vorhanden ist. Das Ergebnis wird in gameid gespeichert. Anschließend wird durch:
if not "!gameid!"=="none" ( echo "%%S" with ScummVM game id !gameid! found echo create "%SCUMMVMBATCHDIR%\%%S.bat" to start echo. echo %SCUMMVMEXE% --savepath="%SCUMMVMGAMESDIR%\%%S" -f -p "%SCUMMVMGAMESDIR%\%%S" !gameid! > "%SCUMMVMBATCHDIR%\%%S.bat" )
geprüft, ob gameid abweichend none ist. In diesem Fall wird eine bat-Datei gleich Ordnername vom Spieleverzeichnis im Batch-Verzeichnis gespeichert:
"%SCUMMVMBATCHDIR%\%%S.bat"
Der Inhalt ist hierbei:
%SCUMMVMEXE% --savepath="%SCUMMVMGAMESDIR%\%%S" -f -p "%SCUMMVMGAMESDIR%\%%S" !gameid!
- %SCUMMVMEXE% entspricht dem Aufruf innerhalb der Batch-Datei der scummvm.exe-Datei
- –savepath=“%SCUMMVMGAMESDIR%\%%S“ übergibt scummvm.exe die Info, dass die Spielstände im jeweiligen Spiel-Verzeichnis gespeichert werden sollen
- -f legt Vollbild fest
- -p „%SCUMMVMGAMESDIR%\%%S“ übergibt scummvm.exe den Pfad wo sich das Spiel befindet
- !gameid! ist für scummvm.exe notwendig, damit die korrekte Datei zum Ausführen gestartet wird – in dieser Variante wird nirgends eine bat-, cmd- oder exe-Datei zum Start der Spiele übergeben.
Die Zeile:
REM for /f "tokens=*" %%S in ('dir /B "%SCUMMVMGAMESDIR%"') do del "%SCUMMVMBATCHDIR%\%%S.bat"
wird durch das am Anfang stehende REM nicht ausgeführt. Wer möchte, dass sein hinterlegtes Verzeichnis von .bat-Dateien immer bereinigt wird, damit gelöschte ScummVM-Spiele auch in EmulationStation nicht mehr zu sehen sind, kann auf eigene Gefahr das REM entfernen!!!
Erläuterungen und Informationen zur Erweiterung der createscummvmbatchfiles.bat:
@echo off SETLOCAL ENABLEDELAYEDEXPANSION set args=%* set args=!args:"=! set args=!args: = ! set args=!args: Talkie=! set gameid=none set SCUMMVMEXE=%HOME%\.emulationstation\systems\scummvm\scummvm.exe for /f "tokens=*" %%S in ('"%SCUMMVMEXE%" -z ') do ( set line=%%S set line=!line::=! set line=!line:/= ! REM echo !line! set test=!line:%args%=! if NOT "!line!" == "!test!" ( for /f "tokens=1*delims= " %%i in ("!line!") do ( set gameid=%%i goto output ) ) ) :output echo !gameid!
Durch:
set args=%* set args=!args:"=! set args=!args: = ! set args=!args: Talkie=!
wird der Text zum zunächst übergebene Verzeichnis bereinigt, damit keine Anführungszeichen, doppelte Leerzeichen und ein ungewünschtes Wort “ Talkie“ nicht zum Vergleich verwendet werden. Bei Bedarf unterhalb:
set args=!args: Talkie=!
eine weitere Zeile wie:
set args=!args: lösche mich=!
einfügen.
Mit:
set SCUMMVMEXE=%HOME%\.emulationstation\systems\scummvm\scummvm.exe for /f "tokens=*" %%S in ('"%SCUMMVMEXE%" -z ') do ( set line=%%S set line=!line::=! set line=!line:/= ! ... )
werden alle Zeilen der Ausgabe von scummvm.exe -z durchlaufen und Doppelzeichen gelöscht und Schrägstrich mit Leerzeichen ersetzt:
- Broken Sword II: The Smoking Mirror (PlayStation/Demo) wird zu Broken Sword II The Smoking Mirror (PlayStation Demo)
Danach wird mittels:
set test=!line:%args%=! if NOT "!line!" == "!test!"
geprüft, ob der übergebene Name in der jeweiligen Ausgabe von scummvm.exe -z enthalten ist. In diesem Fall wird die Zeile der Ausgabe von Scummvm.exe um den Teilstring gekürzt und in test zwischengespeichert. Durch die Kürzung ist der anschließenden Vergleich nicht mehr identisch zur Ausgabe von scummvm.exe -z der Zeile.
Anschließend wird durch:
for /f "tokens=1*delims= " %%i in ("!line!") do ( set gameid=%%i goto output ) ... :output echo !gameid!
der Teil bis zum ersten Leerzeichen der aktuellen Zeile zwischengespeichert. Die Schleife wird unterbrochen und es wird nur die erste gefundene game id ausgegeben. Durch diese Abfolge wird bei Übergabe von:
- Monkey Island – monkey ausgegeben
- Monkey Island 2 – monkey2 ausgegeben
da die Ausgabe der Reihenfolge:
- The Secret of Monkey Island
- Monkey Island 2: LeChuck’s Revenge
entspricht.
Quelle für Spiele / Demos und Rechtliches:
Wer auf der Suche nach alten Klassikern ist, der muss beachten, dass die Spiele, auch wenn sie teilweise über 20 Jahre schon alt sind, nicht unbedingt frei und kostenlos verfügbar sind.
Schaut euch hierzu zum Beispiel:
- https://de.wikipedia.org/wiki/Abandonware
- https://de.wikipedia.org/wiki/Liste_kommerzieller_Computerspiele_mit_ver%C3%B6ffentlichtem_Quelltext
- https://en.wikipedia.org/wiki/List_of_commercial_video_games_released_as_freeware
an.
Teilweise ist es auch jetzt noch möglich alte Spieleklassiker zu kaufen. Zum Beispiel über http://www.gog.com (https://www.gog.com/game/kings_quest_4_5_6) oder, wenn auch sehr selten, als Humble Bundle. Teilweise haben Spielehersteller einige der alten Spiele frei zum Download freigegeben.
Ich persönlich bin froh, dass ich meine DOS-Lieblinge über die Jahre gut eingelagert habe. Die gute Spiele-Zeit war jedoch bei mir KC85/3 und C64 mit Boulderdash, Oil Imperium, Prince of Persia und Turrican. Das war vor 27 Jahren.
Neueste Kommentare