2 points par GN⁺ 2024-08-22 | 1 commentaires | Partager sur WhatsApp
  • shadPS4 est un émulateur PlayStation 4 en phase initiale, écrit en C++, qui prend en charge Windows, Linux et macOS
  • Le dépôt ne contient que le cœur de l’émulateur et n’inclut pas d’interface graphique ; les utilisateurs finaux classiques doivent donc télécharger séparément QtLauncher
  • Certains jeux, dont Bloodborne, Dark Souls Remastered et Red Dead Redemption, peuvent actuellement être lancés, mais le projet précise qu’il ne faut pas s’attendre à une expérience complète, car il en est encore aux premiers stades de développement
  • La compilation est documentée pour Docker, Windows, Linux et macOS ; macOS nécessite macOS 26.0 ou supérieur, et les Mac Intel ne sont pas pris en charge
  • Certains modules de firmware PS4 doivent être placés dans le dossier sys_modules pour que les jeux fonctionnent correctement ; ces modules doivent être extraits depuis une console PlayStation 4 légalement possédée

Nature de shadPS4 et public visé

  • shadPS4 est un émulateur PlayStation 4 en phase initiale, écrit en C++, qui fonctionne sous Windows, Linux et macOS
  • Ce dépôt fournit le cœur de l’émulateur et n’inclut pas d’interface graphique
  • Les utilisateurs finaux ayant besoin d’une interface graphique doivent utiliser QtLauncher
  • Pour le dépannage ou la prise en main, il est possible de consulter la documentation Quickstart
  • La compatibilité des jeux peut être vérifiée via shadPS4 Game Compatibility

État actuel et orientation du développement

  • shadPS4 précise qu’il est en phase initiale de développement et qu’il ne faut pas s’attendre à une exécution parfaite
  • Exemples de jeux actuellement exécutables :
  • Le projet a commencé pour le plaisir, et le temps libre limité de l’équipe peut ralentir la prise en charge de jeux plus complexes
  • L’équipe de développement indique vouloir continuer à publier de petites mises à jour régulières

Compilation et conditions de plateforme

  • Les builds en conteneur basés sur Docker et VSCode suivent les Docker Build Instructions
  • Des documents de compilation sont fournis pour chaque plateforme :
  • Pour exécuter shadPS4 sur macOS, macOS 26.0 ou supérieur est requis
  • Les Mac Intel ne sont pas pris en charge

Mode d’exécution et entrées

  • La liste des commandes et la description détaillée de chacune sont disponibles dans la sortie de --help
  • Les schémas d’exécution courants sont les suivants :
    • shadPS4 CUSA00001 : cherche le dossier CUSA00001 dans la liste des dossiers d’installation de jeux et le lance
    • shadPS4 --fullscreen true --config-clean CUSA00001 : l’argument du jeu est, par défaut, placé en dernier
    • shadPS4 -g CUSA00001 --fullscreen true --config-clean : l’argument du jeu peut être indiqué directement avec -g
    • shadPS4 /path/to/game.elf : lance directement un fichier ELF PS4
    • shadPS4 CUSA00001 -- -flag1 -flag2 : transmet des flags à l’argv de l’exécutable du jeu
  • Pour les tests, le débogage et le signalement de problèmes, consulter la Debugging documentation
  • Les raccourcis clavier prennent en charge le compteur de FPS, les informations de débogage vidéo, le plein écran, la capture RenderDoc et la capture d’écran
  • Les manettes Xbox et DualShock fonctionnent sans configuration supplémentaire
  • Les entrées clavier et souris peuvent être personnalisées via le bouton Controller du menu des paramètres
    • Les bindings personnalisés sont enregistrés par jeu
    • Jusqu’à 3 touches par binding sont prises en charge, ainsi que les boutons de souris et les mouvements de souris mappés sur des entrées de joystick

Fichiers de firmware et conditions légales

  • shadPS4 peut charger certains fichiers de firmware PlayStation 4
  • Les modules de firmware pris en charge doivent être placés dans le dossier sys_modules de shadPS4
  • Les modules pris en charge incluent notamment libSceAudiodec.sprx, libSceFont.sprx, libSceJpegDec.sprx, libSceJson.sprx, libSceLibcInternal.sprx, libScePngEnc.sprx, libSceRtc.sprx, libSceXml.sprx
  • Ces modules sont nécessaires au bon fonctionnement des jeux
  • Les modules de firmware doivent être extraits depuis une console PlayStation 4 légalement possédée

Contributions et projets de référence

  • Pour contribuer, il faut lire CONTRIBUTING.md et ouvrir une PR
  • Le projet remercie les équipes et projets suivants :
    • Panda3DS : a aidé à comprendre et résoudre les problèmes liés à l’exécution native du code x64 des binaires PS4
    • fpPS4 : a aidé à comprendre les parties complexes du système d’exploitation et des bibliothèques PS4
    • yuzu : le compilateur de shaders de shadPS4 s’inspire du compilateur Hades de yuzu
    • felix86 : émulateur d’espace utilisateur Linux x86-64 → RISC-V
    • emudev.org : réseau de personnes intéressées par la documentation, l’émulation, la simulation et la réimplémentation de matériels proches de la disparition
  • La licence est la GPL-2.0 license

1 commentaires

 
GN⁺ 2024-08-22
Avis sur Hacker News
  • Vraie question : en interne, est-ce plus proche d’un émulateur comme PCSX2, ou plutôt d’une couche de compatibilité comme Wine ?
    Si la PS4 est quasiment un ordinateur x86, j’imagine que l’essentiel de la difficulté consiste à implémenter les API système/graphiques de la PS4. Ou bien existe-t-il aussi de grosses différences matérielles à gérer entre un PC x86 et une PS4 ?

    • Pour plusieurs différences entre la PS4 et le PC, voir la présentation de Marcan au CCC 2016 : https://youtu.be/QMiubC6LdTA
    • Sur console, tous les shaders sont distribués précompilés pour la plateforme concernée, donc il faut probablement une architecture fondée sur un recompilateur de shaders.
      Rien que sur ce point, c’est déjà nettement plus de travail que ce que fait Wine.
    • La plupart des émulateurs PS4 fonctionnent de la même manière que Wine.
  • On dirait le premier émulateur PS4 à atteindre l’écran de personnage de Bloodborne.

  • Je me demande comment on conçoit un émulateur. Y a-t-il de bonnes ressources pour apprendre ?

    • Cela dépend beaucoup du matériel que l’on cherche à émuler. En général, il y a deux grandes catégories : l’émulation complète du système et l’émulation des API système.
      Dans le premier cas, on écrit du code qui émule le CPU du système cible à la manière d’un interpréteur d’instructions, comme pour la NES. Dans le second, on réimplémente les API du système cible, comme Wine. Si le système cible utilise une autre architecture CPU, il peut aussi falloir un compilateur JIT, comme pour la PS3.
      La plupart des émulateurs de consoles modernes sont plus proches du second cas, parce que les consoles modernes fonctionnent de façon similaire aux PC, avec un noyau de système d’exploitation et des bibliothèques en mode utilisateur pour les applications.
      Ce second cas se divise lui-même en deux approches : émuler les bibliothèques en mode utilisateur, ou bien réimplémenter le noyau de la console tout en réutilisant les bibliothèques système de la console elle-même.
    • https://rylev.github.io/DMG-01/public/book/ est une ressource agréable à lire.
    • Si tu veux apprendre, je pense qu’il vaut mieux commencer par quelque chose de bien documenté et relativement simple, comme un émulateur de vieille Game Boy.
    • javidx9 sur YouTube, alias OneLoneCoder, a fait une très bonne série où il écrit un émulateur NES à partir de zéro : https://www.youtube.com/watch?v=nViZg02IMQo&list=PLrOv9FMX8x...
    • Il existe beaucoup de ressources en ligne sur l’écriture d’un émulateur Game Boy, et l’architecture est suffisamment simple pour être facile à suivre.
      Je recommande de commencer par là dans le langage de ton choix.
  • Existe-t-il des documents de conception ou des ressources sur les tentatives précédentes, les travaux antérieurs, et ce qui rend ce projet différent ?

  • Ça ressemble à un projet intéressant à suivre. Vu le manque actuel d’options portables chez Sony, je me demande comment cela tournerait sur Steam Deck.

    • À mon avis, c’est totalement impossible. Le Steam Deck obtient des performances correctes sur certains jeux émulés de PS3[0], mais faire tourner les jeux que les gens voudraient vraiment sur PS4, c’est trop ambitieux.
      0: https://www.reddit.com/r/SteamDeck/comments/wodw8x/i_tested_...
    • Si ça suit une approche de couche de compatibilité, ça pourrait même mieux tourner qu’un émulateur Switch.
  • Cela veut-il dire qu’ils ont créé un équivalent de DXVK pour Gnm/Gnmx ?[0]
    [0] https://en.wikipedia.org/wiki/PlayStation_4_system_software#...

  • Voici les dernières avancées sur Bloodborne. C’est probablement ce que la plupart des gens attendent :
    La chaîne YouTube de ce développeur : https://www.youtube.com/watch?v=wC6s0avpQRE
    Je ne comprends vraiment pas pourquoi Sony laisse encore presque volontairement à l’abandon ce jeu de rang S à l’importance culturelle majeure. Ils attendent d’en faire un titre de lancement de la PS6 ?

    • J’ai toujours aimé les jeux Sony, mais je n’oublierai jamais que Sony n’a pas mis de rétrocompatibilité dans la PS4 en prétendant que personne ne s’y intéressait, pour ensuite pousser les anciens jeux via son service PSNOW par abonnement.
      Certains peuvent être téléchargés, mais d’autres ne sont disponibles qu’en streaming, ce qui oblige à avoir une bonne connexion Internet pour jouer à des jeux PS2. C’est absurde.
      Il y aura toujours une demande pour jouer aux anciens titres, et c’est pour cela que ce genre d’émulateurs existe.
  • Je me demande si le développement de l’émulation devient plus facile maintenant que les consoles modernes sont en pratique des systèmes PC réduits.

    • Je ne sais pas trop pour les générations précédentes, mais je peux expliquer comment l’émulation de la PS4 est possible. La première étape consiste à comprendre comment la console exécute les jeux.
      Heureusement, la PS4 a été hackée, et presque tous les fichiers et informations ont été déchiffrés et dumpés. Le SDK officiel de la PS4 a aussi fuité.
      Maintenant qu’on sait comment la console exécute les jeux, l’étape suivante consiste à utiliser ces informations pour les lancer en dehors de la console. Le système de la PS4 est une version modifiée de FreeBSD, donc son fonctionnement est très proche de celui d’un PC. Un exécutable PS4 n’est qu’un fichier ELF personnalisé.
      Donc, pour exécuter un jeu PS4 hors de la console, il faut mapper directement l’exécutable du jeu et fournir les symboles nécessaires d’une manière ou d’une autre, par exemple en les implémentant soi-même ou en réutilisant les bibliothèques PS4.
    • Grâce à Internet, il est plus facile d’entrer en contact avec des gens qui travaillent sur les mêmes sujets, et la puissance de calcul disponible pour comprendre le fonctionnement de ces systèmes s’est aussi améliorée.
      Mais l’accès à l’information me semble tout de même être un facteur majeur.
    • Le partage d’une architecture de jeu d’instructions aide clairement. Cela ouvre la voie à l’exécution directe d’images de jeux sans démarrer le système d’exploitation de la console, en injectant en dessous les dépendances nécessaires. Autrement dit, une approche similaire à celle de WINE.
      Plus généralement, l’industrie a aussi beaucoup progressé en matière de traduction binaire. Rosetta 2 en est un exemple. C’est devenu un outil de plus pour porter des binaires vers un autre environnement hôte.
    • Oui. Quand l’architecture reste plus ou moins similaire d’une génération à l’autre, ça va plus vite.
  • Je me souviens qu’un autre émulateur PS4 appelé Spine avait aussi attiré l’attention il y a quelques années. Je me demande ce qu’il est devenu.
    https://github.com/devofspine/spine
    Il n’y a pas de code source, seulement des binaires.