2 pontos por GN⁺ 2024-06-09 | Ainda não há comentários. | Compartilhar no WhatsApp

Detecção de emulador de PS2: quando 1*X não é igual a X

O problema das operações de ponto flutuante no PS2

  • Ao usar instruções de multiplicação (MUL, MULi etc.) na VU (Vector Unit) do PS2, o resultado de multiplicar por 1 pode não ser igual ao valor original.
  • Isso também é mencionado no manual de desenvolvimento da VU, que indica que pode ocorrer um erro de operação de 1 bit.
  • O motivo exato é desconhecido, mas quem implementa ponto flutuante em software para o PS2 precisa lidar com isso.

Detecção de emulador usando esse problema

  • O primeiro passo é encontrar um número que provoque esse problema.
  • Entre os primeiros 250 números que aumentam em incrementos de 0,5, 129,5 é o número que dispara esse problema.
  • O código abaixo mostra como verificar se o resultado de multiplicar 129,5 por 1 é diferente do 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"     // 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];
}
  • Esse código detecta se o emulador não trata corretamente esse problema ao multiplicar 1 por 129,5 e verificar o resultado.
  • Atualmente, nenhum emulador consegue emular esse comportamento com precisão.

Opinião do GN⁺

  • Limites dos emuladores de PS2: este artigo mostra um caso específico em que emuladores de PS2 não se comportam da mesma forma que o hardware real. Isso pode ser uma informação importante para desenvolvedores de emuladores.
  • A complexidade das operações de ponto flutuante: operações de ponto flutuante podem ser implementadas de formas diferentes em cada hardware. Esse é um fator importante para desenvolvedores de software considerarem ao testar código em várias plataformas.
  • Uso como ferramenta de depuração: esse tipo de detecção pode ser usado como ferramenta de depuração para testar a precisão de emuladores. Isso pode contribuir para melhorar a qualidade dos emuladores.
  • Comparação com outros emuladores: o artigo menciona que nenhum entre vários emuladores (PCSX2, Play!, DobieStation, hps2x64) consegue emular esse problema corretamente. Isso pode servir como referência importante na escolha de um emulador.
  • Possibilidade de melhorias futuras: se a pesquisa e o desenvolvimento para resolver esse problema continuarem, pode ser que surjam emuladores mais precisos no futuro. Isso pode ter um impacto positivo em preservação de jogos e acessibilidade.

Ainda não há comentários.

Ainda não há comentários.