Vorwort

Hi, ich möchte an dieser Stelle mal meine Erfahrungen beim Einstellen von GroovyMame teilen. Vieles der Informationen, die im Folgenden zu lesen sind, findet ihr auch in anderen Tutorials von mir. Ich möchte aber einfach mal alles zusammenfassen, um ein umfangreiches Gesamtbild zu vermitteln. Es wird auch Erklärungen zu den einzelnen Parametern geben. Ich gehe aber nur auf die Wichtigsten ein, wie frame_delay, video und monitor.

Ich setzte voraus, dass ihr ein lauffähiges System mit 15kHz Ausgabe habt. D.h. der CRT Emudriver ist installiert, VMMaker lief sauber durch und ihr seht ein Bild auf eurem CRT. Darüber hinaus setze ich Windows 7, 8.1 oder 10 in 64-Bit voraus.

GroovyMame installieren

Zunächst benötigt ihr GroovyMame. Die Version während des Verfassens dieses Artikels ist 0.209. Hinweis: Von dem Benutzen der Version 0.208 wird dringend abgeraten!!! Es gibt hier ein Performance Problem mit dem frame_delay Feature. Also entweder 0.207 oder 0.209 benutzen.

  1. Ladet euch bei
    http://forum.arcadecontrols.com/index.php/topic,151459.0.html die Version 209 herunter. Ihr landet in einem Google Drive. Die Datei groovymame64_0209.017n_win-7-8-10.7z herunterladen.
  2. Nach erfolgreichen Download entpackt ihr den kompletten Ordnerinhalt nach C:\MAME (die Ordnerstruktur ab artwork, bgfx, ctrlr, etc) GroovyMame wird als komplettes Paket ausgeliefert. Ihr benötigt also nicht mehr die Vanilla Version von mamedev.org als Grundinstallation
  3. Als nächsten sehr wichtigen Schritt ladet euch die modifizierte GroovyMame Anwendung vom User haynor666. Diese findet ihr unter
    http://forum.arcadecontrols.com/index.php/topic,154799.0.html Die Exe Datei auch ins Verzeichnis C:\Mame entpacken.
  4. Benennt mame64.exe in z.B. mame64.exe.bak um. Danach noch die modifizierte Version in mame64.exe umbenennen. Zur Info. Diese Version bringt den NoNag Patch mit. Ergo, ihr könnt die Game Infos beim Laden der Roms komplett überspringen. Darüber hinaus noch viele weitere Fixes. Könnt ihr aber im oben genannten Link nachlesen,
  5. Jetzt habt ihr erstmal den Grundstein für eine saubere GroovyMame installation gesorgt.

Die mame.ini einrichten

In den neueren Builds von GroovyMame wird immer eine saubere mame.ini mitgeliefert. Den Umweg über die Eingabaufforderung, um eine INI Datei zu erstellen, muss man nicht mehr gehen.

Öffnet also mit einem Editor eurer Wahl (Ich empfehle Notepad++) die mame.ini. Hier gibt es tonnenweise Parameter, die eingestellt werden können. Die wichtigsten Einstellungen sollen an dieser Stelle mal erklärt werden. Ich beginne oben in der INI Datei und arbeite mich dann herunter.
(GM = GroovyMame)

Parameterdefault WertEmpfohlener WertWichtigkeitErklärung
rompathromsroms;<euer individueller Pfad>WichtigDer Pfad zu euren Roms, CHD, etc. Es können mehrere Pfade mit einem Semikolon getrennt eingefügt werden
sleep10WichtigBei aktivierten Sleep wird die CPU Leistung auch auf andere Programme verteilt. Sollte unbedingt ausgeschaltet werden, damit GM die komplette Leistung bekommt
pause_brightness0.651OptionalDunkelt das Bild bei aktivierter Pause ab. Wenn man mal ein Standbild machen möchte mit dem Smartphone ist das Bild zu dunkel
mouse01OptionalBei aktivierter Maus, können Lightgun Games einfacher gespielt werden. Optional
cheat01OptionalCheater!!!
http://cheat.retrogames.com/mame_downloads.htm
skip_gameinfo01OptionalBei Aktivierung werden keine Infos mehr beim laden des Roms angezeigt. Ist für den Betrieb mit Frontends sehr nützlich
monitorgeneric_15arcade_15WichtigDefiniert die Grafikausgabe und die Modelines. Ich habe mit arcade_15 immer gute Erfahrungen gemacht. Falls ihr einen LCD benutzt, tragt dort bitte lcd ein
frame_delay01-9WichtigMinimiert den Input Lag. Ihr findet weiter unten eine genauere Erklärung, welche Werte einzutragen sind
videoautoautoOptionalUm die d3d9ex Implementation zu nutzen, wurde hier früher immer d3d eingetragen. Dieses ist nicht mehr nötig. Der default Wert startet d3d9ex automatisch
screenautoautoOptionalFalls ihr einen zweiten Bildschirm habt, könnt ihr die Ausgabe z.B. mit ..\\DISPLAY2 forcieren
aspectauto4:3WichtigBei einem CRT 4:3 und bei einem LCD 16:9 eintragen, damit das passende Bild dargestellt wird
resolutionauto2560×0WichtigWenn ihr die Super Resolutions im VMMaker nutzt, unbedingt 2560×0 eintragen. GM nutzt die Super Resolutions dann auch vernünftig
soundautoportaudioWichtigUnbedingt den Parameter portaudio benutzen. Dieses verringert den Sound Lag um ein vielfaches
audio_latency2.01.0Wichtigsiehe sound
pa_apinoneWindows WDM-KS WichtigDefiniert den Audiotreiber. Windows WDM-KS oder Windows WASAPI. Der Erstere ist in der Regel der schnellere. Kann aber zu stottern führen. Dann den zweiten nehmen
pa_devicenonedefault oder „device name“ WichtigDefiniert das Audioausgabegerät (Speaker, Headphones, etc) Ihr findet euere Ausgabe wenn ihr GM mit -v im CMD startet. Dann das Device mit Anführungszeichen benutzen
pa_latency00.001 oder
0.003334
WichtigDefiniert die Audioverzögerung. 0.001 für WDM-KS und 0.0333 für WASAPI. Sollte es bei beiden Werten zu stottern kommen, erhöht die Werte schrittweise

Frame Delay Werte ermitteln und speichern

Frame_delay…die eierlegende Wollmilchsau…naja nicht ganz. Eigentlich ist das Setup mit d3d9ex schon sehr responsiv. Wir sprechen hier von 1 Frame Input Lag über PCB Niveau. Aber es geht noch besser. Mittels der Option frame_delay können wir dieses eine Frame noch eliminieren.

Die Hauptaufgabe von Frame Delay ist es die Emulation so zu verzögern, dass der komplette Workflow (Input Polling, VBlank etc) innerhalb eines Frames abgearbeitet wird. Die Verzögerung kann man in GroovyMame über den Parameter frame_delay einstellen. Die Werte reichen von 0 (deaktiviert) bis 9. Diese Werte sind, erstens, Spiel abhängig und zweitens, abhängig von eurer Hardware. Da diese Option sehr CPU lastig ist, wird hohe CPU Power vorausgesetzt. Am Besten größer als 3.5GHz. Hier bietet sich zum Beispiel der Intel G3258 Prozessor an, den man problemlos auf 4GHz takten kann. Da GroovyMame nur Singlecore nutzt, hilft auch keine 4-Kern, 8-Kern oder sonstige CPU 🙂 Ein Dual Core sollte es aber mindestens schon sein, da dieser für andere Prozesse wiederum von Vorteil ist.

Um nun an passende frame_delay Werte zu erhalten, kann man diese von Hand setzen und schauen, wie die Performance pro Spiel ist. Oder diese mittels der überaus nützlichen Funktion -bench ermitteln zu lassen.

Wie funktioniert das Ganze?

  1. Startet eine Eingabeaufforderung mittels Keyboard Shortcut WIN+R und dort cmd eintragen. Ok klicken.
  2. Navigiert in das GM Verzeichnis (z.B. C:>cd Mame)
  3. Startet ein beliebiges Rom mit dem Parameter -bench. Beispiel: mame64.exe -bench 240 wb3
  4. Nun läuft GM im Benchmodus. Es wird keine Bildschirmausgabe erscheinen, da er die frame_delay Geschwindigkeit im Hintergrund misst. Dieses ist eine spezielle Anpassung für GM.
  5. Nach einiger Zeit wird das Ergebnis in der Eingabeaufforderung angezeigt. Wie wertet man dieses aus?
  6. Der Wert Frame delay/percentage zeigt an, wieviel Verzögerung bei der Emulation des einzelnen Frames auftritt. Damit es zu keinen Rucklern kommt, bevorzugen wir hier niedrige Prozentwerte

Wie funktioniert Frame Delay in der Theorie?

Wenn wir die -bench Funktion nutzen, kommt GroovyMame auf bestimmte Werte für den Frame Delay. Wie werden diese berechnet?

Also, nehmen wir als Berechnung das Rom Wonder Boy III – Monster Lair. Dieses lassen wir mit der -bench Option 240 Sekunden laufen. Auf meinem Notebook läuft das Spiel ungedrosselt mit 1031%. Ich runde auf 1000% ab und komme so auf das 10-fache an Geschwindigkeit. Dieses nehmen wir als Basis für die Berechnung. (Testsystem ist ein Intel Core i7-5600U @ 2.60GHz)

Das Spiel läuft mit 60fps. Wenn man nun 1/60 teilt, so erhalten wir 0,016667 Sekunden pro Frame. Multiplziert mit 1000 erhalten wir 16,67 Millisekunden. Da GroovyMame im Durchschnitt 10-mal schneller läuft, bedeutet dies, dass ein Frame Emulation in GroovyMame 1,667 Millisekunden benötigt. (16,67ms/10=1,667ms) Man kann sich bei der Emulation aber nicht genau auf diesen Wert verlassen. Deswegen wird an dieser Stelle noch ein Sicherheitspuffer eingebaut und verdoppelt diesen Wert. Ergo 1,667ms*2= 3,334ms werden benötigt, um in einem Frame die Emulation durchzuführen, bevor die Ausgabe stattfindet. Dieses müssen wir nun von dem eigentlichen Frame wieder abziehen, damit wir die Zeitspanne ermitteln, wann die Emulation losgehen muss. 16,67ms-3,334ms= 13,336ms. Zu guter Letzt wissen wir, dass Frame Delay in Zehntelschritten eines Frames arbeitet. Also pro Zehntel werden 1,67ms addiert.

Wie berechnet sich jetzt der optimale Frame Delay Wert?
Gegeben ist:

  • Ungedrosselte Emulation ~1000%
  • Dauer eines Frames: 16,67ms (1/60ms)
  • Dauer der eigentlichen Emulation: 3,334ms ((16,67/10)*2)
  • Spätester Zeitpunkt für den Start der Emulation: 13,336ms
  • Frame Delay: 1,67ms

Der höchstmögliche Wert für frame_delay ist also in diesem konkreten Fall:

13,336ms/1,67ms = 7,98562…. = 7

Man rundet in diesem Falle ab. Werte 8 und 9 könnten dazu führen, das emulierte Frames nicht mehr rechtzeitig beendet werden und daraus können Frameskips resultieren. Dann kommt es konkret zu Rucklern oder sogar erhöhten Input Lag.

Für die verzögerte Emulation der Frames, wird die hohe CPU Leistung benötigt. Deswegen gilt hier, hohe CPU Leistung = höherer Frame Delay Wert möglich.

Speichern der Frame Delay Werte

In der Vergangenheit war es so, dass die Frame Delay Werte pro Spiel in einer separaten INI Datei im Unterordner „ini“ gespeichert werden mussten. Dieses ist natürlich auch weiterhin möglich. Darüber hinaus gibt es nun die Möglichkeit über den Ingame Slider den Frame Delay Wert festzulegen. Dazu drückt ihr lediglich die ^ (Dach) Taste und ein Menü erscheint. Mit der Pfeil runter Taste gelangt ihr dann zu der Frame Delay Option. Mit der Pfeil rechts/links Taste können die Werte ausgewählt werden. Der Vorteil, die Performance ändert sich in Echtzeit. Zu hohe Werte können also gleich ausgeschlossen werden. Die Werte für die einzelnen Roms wird im Unterverzeichnis „cfg“ abgelegt.

So, das soll es erstmal wieder gewesen sein. Ich hoffe, ihr könnt etwas mit den Informationen anfangen. Ich trage hier nur meine Erfahrungen zusammen, bei Fehlern oder Ungereimtheiten bitte Rückmeldung.

GroovyMame richtig einstellen. (frame_delay, Portaudio, sonstige Tweaks)

Ein Kommentar zu „GroovyMame richtig einstellen. (frame_delay, Portaudio, sonstige Tweaks)

  • 11 März, 2021 um 8:57
    Permalink

    Hi, mach doch mal wieder was 🙂 Zum Beispiel erklären, warum Du die wenigen Mister Ports einem gut konfigurierten Groovy vorziehst? Das würde mich interessieren.

    Oder Groovy updaten? Ich versuche mich gerade in das Thema einzuarbeiten, also groovy im universal cab mit CRT usw. und CRTEMUDriver, SwitchRes2.01, Atom15, welche Grafikkarte usw. verwirrt mich noch ein bisschen 🙂

    Ich weiss, Anspruchsdenken…. aber vielleicht motiviert es Dich ja, zu wissen, das es einige interessiert was Du hier schreibst 🙂

Schreibe einen Kommentar