2 Punkte von GN⁺ 2024-08-22 | 1 Kommentare | Auf WhatsApp teilen
  • shadPS4 ist ein PlayStation-4-Emulator in einem frühen Entwicklungsstadium, der in C++ geschrieben wurde und Windows, Linux und macOS unterstützt
  • Das Repository enthält nur den Emulator-Kern und keine GUI; normale Endnutzer müssen daher den separaten QtLauncher herunterladen
  • Derzeit können einige Spiele wie Bloodborne, Dark Souls Remastered und Red Dead Redemption ausgeführt werden, es wird jedoch ausdrücklich darauf hingewiesen, dass man wegen des frühen Projektstatus keine vollständige Erfahrung erwarten sollte
  • Builds werden über Dokumentationen für Docker, Windows, Linux und macOS beschrieben; für macOS ist macOS 26.0 oder höher erforderlich, und Intel Macs werden nicht unterstützt
  • Einige PS4-Firmware-Module müssen in den Ordner sys_modules gelegt werden, damit Spiele korrekt funktionieren; diese Module müssen von einer rechtmäßig besessenen PlayStation-4-Konsole gedumpt werden

Charakter und Zielgruppe von shadPS4

  • shadPS4 ist ein früher PlayStation-4-Emulator für Windows, Linux und macOS und wurde in C++ geschrieben
  • Dieses Repository stellt den Emulator-Kern bereit und enthält keine GUI
  • Endnutzer, die eine GUI benötigen, sollten QtLauncher verwenden
  • Für Fehlerbehebung oder eine Anleitung zur Nutzung kann die Quickstart-Dokumentation herangezogen werden
  • Zur Prüfung der Spielkompatibilität gibt es shadPS4 Game Compatibility

Aktueller Status und Entwicklungsrichtung

  • shadPS4 befindet sich in einem frühen Entwicklungsstadium, daher sollte keine perfekte Nutzungserfahrung erwartet werden
  • Beispiele für aktuell lauffähige Spiele sind:
  • Das Projekt begann als Spaßprojekt, und wegen begrenzter Freizeit kann es dauern, bis komplexere Spiele lauffähig werden
  • Das Entwicklungsteam kündigt an, kleine, regelmäßige Updates fortzusetzen

Build und Plattformbedingungen

  • Docker- und VSCode-basierte Container-Builds folgen den Docker Build Instructions
  • Es gibt Build-Dokumentationen für die einzelnen Plattformen:
  • Um shadPS4 unter macOS auszuführen, ist macOS 26.0 oder höher erforderlich
  • Intel Macs werden nicht unterstützt

Ausführung und Eingabe

  • Eine Befehlsliste und detaillierte Erläuterungen zu jedem Befehl finden sich in der Ausgabe von --help
  • Häufig verwendete Ausführungsmuster sind:
    • shadPS4 CUSA00001: Sucht den Ordner CUSA00001 in der Liste der Spielinstallationsordner und bootet ihn
    • shadPS4 --fullscreen true --config-clean CUSA00001: Das Spielargument steht standardmäßig am Ende
    • shadPS4 -g CUSA00001 --fullscreen true --config-clean: Mit -g kann das Spielargument direkt angegeben werden
    • shadPS4 /path/to/game.elf: Bootet eine PS4-ELF-Datei direkt
    • shadPS4 CUSA00001 -- -flag1 -flag2: Übergibt Flags an argv der Spiel-Executable
  • Für Tests, Debugging und Issue-Reports siehe die Debugging documentation
  • Tastaturkürzel unterstützen FPS-Zähler, Video-Debug-Informationen, Vollbild, RenderDoc-Captures und Screenshot-Aufnahmen
  • Xbox- und DualShock-Controller funktionieren ohne zusätzliche Konfiguration
  • Tastatur- und Mauseingaben können über die Schaltfläche Controller im Einstellungsmenü angepasst werden
    • Benutzerdefinierte Bindings werden pro Spiel gespeichert
    • Unterstützt werden bis zu 3 Tasten pro Binding, Maustasten, per Mausbewegung gemappte Joystick-Eingaben usw.

Firmware-Dateien und rechtliche Bedingungen

  • shadPS4 kann einige PlayStation-4-Firmware-Dateien laden
  • Unterstützte Firmware-Module müssen im Ordner sys_modules von shadPS4 abgelegt werden
  • Zu den unterstützten Modulen gehören libSceAudiodec.sprx, libSceFont.sprx, libSceJpegDec.sprx, libSceJson.sprx, libSceLibcInternal.sprx, libScePngEnc.sprx, libSceRtc.sprx, libSceXml.sprx usw.
  • Diese Module sind notwendig, damit Spiele korrekt laufen
  • Die Firmware-Module müssen von einer rechtmäßig besessenen PlayStation-4-Konsole gedumpt werden

Beiträge und Referenzprojekte

  • Wer beitragen möchte, sollte CONTRIBUTING.md lesen und einen PR eröffnen
  • Das Projekt dankt den folgenden Teams und Projekten:
    • Panda3DS: half beim Verständnis und bei der Lösung von Problemen, die beim nativen Ausführen von x64-Code aus PS4-Binärdateien auftraten
    • fpPS4: half beim Verständnis komplexer Teile des PS4-Betriebssystems und der Bibliotheken
    • yuzu: Der Shader-Compiler von shadPS4 orientiert sich am Hades-Compiler von yuzu
    • felix86: x86-64-→-RISC-V-Linux-User-Space-Emulator
    • emudev.org: Netzwerk von Menschen, die sich für Dokumentation, Emulation, Simulation und Reimplementierung von Hardware interessieren, die beinahe vom Verschwinden bedroht ist
  • Die Lizenz ist die GPL-2.0 license

1 Kommentare

 
GN⁺ 2024-08-22
Hacker-News-Kommentare
  • Ich frage mich wirklich: Ist das intern eher ein Emulator wie PCSX2 oder eher eine Kompatibilitätsschicht wie Wine?
    Wenn die PS4 im Grunde ein x86-Computer ist, dürften die meisten schwierigen Teile wohl in der Implementierung der System-/Grafik-APIs der PS4 liegen. Oder gibt es zwischen einem x86-PC und der PS4 auch große Hardwareunterschiede, die behandelt werden müssen?

    • Mehrere Unterschiede zwischen PS4 und PC sieht man in Marcans CCC-Vortrag von 2016: https://youtu.be/QMiubC6LdTA
    • Auf Konsolen werden alle Shader für die jeweilige Plattform vorkompiliert ausgeliefert, daher braucht es wohl eine Architektur mit Shader-Recompiler
      Allein dieser Teil macht schon deutlich mehr, als Wine leistet
    • Die meisten PS4-Emulatoren funktionieren auf ähnliche Weise wie Wine
  • Scheint der erste PS4-Emulator zu sein, der bis zum Charakterbildschirm von Bloodborne kommt

  • Ich frage mich, wie man einen Emulator entwirft. Gibt es gute Ressourcen zum Lernen?

    • Das hängt stark davon ab, welche Hardware man emulieren will. Üblicherweise gibt es zwei Arten: Vollsystem-Emulation und System-API-Emulation
      Bei der ersten schreibt man Code, der wie beim NES die CPU des Zielsystems als Befehlsinterpreter emuliert. Bei der zweiten implementiert man wie Wine die APIs des Zielsystems neu. Wenn das Zielsystem eine andere CPU-Architektur nutzt, braucht man eventuell wie bei der PS3 einen JIT-Compiler
      Die meisten modernen Konsolenemulatoren sind eher Letzteres, weil moderne Konsolen in ihrer Funktionsweise PCs ähneln und es einen Betriebssystemkernel sowie User-Mode-Bibliotheken für Anwendungen gibt
      Auch Letzteres teilt sich wiederum in zwei Arten. Die eine emuliert die User-Mode-Bibliotheken, die andere implementiert den Konsolenkernel neu und verwendet dabei die Systembibliotheken der Konsole selbst wieder
    • https://rylev.github.io/DMG-01/public/book/ ist gut zu lesen
    • Wenn du es lernen willst, wäre es wohl gut, mit etwas wie einem älteren Game-Boy-Emulator anzufangen, der gut dokumentiert und relativ einfach ist
    • javidx9 auf YouTube, also OneLoneCoder, hat eine ziemlich gute Reihe gemacht, in der er einen NES-Emulator von Grund auf schreibt: https://www.youtube.com/watch?v=nViZg02IMQo&list=PLrOv9FMX8x...
    • Es gibt viele Online-Ressourcen zum Schreiben eines Game-Boy-Emulators, und die Architektur ist einfach genug, um gut folgen zu können
      Ich würde empfehlen, dort in der Sprache deiner Wahl anzufangen
  • Gibt es Designdokumente oder Ressourcen, die frühere Versuche bzw. Vorarbeiten zeigen und warum dieses Projekt anders ist?

  • Sieht nach einem interessanten Projekt aus, dem man folgen kann. Angesichts der Tatsache, dass Sony derzeit kaum portable Optionen hat, frage ich mich, wie es auf dem Steam Deck laufen würde

    • Ich halte das für völlig unmöglich. Das Steam Deck schafft bei einigen PS3-Emulationsspielen zwar ordentliche Frames[0], aber Spiele auszuführen, die Leute tatsächlich auf der PS4 spielen wollen, ist unrealistisch
      0: https://www.reddit.com/r/SteamDeck/comments/wodw8x/i_tested_...
    • Wenn es als Kompatibilitätsschicht umgesetzt wird, könnte es sogar besser laufen als ein Switch-Emulator
  • Bedeutet das, dass sie ein DXVK-Gegenstück für Gnm/Gnmx gebaut haben?[0]
    [0] https://en.wikipedia.org/wiki/PlayStation_4_system_software#...

  • Das ist der aktuelle Fortschritt bei Bloodborne. Das dürfte es sein, worauf die meisten warten:
    YouTube dieses Entwicklers: https://www.youtube.com/watch?v=wC6s0avpQRE
    Ich verstehe wirklich nicht, warum Sony dieses kulturell bedeutende S-Klasse-Spiel immer noch fast schon böswillig vernachlässigt. Warten sie darauf, es als Launch-Titel für die PS6 zu verwenden?

    • Ich mochte Sony-Spiele immer, aber ich werde nicht vergessen, dass Sony der PS4 keine Abwärtskompatibilität gegeben hat, behauptete, niemand interessiere sich dafür, und die Leute später alte Spiele über den abonnementbasierten PSNOW-Dienst spielen ließ
      Manche kann man herunterladen, andere sind aber nur per Streaming verfügbar, sodass man für PS2-Spiele eine gute Internetverbindung braucht. Absurd
      Es wird immer Nachfrage danach geben, alte Spiele zu spielen, und deshalb existieren solche Emulatoren
  • Ich frage mich, ob die Emulationsentwicklung heutzutage einfacher wird, da moderne Konsolen im Grunde zu verkleinerten PC-Systemen geworden sind

    • Zu früheren Generationen weiß ich es nicht genau, aber ich kann erklären, wie PS4-Emulation möglich ist. Der erste Schritt ist zu verstehen, wie die Konsole Spiele ausführt
      Zum Glück wurde die PS4 gehackt, und nahezu alle Dateien und Informationen wurden entschlüsselt und gedumpt. Auch das offizielle PS4-SDK ist geleakt
      Jetzt weiß man, wie die Konsole Spiele ausführt, und der nächste Schritt ist, diese Informationen zu nutzen, um Spiele außerhalb der Konsole auszuführen. Das PS4-System ist eine modifizierte Version von FreeBSD und verhält sich daher sehr ähnlich wie ein PC. PS4-Executables sind lediglich Custom-ELF-Dateien
      Um PS4-Spiele außerhalb der Konsole auszuführen, muss man also die ausführbare Datei des Spiels direkt mappen und die benötigten Symbole irgendwie bereitstellen, zum Beispiel durch eigene Implementierung oder durch Wiederverwendung von PS4-Bibliotheken
    • Dank des Internets ist es einfacher, andere zu erreichen, die dasselbe tun, und auch die Rechenleistung, um herauszufinden, wie solche Systeme funktionieren, ist besser geworden
      Trotzdem dürfte der Zugang zu Informationen ein großer Faktor sein
    • Eine gemeinsame Instruction Set Architecture hilft definitiv. Sie eröffnet den Weg, Game-Images direkt auszuführen, ohne das Konsolenbetriebssystem zu booten, und die nötigen Abhängigkeiten darunter einzuschieben. Also ähnlich wie WINE es macht
      Insgesamt hat die Branche auch bei der Binärübersetzung große Fortschritte gemacht. Rosetta 2 ist ein Beispiel. Damit ist es ein weiteres Werkzeug geworden, um Binaries in eine andere Host-Umgebung zu bringen
    • Genau. Wenn die Architektur zwischen Generationen einigermaßen ähnlich ist, geht es schneller
  • Mir fällt ein, dass vor ein paar Jahren ein anderer PS4-Emulator namens Spine Aufmerksamkeit bekommen hat. Ich frage mich, was aus dem Projekt geworden ist
    https://github.com/devofspine/spine
    Es gibt keinen Quellcode, nur Binaries