Ofertas do dia no link de afiliado Amazon!

PS2Recomp | Ferramenta permite criar versões de PC de jogos de PlayStation 2 aprimoradas

PlayStation 2 / Console da Sony

O PlayStation 2 ganhou uma quantidade absurda de jogos, mas boa parte deles continua presa ao hardware original ou depende de emulação para rodar em computadores modernos. O PS2Recomp aparece como uma alternativa bem diferente para esse problema. O projeto é um recompilador estático experimental capaz de pegar o código de um jogo de PS2 e transformá-lo em código C++, criando a base para uma versão nativa de PC.

A ideia pode parecer simples quando resumida em uma frase, mas o trabalho por trás dela é aquele tipo de coisa que faz o sujeito abrir o código por cinco minutos e começar a questionar as próprias escolhas de vida. O PS2 possui uma arquitetura bastante específica, então não basta pegar o executável de um jogo e apertar um botão escrito "PC mágico". O projeto precisa analisar o arquivo ELF, identificar funções, interpretar as instruções do processador R5900 do console e gerar código equivalente em C++.

O PS2Recomp foi criado com inspiração no N64Recomp, projeto que segue uma proposta semelhante com jogos de Nintendo 64. A diferença é que aqui o alvo é o PlayStation 2, com todas as maluquices particulares da máquina da Sony. O recompilador trabalha com instruções MIPS R5900 e também possui suporte para partes específicas da arquitetura do console, incluindo instruções MMI e macros do VU0.

Na prática, o processo começa com o arquivo ELF do jogo. O projeto consegue analisar esse arquivo para encontrar funções, símbolos e outras informações necessárias para entender como o programa foi montado. Depois disso, as instruções do PS2 são convertidas para operações em C++. O resultado é um código que tenta reproduzir o funcionamento do programa original, em vez de simplesmente executar as instruções do PlayStation 2 através de um emulador tradicional.

É aí que entra uma diferença importante. O PS2Recomp não é simplesmente um emulador de PlayStation 2 com outro nome. Ele foi feito para gerar código nativo a partir do programa original, permitindo que o resultado seja compilado para uma plataforma como o PC. A intenção é chegar a algo que possa funcionar como um port nativo, embora ainda seja necessário implementar uma quantidade considerável de coisas específicas de cada jogo e do próprio hardware do console.

O projeto também possui um runtime próprio chamado ps2xRuntime. Ele cuida de coisas como memória do sistema convidado, registro de funções, chamadas do sistema e algumas partes do hardware. Existe ainda o ps2xIOP, responsável por serviços relacionados ao IOP, além de módulos para análise e recompilação. Ou seja, não é apenas um conversor de código que cospe um monte de C++ e vai embora tomar um café.

Um dos problemas é que os jogos de PS2 não foram feitos pensando em serem desmontados e recompilados décadas depois em computadores modernos. Jogos comerciais também podem ter executáveis sem símbolos úteis, o que dificulta descobrir exatamente onde estão as funções e como elas se relacionam. Por isso, o fluxo recomendado utiliza o Ghidra para analisar o ELF e exportar informações que ajudam o PS2Recomp a reconstruir melhor a estrutura do programa.

Depois da recompilação ainda existe o outro monstrinho esperando no corredor. O código do jogo pode ter sido convertido, mas o hardware do PlayStation 2 continua precisando ser substituído por implementações compatíveis. O PS2Recomp possui algumas dessas partes, incluindo funções relacionadas ao sistema, arquivos, GS e VU, mas várias áreas ainda precisam de implementação. O VU1, por exemplo, não possui suporte completo, e partes do hardware gráfico também dependem de trabalho adicional.

Isso significa que cada jogo pode acabar exigindo um trabalho considerável depois da recompilação. O projeto possui suporte para stubs, patches de instruções e substituições específicas por endereço, além de módulos de override para aplicar alterações destinadas a um jogo ou versão específica. É uma forma de resolver aquelas situações em que o jogo olha para uma função obscura do hardware do PS2 e basicamente responde "boa sorte aí, campeão".

Outro detalhe interessante é que o resultado não precisa ficar preso a um único arquivo gigante. O PS2Recomp permite gerar o código em um arquivo único ou dividir a saída em vários arquivos, além de oferecer opções para controlar o uso de memória e a quantidade de tarefas utilizadas durante a geração. Depois, esse código precisa ser compilado e ligado ao runtime do projeto.

O projeto também não entrega jogos prontos para PC. Ele é uma ferramenta para quem quer trabalhar na recompilação de jogos de PlayStation 2. Isso faz uma diferença enorme, porque transformar um jogo específico em uma versão jogável nativa exige o ELF correspondente, análise do programa, configuração e implementação das partes que ainda não são cobertas pelo runtime.

Por isso, a existência do PS2Recomp não significa que qualquer jogo de PS2 possa ser convertido para PC com dois cliques. A proposta é muito mais interessante e também muito mais trabalhosa. Quando um projeto desse tipo amadurece o suficiente para um determinado jogo, ele pode abrir caminho para versões nativas com melhorias que não dependem da emulação tradicional, mas chegar nesse ponto envolve bastante engenharia reversa e uma quantidade provavelmente criminosa de horas olhando para código.

O PS2Recomp é distribuído como código aberto sob licença GPL-3.0 e possui suporte de compilação com CMake e C++20, tendo o MSVC como principal ambiente testado. O projeto também possui componentes voltados para Android e PlayStation Vita, mostrando que a ideia não está limitada exclusivamente ao PC.

Em vez de reproduzir o hardware original por meio de emulação, a proposta é reconstruir o programa para que ele possa ser compilado e executado no hardware moderno. Se o trabalho específico de cada jogo for levado longe o bastante, isso pode resultar em ports capazes de aproveitar recursos de plataformas atuais sem depender do PlayStation 2 original e ainda abrir portas pra melhorar o jogo com recursos exclusivos.

Para quem acompanha projetos de engenharia reversa, decompilações e ports de jogos antigos, o PS2Recomp acaba sendo uma das iniciativas mais interessantes voltadas ao console da Sony. O caminho ainda envolve muita gambiarra legítima, análise de código e briga com componentes específicos da arquitetura do PS2, mas a ideia central é poderosa. Pegar um programa criado para uma máquina de 2000 e reconstruí-lo em C++ para rodar de forma nativa em hardware moderno é exatamente o tipo de coisa que parece completamente insana até alguém começar a fazer.

O adblock bloqueia links de afiliados da Amazon como os desse post, então se não estiver aparecendo, é só desativar o adblock.