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:
- Relinker (
core/relinker): converte o executável e seus módulos para o formato nativo (ELF no Linux, PE no Windows). - Bibliotecas de sistema (
core/libs/prx): implementações das bibliotecas do PS5 (gráficos, áudio, controle, arquivos, rede etc.) em forma de bibliotecas dinâmicas.prx. - Recompilador de shaders (
core/shader/recompiler): traduz os shaders da GPU do PS5 (RDNA) para SPIR-V, usado pelo Vulkan.
Projeto de código aberto, licença GPL v2. Repositório: github.com/alequizao/AnyPS5.
Como funciona
- O relinker lê as importações do jogo (identificadas por NID, o hash do nome de cada função do console).
- Verifica chamadas de sistema (syscalls), pode filtrar importações não usadas e monta a seção dinâmica no padrão SysV.
- Converte os módulos que vêm junto com o jogo e grava tudo no formato nativo.
- Ao rodar, o carregador do próprio sistema operacional liga cada importação, pelo NID, às bibliotecas
.prxdo AnyPS5. - 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
- CPU x86-64, Git, CMake 3.22.1 ou mais novo, Ninja e compilador C++20.
- Linux: GCC, G++, binutils e, para o SDL, os pacotes
libx11-develibxext-dev(Debian/Ubuntu). - Windows: somente MinGW-w64 GCC 15.2.0 (WinLibs
x86_64-ucrt-posix-seh) é suportado. - GPU com Vulkan 1.1 (filas de gráficos e compute + apresentação na janela).
- O FFmpeg é baixado automaticamente durante a configuração, a menos que você defina
FFMPEG_PREBUILT_DIR. - Um jogo/executável de PS5 (ELF) obtido legalmente.
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
| Flag | Padrão | Efeito |
|---|---|---|
-DBUILD_TESTING=ON | OFF | Compila e registra os testes |
-DANYPS5_ENABLE_SPIRV_TOOLS=ON | OFF | Validação e otimização de SPIR-V |
-DAPS5_ENABLE_TIMING_LOG=ON | OFF | Log de tempo por quadro |
-DAPS5_AGC_CREATE_LOG=OFF | ON | Desliga o log de criação de shaders |
-DFFMPEG_PREBUILT_DIR=<pasta> | vazio | Usa 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 é:
- o executável do jogo como ELF "limpo" (descriptografado, não o
.self/eboot.binoriginal assinado); - os módulos do próprio jogo (ELF) na pasta
sce_module/,sce_modules/ouprx/, ao lado do executável; - os recursos do jogo (texturas, áudio, dados), que vão em
app0/.
Como obter de forma legal
- Ter o jogo comprado por você (disco ou digital) e extrair os arquivos do seu próprio console. Esse processo depende de um console com acesso liberado e de ferramentas de dump; as regras variam por país, então confira a lei local.
- Usar homebrew ou jogos de desenvolvedores independentes que liberem o build gratuitamente.
- Nunca use os
.prxoriginais do console na pastalibs/: ali só entram as bibliotecas compiladas do AnyPS5.
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ção | O que faz |
|---|---|
--windows | Gera executável Windows (PE) |
--windows-diagnostics | Inclui diagnóstico de dependências na partida (exige --windows) |
--windows-gui | Usa subsistema GUI em vez de console (exige --windows) |
--to-intel | Converte instruções exclusivas de AMD no executável e nos módulos; instrução sem conversão = erro |
unused-filter=0|1|2 | Filtro 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 |
--registry | Grava <saida>.registry.json ao lado do executável |
--rpath <caminho> | Pasta das bibliotecas de sistema (padrão $ORIGIN/libs; use aspas simples no Bash) |
--autorun | Roda a saída após converter, mostra o código de saída e espera Enter |
--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:
| Jogo | ID | Windows | Linux | GTX 1050 Ti / i5-7500 | Intel HD 620 / i5-7200 |
|---|---|---|---|---|---|
| Dreaming Sarah | PPSA02929 | Jogável | ? | 60 FPS | 36 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).
Aviso legal
O projeto é voltado a interoperabilidade, pesquisa, preservação e compatibilidade. Não distribui nem exige software protegido, firmware, chaves criptográficas ou bibliotecas proprietárias. Cada usuário é responsável por usar apenas binários obtidos e utilizados conforme a lei e as licenças aplicáveis.
Histórico de atualizações
Carregando…
| Data | Commit | Alteração | Autor |
|---|
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.