PlayStation 5 em C#: Como Entusiastas Estão Escrevendo o Emulador SharpEmu
Escrever um emulador para um console moderno é uma tarefa que muitos associam com paredes intermináveis de C++ puro e magia de baixo nível. No entanto, os desenvolvedores do projeto SharpEmu decidiram seguir um caminho diferente e escolheram .NET. Parece ambicioso, considerando que estamos falando do PlayStation 5 — um sistema extremamente complexo com arquitetura x86-64 e uma API gráfica específica.
Por Que Um Programador Precisaria de Outro Emulador
Se você acompanha a cena, provavelmente já ouviu falar do ShadPS4. Este projeto já está fazendo grandes avanços em rodar Bloodborne e outros sucessos do PS4. Os autores do SharpEmu imediatamente colocaram um aviso: eles não estão tentando competir ou duplicar o trabalho de ninguém. Seu objetivo é exclusivamente o PS5.
SharpEmu é um projeto experimental. É construído do zero para fins educacionais e pesquisa. Os desenvolvedores simplesmente adoram mergulhar na arquitetura de sistemas e fazer engenharia reversa. Para nós, esta é uma oportunidade rara de ver como um console moderno funciona "por baixo dos panos" usando uma stack tecnológica .NET familiar.
O Que o Projeto Consegue Fazer Hoje
O projeto está em um estágio inicial. Não espere baixar um binário e rodar God of War Ragnarök em 4K. O foco da equipe está na infraestrutura e precisão da emulação, não em rodar jogos específicos.
No entanto, já existem resultados:
- Carregando arquivos
eboot.bine.elf. O emulador parseia corretamente a estrutura dos executáveis do console. - Executando instruções nativas da CPU.
- Lendo metadados: nomes de jogos, versões e outras informações de serviço.
- Trabalhando com módulos do sistema (PRX) e suporte parcial a funções do kernel.
- Suporte inicial ao cenário PlayGo e saída de vídeo.
Curiosamente, alguns jogos já chegam ao estágio de inicialização do AGC (motor de shaders gráficos) e chamam sceVideoOut. Por exemplo, no Demon's Souls Remake, o emulador já preparou shaders que os desenvolvedores planejam converter para SPIR-V para renderização via Vulkan.
Stack Tecnológica e Fontes de Inspiração
Escolher C# para um projeto assim é uma decisão interessante. O .NET moderno (versão 8 e superior) oferece excelente desempenho, e trabalhar com memória e estruturas de dados nele costuma ser mais agradável do que em C++.
Os autores do SharpEmu não escondem que estão construindo sobre a experiência de colegas. Vários projetos conhecidos influenciaram seu código e arquitetura:
- Ryujinx: daqui eles pegaram padrões para implementar operações de baixo nível em C# e manipulação de sistemas de arquivos.
- Kyty: um dos emuladores de PS5 iniciais, que serviu como livro-texto sobre execução de código nativo.
- ShadPS4: ajudou a entender os princípios gerais da arquitetura dos consoles Sony para gerações atuais e anteriores.
Atualmente, a plataforma-alvo principal é o Windows. Isso simplifica o debug nas fases iniciais. Suporte para Linux e macOS está planejado para depois, assim que a base de código ficar mais estável.
Como Experimentar
Se você quer dar uma olhada por dentro ou até ajudar o projeto com código, compilá-lo não será difícil. Você vai precisar do .NET SDK mais recente.
Clone o repositório:
git clone https://github.com/par274/sharpemu.git
Compile o projeto:
dotnet build
Para rodar uma imagem de jogo via linha de comando, use o PowerShell:
.\SharpEmu "путь_к_eboot.bin" 2>&1 | Tee-Object -FilePath "log.txt"
Para Quem Este Projeto É
O SharpEmu provavelmente não vai se tornar seu cliente principal de jogos nos próximos anos. Mas é ideal para quem quer aprender:
- Programação de sistemas em C#.
- Como compiladores JIT e tradução de instruções funcionam.
- Engenharia reversa de plataformas fechadas.
O projeto parece "limpo" e acadêmico. Não tem arquivos proprietários ou chaves; todos os testes são feitos com dumps dos consoles pessoais dos autores.
SharpEmu é um ótimo exemplo de como tarefas complexas como emulação de hardware são resolvidas usando linguagens modernas de alto nível. Por enquanto, o projeto é mais uma "sandbox" para engenheiros. Se você tem interesse em como comandos GPU são enviados no PS5 ou como o agendador de tarefas funciona no kernel dele, dê uma olhada no código-fonte. Ler código C# é claramente mais fácil do que entender as complexidades dos templates de C++.
Você pode acompanhar as atualizações na comunidade deles no Discord, um link está no repositório. Lá, os desenvolvedores frequentemente compartilham logs e sucessos em passar a próxima etapa de carregamento de jogos pesados.
Projetos relacionados