2 puntos por GN⁺ 2024-06-09 | Aún no hay comentarios. | Compartir por WhatsApp

Detección de emulador de PS2: cuando 1*X no es igual a X

El problema de las operaciones de punto flotante en PS2

  • Al usar instrucciones de multiplicación (MUL, MULi, etc.) en la VU (unidad vectorial) de la PS2, el resultado de multiplicar por 1 puede no ser igual al valor original.
  • Esto también se menciona en el manual para desarrolladores de la VU, donde se indica que puede ocurrir un error de cálculo de 1 bit.
  • No se conoce la razón exacta, pero quien implemente el punto flotante por software de la PS2 debe resolverlo.

Detección de emuladores usando este problema

  • El primer paso es encontrar el número que provoca este problema.
  • Entre los primeros 250 números que aumentan en pasos de 0.5, 129.5 es el valor que provoca este problema.
  • El siguiente código muestra cómo verificar si el resultado de multiplicar 129.5 por 1 es distinto del valor original.
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"     // establecer 129.5f en VF1
    "VADDw $vf2, $vf0, $vf0w\n" // VF2 = vf0[w] = 1
    "VMUL $vf1, $vf2, $vf1\n"  // VF1 = 1 * 129.5f
    "QMFC2 %0, $vf1\n"     // cargar el resultado en EE
    : "=r"(out[0])
    : "r"(in[0]));
  return in[0] != out[0];
}
  • Este código detecta si un emulador no maneja correctamente este problema al multiplicar 1 por 129.5 y revisar el resultado.
  • Actualmente, ningún emulador reproduce este comportamiento con exactitud.

La opinión de GN⁺

  • Límites de los emuladores de PS2: Este artículo muestra un caso específico en el que los emuladores de PS2 no se comportan igual que el hardware real. Puede ser información importante para quienes desarrollan emuladores.
  • La complejidad de las operaciones de punto flotante: Las operaciones de punto flotante pueden implementarse de forma distinta según el hardware. Este es un factor importante que los desarrolladores de software deben considerar al probar código en distintas plataformas.
  • Uso como herramienta de depuración: Este tipo de detección puede usarse como una herramienta de depuración para probar la precisión de un emulador. Eso puede contribuir a mejorar su calidad.
  • Comparación con otros emuladores: El artículo menciona que ninguno de varios emuladores (PCSX2, Play!, DobieStation, hps2x64) logra emular correctamente este problema. Esto puede ser una referencia importante al elegir un emulador.
  • Posibles mejoras a futuro: Si continúan la investigación y el desarrollo para resolver este tipo de problemas, podría haber emuladores más precisos en el futuro. Eso podría tener un impacto positivo en la preservación de juegos y la accesibilidad.

Aún no hay comentarios.

Aún no hay comentarios.