2 Punkte von GN⁺ 2024-06-09 | Noch keine Kommentare. | Auf WhatsApp teilen

PS2-Emulator-Erkennung: Wenn 1*X nicht gleich X ist

Das Problem mit den Gleitkommaberechnungen der PS2

  • Bei Verwendung von Multiplikationsbefehlen (MUL, MULi usw.) in der VU (Vector Unit) der PS2 kann das Ergebnis einer Multiplikation mit 1 vom ursprünglichen Wert abweichen.
  • Dies wird auch im VU-Entwicklerhandbuch erwähnt; es kann zu einem 1-Bit-Rechenfehler kommen.
  • Der genaue Grund ist unbekannt, aber wer Software-Gleitkomma für die PS2 implementiert, muss dieses Problem lösen.

Emulator-Erkennung mithilfe dieses Problems

  • Der erste Schritt besteht darin, eine Zahl zu finden, die dieses Problem auslöst.
  • Unter den ersten 250 Zahlen, die in 0,5er-Schritten ansteigen, ist 129.5 die Zahl, die dieses Problem verursacht.
  • Der folgende Code zeigt, wie geprüft werden kann, ob das Ergebnis der Multiplikation von 129.5 mit 1 vom ursprünglichen Wert abweicht.
int isVUMulErrorPresent() {
  float in[4] __aligned(16) = {129.5f, 0.0f, 0.0f, 0.0f};
  float out[4] __aligned(16) = {0.0f, 0.0f, 0.0f, 0.0f};
  asm __volatile__(
    "QMTC2 %1, $vf1\n"     // VF1 auf 129.5f setzen
    "VADDw $vf2, $vf0, $vf0w\n" // VF2 = vf0[w] = 1
    "VMUL $vf1, $vf2, $vf1\n"  // VF1 = 1 * 129.5f
    "QMFC2 %0, $vf1\n"     // Ergebnis in EE laden
    : "=r"(out[0])
    : "r"(in[0]));
  return in[0] != out[0];
}
  • Dieser Code erkennt durch Multiplikation von 1 mit 129.5 und anschließende Prüfung des Ergebnisses, ob ein Emulator dieses Problem nicht korrekt behandelt.
  • Derzeit emuliert kein Emulator dieses Verhalten exakt.

Meinung von GN⁺

  • Grenzen von PS2-Emulatoren: Dieser Artikel zeigt einen konkreten Fall, in dem sich PS2-Emulatoren nicht identisch zur echten Hardware verhalten. Das könnte für Emulator-Entwickler eine wichtige Information sein.
  • Die Komplexität von Gleitkommaberechnungen: Gleitkommaberechnungen können je nach Hardware unterschiedlich implementiert sein. Das ist ein wichtiger Faktor, den Softwareentwickler beim Testen von Code auf verschiedenen Plattformen berücksichtigen sollten.
  • Nutzung als Debugging-Werkzeug: Solche Erkennungsmethoden können als Debugging-Werkzeug dienen, um die Genauigkeit von Emulatoren zu testen. Das kann dazu beitragen, die Qualität von Emulatoren zu verbessern.
  • Vergleich mit anderen Emulatoren: Der Artikel erwähnt, dass mehrere Emulatoren (PCSX2, Play!, DobieStation, hps2x64) dieses Problem allesamt nicht korrekt emulieren. Das kann eine wichtige Referenz bei der Auswahl eines Emulators sein.
  • Potenzial für künftige Verbesserungen: Wenn Forschung und Entwicklung zur Lösung solcher Probleme weitergehen, könnten in Zukunft präzisere Emulatoren entstehen. Das könnte sich positiv auf Spielbewahrung und Zugänglichkeit auswirken.

Noch keine Kommentare.

Noch keine Kommentare.