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.