AnyPS5

Ferramenta que converte executáveis de PS5 em programas nativos para Linux e Windows, sem emulação.

O que é

O AnyPS5 pega o executável (ELF) de um jogo de PS5 e o transforma em um programa nativo do seu sistema (Linux ou Windows). Não há emulador nem processo separado: o programa convertido roda como qualquer outro e chama versões próprias, escritas pelo projeto, das bibliotecas de sistema do console.

O projeto tem duas partes principais:

Projeto de código aberto, licença GPL v2. Repositório: github.com/alequizao/AnyPS5.

Importante: o AnyPS5 não inclui jogos, firmware, chaves ou bibliotecas proprietárias. Você precisa fornecer um executável ELF "limpo" obtido de forma legal.

Como funciona

input.elf + sce_module/→relinker→app.elf / app.exe+libs/*.prx
  1. O relinker lê as importações do jogo (identificadas por NID, o hash do nome de cada função do console).
  2. Verifica chamadas de sistema (syscalls), pode filtrar importações não usadas e monta a seção dinâmica no padrão SysV.
  3. Converte os módulos que vêm junto com o jogo e grava tudo no formato nativo.
  4. Ao rodar, o carregador do próprio sistema operacional liga cada importação, pelo NID, às bibliotecas .prx do AnyPS5.
  5. Gráficos: os comandos da GPU do jogo (PM4) são interpretados, os shaders são recompilados para SPIR-V e executados via Vulkan (com cache em memória e em disco).

Regra do projeto: o que não for suportado falha explicitamente com std::runtime_error (a mensagem vai para o stderr e o processo encerra), em vez de fingir que funciona.

Requisitos

Compilar o projeto

git clone --recursive https://github.com/alequizao/AnyPS5
cd AnyPS5
git submodule update --init --recursive

cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release \
      -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++
cmake --build build --parallel
cmake --build build --target libs --parallel

O segundo --build (alvo libs) é obrigatório: as bibliotecas ficam fora do build padrão e só aparecem em build/core/libs/libs/*.prx com esse passo. Depois de mexer em qualquer biblioteca, rode-o de novo, senão o jogo usa os binários antigos.

Opções do CMake

FlagPadrãoEfeito
-DBUILD_TESTING=ONOFFCompila e registra os testes
-DANYPS5_ENABLE_SPIRV_TOOLS=ONOFFValidação e otimização de SPIR-V
-DAPS5_ENABLE_TIMING_LOG=ONOFFLog de tempo por quadro
-DAPS5_AGC_CREATE_LOG=OFFONDesliga o log de criação de shaders
-DFFMPEG_PREBUILT_DIR=<pasta>vazioUsa FFmpeg já baixado

Para rodar os testes: cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=ON, compilar e então ctest --test-dir build --output-on-failure.

Onde conseguir os jogos (formato necessário)

O AnyPS5 não baixa nem distribui jogos, e esta página também não indica sites de download: jogos de PS5 são software protegido por direitos autorais. O que você precisa fornecer é:

Como obter de forma legal

Para saber quais títulos já foram testados, veja a seção Compatibilidade e a lista oficial. Dúvidas sobre o formato exato podem ser levadas ao repositório no GitHub.

Como usar (converter e rodar um jogo)

1. Organize o jogo

Coloque o ELF limpo e a pasta de módulos ao lado dele (sce_module/, sce_modules/ ou prx/; prx/ pode coexistir com uma das outras duas, mas ter sce_module e sce_modules juntas, ou nenhuma das três, dá erro):

source/
    input.elf
    sce_module/
        <módulos ELF do jogo>

2. Converta

# Linux
relinker source/input.elf app.elf

# Windows (gera .exe)
relinker --windows source/input.elf app.exe

# CPU Intel (converte instruções exclusivas de AMD)
relinker --to-intel source/input.elf app.elf

O formato de saída é Linux por padrão, mesmo que o nome termine em .exe; só --windows gera PE.

3. Monte a pasta de execução

Copie as bibliotecas compiladas (build/core/libs/libs/*.prx) para libs/ ao lado do executável gerado e coloque os recursos do jogo em app0/. O relinker imprime, nas linhas Guest module:, o caminho exato dos módulos convertidos.

4. Execute

# Linux
chmod +x app.elf
./app.elf

# Windows (PowerShell)
.\app.exe

Atalho: a opção --autorun converte e já executa o resultado.

Códigos de saída do relinker: 0 sucesso · 1 argumentos inválidos · 2 falha na conversão (erro no stderr). Sem argumentos ele só mostra a sintaxe de uso (não existe --help).

Opções do relinker

Todas vêm desligadas por padrão.

OpçãoO que faz
--windowsGera executável Windows (PE)
--windows-diagnosticsInclui diagnóstico de dependências na partida (exige --windows)
--windows-guiUsa subsistema GUI em vez de console (exige --windows)
--to-intelConverte instruções exclusivas de AMD no executável e nos módulos; instrução sem conversão = erro
unused-filter=0|1|2Filtro de importações não usadas (escreva sem --, só uma vez). 0 = mantém tudo; 1 = filtra as não-PLT; 2 = análise estrita e compacta a PLT
--registryGrava <saida>.registry.json ao lado do executável
--rpath <caminho>Pasta das bibliotecas de sistema (padrão $ORIGIN/libs; use aspas simples no Bash)
--autorunRoda a saída após converter, mostra o código de saída e espera Enter
As opções --skip-sce-module, --exclude-sce-module, --skip-syscall-check e --lazy-binding estão obsoletas e servem só para depuração; com elas o jogo fica extremamente instável.

Estrutura de pastas da saída

app.elf (Linux) ou app.exe (Windows)
libs/
    *.prx                 ← bibliotecas do AnyPS5 (não os .prx originais do PS5)
app0/
    <recursos do jogo>
    sce_module/
        <módulos convertidos>

Nunca coloque .prx originais do PS5 em libs/: no Windows isso causa o erro 193 (não é um aplicativo Win32 válido).

Windows e memória: a memória direta do jogo (até 13824 MiB) é reservada por inteiro na alocação. O limite de commit do sistema (RAM + arquivo de paginação) precisa cobrir isso; se faltar, aumente o arquivo de paginação ou feche outros programas.

Fontes do sistema e escolha da GPU

Fontes

Jogos que abrem as fontes do console precisam de arquivos em anyps5-fonts/ ao lado do executável (ou na pasta indicada por ANYPS5_SYSTEM_FONTS). Arquivos extraídos do console usam os próprios nomes (SST-Roman.otf etc.). Sem eles, são usadas as substitutas abertas Noto Sans (Latin, Mono, Thai e CJK), se estiverem presentes. Sem nenhuma das duas, o jogo fica sem texto nessas fontes.

GPU

O jogo roda na primeira GPU Vulkan 1.1 adequada, preferindo a dedicada à integrada. Para escolher outra, defina ANYPS5_GPU com parte do nome do dispositivo (sem diferenciar maiúsculas). Os nomes aparecem na partida, nas linhas Physical device candidate.

ANYPS5_GPU=nvidia ./app.elf

Variável de depuração

APS5_PIPELINE_STATS=1 mostra estatísticas do driver para cada pipeline criado (exige VK_KHR_pipeline_executable_properties).

Controles

Controles reconhecidos pelo SDL (Xbox, PlayStation etc.) funcionam direto, com analógicos e gatilhos, e podem ser conectados com o jogo aberto. Em controle Xbox: A/B/X/Y = Cross/Circle/Square/Triangle, LB/RB = L1/R1, LT/RT = L2/R2, Start = Options. No controle PlayStation, o clique do touchpad é enviado (o toque em si não).

Teclado e mouse têm mapeamento embutido. Para mudar, crie anyps5-input.ini ao lado do executável (ou aponte com ANYPS5_INPUT_CONFIG). Formato Ação = Tipo:Valor; a primeira linha de uma ação substitui o padrão e as seguintes adicionam alternativas; # e ; iniciam comentário.

Cross = KEY:F
Cross = KEY:Space
LeftStickLeft = KEY:J
LeftStickRight = KEY:L
LeftStickUp = KEY:I
LeftStickDown = KEY:K
Square = MOUSE:Left
R2 = MOUSE:Right
ToggleMouse = MOUSE:Middle

Fontes de entrada: KEY:<tecla SDL>, MOUSE:Left/Middle/Right/X1/X2, WHEEL:Up/Down.

Ações: Cross, Circle, Triangle, Square, L1, R1, L2, R2, L3, R3, Options, Up, Right, Down, Left, LeftStick(Left/Right/Up/Down), RightStick(Left/Right/Up/Down), TouchLeft, TouchRight, ToggleMouse, ToggleFullscreen.

Compatibilidade

Ainda é um projeto em desenvolvimento. Jogo testado até agora:

JogoIDWindowsLinuxGTX 1050 Ti / i5-7500Intel HD 620 / i5-7200
Dreaming SarahPPSA02929Jogável?60 FPS36 FPS

O progresso das bibliotecas e dos shaders aparece nos selos do README (percentual de funções já conhecidas pelo projeto, que cresce conforme novas são declaradas).

Histórico de atualizações

Carregando…

Mostra os últimos commits do projeto. O site é sincronizado com o GitHub de hora em hora.

Arquivos baixados aqui

O código-fonte completo está em AnyPS5/ (cópia do repositório, sem o histórico git; os submódulos de 3rdparty/ não foram baixados, então use o git clone --recursive acima para compilar). Documentos úteis: USAGE.md · INPUT_MAPPING.md · COMPATIBILITY.md · BUILD.md · ARCHITECTURE.md

Nada foi compilado nem instalado neste servidor.