>_ DevTrendspt

Idioma

Início

Linguagens

Seções

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embarcados Segurança
C-sharp

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.bin e .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:

  1. Ryujinx: daqui eles pegaram padrões para implementar operações de baixo nível em C# e manipulação de sistemas de arquivos.
  2. Kyty: um dos emuladores de PS5 iniciais, que serviu como livro-texto sobre execução de código nativo.
  3. 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.

*Dreaming Sarah já consegue renderizar texturas.*

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