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.