2 pontos por GN⁺ 2024-08-22 | 1 comentários | Compartilhar no WhatsApp
  • shadPS4 é um emulador de PlayStation 4 em estágio inicial, escrito em C++, com suporte a Windows, Linux e macOS
  • O repositório contém apenas o núcleo do emulador e não inclui GUI; por isso, usuários finais comuns devem baixar separadamente o QtLauncher
  • Atualmente, ele consegue executar alguns jogos, como Bloodborne, Dark Souls Remastered e Red Dead Redemption, mas o projeto deixa claro que, por estar em estágio inicial de desenvolvimento, é difícil esperar uma experiência completa
  • A compilação é orientada por documentações para Docker, Windows, Linux e macOS; no macOS, é necessário macOS 26.0 ou superior, e Macs com Intel não são compatíveis
  • Para que os jogos funcionem corretamente, alguns módulos de firmware do PS4 devem ser colocados na pasta sys_modules; esses módulos devem ser extraídos de um console PlayStation 4 de propriedade legal

Natureza do shadPS4 e público-alvo

  • shadPS4 é um emulador de PlayStation 4 em estágio inicial que roda em Windows, Linux e macOS, escrito em C++
  • Este repositório fornece o núcleo do emulador e não inclui GUI
  • Usuários finais que precisam de GUI devem usar o QtLauncher
  • Para solução de problemas ou instruções de uso, consulte a documentação Quickstart
  • Para verificar se jogos funcionam, há o shadPS4 Game Compatibility

Estado atual de funcionamento e direção de desenvolvimento

  • O shadPS4 deixa claro que está em estágio inicial de desenvolvimento, portanto é difícil esperar uma experiência de execução perfeita
  • Exemplos de jogos atualmente executáveis incluem:
  • O projeto começou por diversão e, devido ao tempo livre limitado, pode levar algum tempo até que jogos mais complexos sejam executados
  • A equipe de desenvolvimento afirma que continuará com atualizações pequenas e regulares

Compilação e requisitos de plataforma

  • Builds em contêiner com Docker e VSCode seguem as Docker Build Instructions
  • Há documentação de compilação por plataforma:
  • Para executar o shadPS4 no macOS, é necessário macOS 26.0 ou superior
  • Macs com Intel não são compatíveis

Modo de execução e entrada

  • A lista de comandos e a explicação detalhada de cada comando podem ser conferidas na saída de --help
  • Padrões de execução usados com frequência incluem:
    • shadPS4 CUSA00001: procura a pasta CUSA00001 na lista de pastas de jogos instalados e a inicializa
    • shadPS4 --fullscreen true --config-clean CUSA00001: o argumento do jogo fica, por padrão, no final
    • shadPS4 -g CUSA00001 --fullscreen true --config-clean: permite especificar diretamente o argumento do jogo com -g
    • shadPS4 /path/to/game.elf: inicializa diretamente um arquivo ELF do PS4
    • shadPS4 CUSA00001 -- -flag1 -flag2: passa flags para o argv do executável do jogo
  • Para testes, depuração e relato de issues, consulte a Debugging documentation
  • Os atalhos de teclado oferecem suporte a contador de FPS, informações de depuração de vídeo, tela cheia, captura do RenderDoc e captura de screenshot
  • Controles Xbox e DualShock funcionam sem configuração adicional
  • A entrada de teclado e mouse pode ser personalizada no botão Controller do menu de configurações
    • Bindings personalizados são salvos por jogo
    • Há suporte a até 3 teclas por binding, botões do mouse e movimento do mouse mapeado para entrada de joystick, entre outros

Arquivos de firmware e condições legais

  • O shadPS4 pode carregar alguns arquivos de firmware do PlayStation 4
  • Os módulos de firmware compatíveis devem ser colocados na pasta sys_modules do shadPS4
  • Os módulos compatíveis incluem libSceAudiodec.sprx, libSceFont.sprx, libSceJpegDec.sprx, libSceJson.sprx, libSceLibcInternal.sprx, libScePngEnc.sprx, libSceRtc.sprx, libSceXml.sprx, entre outros
  • Esses módulos são necessários para executar os jogos corretamente
  • Os módulos de firmware devem ser extraídos de um console PlayStation 4 de propriedade legal

Contribuição e projetos de referência

  • Para contribuir, leia o CONTRIBUTING.md e abra um PR
  • O projeto agradece às seguintes equipes e projetos:
    • Panda3DS: ajudou a entender e resolver problemas surgidos ao executar nativamente código x64 de binários do PS4
    • fpPS4: ajudou a entender partes complexas do sistema operacional e das bibliotecas do PS4
    • yuzu: o compilador de shaders do shadPS4 usa o compilador Hades do yuzu como modelo
    • felix86: emulador de espaço de usuário Linux x86-64 → RISC-V
    • emudev.org: rede de pessoas interessadas em documentação, emulação, simulação e reimplementação de hardwares próximos da extinção
  • A licença é a GPL-2.0 license

1 comentários

 
GN⁺ 2024-08-22
Comentários do Hacker News
  • Fico realmente curioso: internamente, isso é mais próximo de um emulador como o PCSX2 ou de uma camada de compatibilidade como o Wine?
    Se o PS4 é basicamente um computador x86, parece que a maior parte da dificuldade deve estar em implementar as APIs de sistema/gráficas do PS4. Ou há também grandes diferenças de hardware entre um PC x86 e o PS4 que precisam ser tratadas?

    • As várias diferenças entre o PS4 e o PC podem ser vistas na apresentação da Marcan na CCC de 2016: https://youtu.be/QMiubC6LdTA
    • Nos consoles, todos os shaders são distribuídos pré-compilados para a plataforma, então deve ser necessária uma arquitetura baseada em recompilador de shaders
      Só por esse ponto, já faz bem mais coisa do que o Wine faz
    • A maioria dos emuladores de PS4 funciona de forma semelhante ao Wine
  • Parece ser o primeiro emulador de PS4 a chegar até a tela de personagem de Bloodborne

  • Tenho curiosidade sobre como emuladores são projetados. Existe algum material bom para aprender?

    • Isso varia bastante dependendo de qual hardware você quer emular. Em geral, há dois tipos: emulação de sistema completo e emulação da API do sistema
      No primeiro caso, você escreve código que emula a CPU do sistema-alvo no estilo de um interpretador de instruções, como no NES. No segundo, você reimplementa a API do sistema-alvo, como o Wine faz. Se o sistema-alvo usar uma arquitetura de CPU diferente, pode ser necessário um compilador JIT, como no PS3
      A maioria dos emuladores de consoles modernos fica mais próxima do segundo caso, porque consoles modernos funcionam de forma parecida com PCs, com um kernel de sistema operacional e bibliotecas em modo usuário para aplicações
      Esse segundo caso também se divide em dois tipos. Um é emular as bibliotecas em modo usuário, e o outro é reimplementar o kernel do console enquanto reutiliza as bibliotecas de sistema do próprio console
    • https://rylev.github.io/DMG-01/public/book/ é um material agradável de ler
    • Se quiser aprender, talvez seja melhor começar com algo como um emulador de Game Boy antigo, que é bem documentado e relativamente simples
    • O javidx9 no YouTube, também conhecido como OneLoneCoder, fez uma série muito boa escrevendo um emulador de NES do zero: https://www.youtube.com/watch?v=nViZg02IMQo&list=PLrOv9FMX8x...
    • Há muito material online sobre como escrever um emulador de Game Boy, e a arquitetura é simples o bastante para ser fácil de acompanhar
      Recomendo começar por aí na linguagem que você quiser
  • Existe alguma documentação de arquitetura ou material mostrando tentativas anteriores ou trabalhos prévios, e por que este projeto é diferente?

  • Parece um projeto interessante de acompanhar. Dado que a Sony atualmente tem poucas opções portáteis, fico curioso para saber como isso rodaria no Steam Deck

    • Acho absolutamente impossível. O Steam Deck até consegue taxas de quadros razoáveis em alguns jogos de emulação de PS3[0], mas rodar jogos que as pessoas realmente gostariam de jogar no PS4 seria inviável
      0: https://www.reddit.com/r/SteamDeck/comments/wodw8x/i_tested_...
    • Se seguir por uma abordagem de camada de compatibilidade, talvez rode melhor do que um emulador de Switch
  • Isso quer dizer que fizeram um equivalente ao DXVK para Gnm/Gnmx?[0]
    [0] https://en.wikipedia.org/wiki/PlayStation_4_system_software#...

  • Este é o progresso mais recente de Bloodborne. Provavelmente é isso que a maioria das pessoas está esperando:
    YouTube deste desenvolvedor: https://www.youtube.com/watch?v=wC6s0avpQRE
    Não entendo como a Sony ainda deixa este jogo de importância cultural de primeira linha praticamente abandonado de forma quase maliciosa. Estão esperando para usá-lo como título de lançamento do PS6?

    • Sempre gostei dos jogos da Sony, mas nunca vou esquecer que a Sony deixou de colocar retrocompatibilidade no PS4 alegando que ninguém se importava, e depois fez as pessoas jogarem títulos antigos no serviço por assinatura PSNOW
      Alguns podem ser baixados, mas outros só podem ser jogados via streaming, então você precisa de uma boa conexão de internet para jogar títulos de PS2. Isso é absurdo
      Sempre haverá demanda para jogar títulos antigos, e é por isso que emuladores como este existem
  • Fico pensando se o desenvolvimento de emulação está ficando mais fácil agora que os consoles modernos se tornaram, na prática, sistemas de PC reduzidos

    • Não sei muito sobre gerações anteriores, mas posso explicar como a emulação de PS4 é possível. O primeiro passo é entender como o console executa jogos
      Felizmente, o PS4 foi hackeado, e quase todos os arquivos e informações foram descriptografados e extraídos. O SDK oficial do PS4 também vazou
      Agora que se sabe como o console executa jogos, o próximo passo é usar essa informação para executar os jogos fora do console. O sistema do PS4 é uma versão modificada do FreeBSD, então ele funciona de forma muito parecida com um PC. Os executáveis do PS4 são apenas arquivos ELF personalizados
      Portanto, para executar jogos de PS4 fora do console, basta mapear diretamente o executável do jogo e fornecer os símbolos necessários de alguma forma, por exemplo implementando-os diretamente ou reutilizando bibliotecas do PS4
    • Graças à internet, ficou mais fácil encontrar outras pessoas fazendo o mesmo tipo de coisa, e também melhorou o poder computacional para descobrir como esses sistemas funcionam
      Ainda assim, acho que o grande fator é o acesso à informação
    • Um conjunto de instruções comum certamente ajuda. Porque isso abre o caminho para executar diretamente a imagem do jogo, sem inicializar o sistema operacional do console, e injetar por baixo as dependências necessárias. Ou seja, algo parecido com o que o WINE faz
      De forma geral, a conversão binária também avançou bastante no setor. Rosetta 2 é um exemplo. Isso acabou virando mais uma ferramenta que pode ser usada para levar binários para outro ambiente hospedeiro
    • Sim. Se a arquitetura entre gerações for relativamente parecida, fica mais rápido
  • Lembro que alguns anos atrás outro emulador de PS4 chamado Spine também recebeu atenção. Fico curioso sobre o que aconteceu com esse projeto
    https://github.com/devofspine/spine
    Não há código-fonte, só binários