2 points par GN⁺ 2024-06-09 | Aucun commentaire pour le moment. | Partager sur WhatsApp

Détection d’émulateur PS2 : quand 1*X n’est pas égal à X

Le problème des opérations en virgule flottante sur PS2

  • Lorsqu’on utilise des instructions de multiplication (MUL, MULi, etc.) sur le VU (unité vectorielle) de la PS2, le résultat d’une multiplication par 1 peut ne pas être identique à la valeur d’origine.
  • Ce point est également mentionné dans le manuel de développement du VU, qui indique qu’une erreur de calcul d’un bit peut se produire.
  • La raison exacte est inconnue, mais toute personne qui implémente l’arithmétique en virgule flottante de la PS2 en logiciel doit résoudre ce problème.

Détection d’émulateur à l’aide de ce problème

  • La première étape consiste à trouver un nombre qui déclenche ce problème.
  • Parmi les 250 premiers nombres augmentant par pas de 0,5, c’est 129.5 qui provoque ce comportement.
  • Le code ci-dessous montre comment vérifier si le résultat de la multiplication de 129.5 par 1 diffère de la valeur d’origine.
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에 129.5f 설정
    "VADDw $vf2, $vf0, $vf0w\n" // VF2 = vf0[w] = 1
    "VMUL $vf1, $vf2, $vf1\n"  // VF1 = 1 * 129.5f
    "QMFC2 %0, $vf1\n"     // 결과를 EE로 로드
    : "=r"(out[0])
    : "r"(in[0]));
  return in[0] != out[0];
}
  • Ce code détecte si un émulateur gère mal ce problème en multipliant 1 par 129.5 puis en vérifiant le résultat.
  • À l’heure actuelle, aucun émulateur ne reproduit ce comportement avec exactitude.

L’avis de GN⁺

  • Les limites des émulateurs PS2 : cet article montre un cas précis où les émulateurs PS2 ne se comportent pas comme le matériel réel. Cela peut constituer une information importante pour les développeurs d’émulateurs.
  • La complexité de l’arithmétique en virgule flottante : les opérations en virgule flottante peuvent être implémentées différemment selon le matériel. C’est un élément important à prendre en compte lorsque des développeurs testent leur code sur différentes plateformes.
  • Utilisation comme outil de débogage : ce type de détection peut servir d’outil de débogage pour tester la précision des émulateurs. Cela peut contribuer à améliorer leur qualité.
  • Comparaison avec d’autres émulateurs : l’article mentionne qu’aucun des émulateurs testés (PCSX2, Play!, DobieStation, hps2x64) ne reproduit correctement ce problème. C’est donc un point de référence utile au moment de choisir un émulateur.
  • Possibilités d’amélioration à l’avenir : si la recherche et le développement sur ce problème se poursuivent, des émulateurs plus précis pourraient voir le jour. Cela pourrait avoir un impact positif sur la préservation des jeux et leur accessibilité.

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.