ShadPS4 – PlayStation 4エミュレーター
(github.com/shadps4-emu)- shadPS4はC++で書かれた初期段階のPlayStation 4エミュレーターで、Windows、Linux、macOSをサポート
- リポジトリにはエミュレーターコアのみが含まれ、GUIはないため、一般ユーザーは別途QtLauncherをダウンロードする必要がある
- 現時点ではBloodborne、Dark Souls Remastered、Red Dead Redemptionなど一部のゲームを実行できるが、プロジェクトは初期開発段階のため、完全な体験は期待しにくいと明記されている
- ビルドはDocker、Windows、Linux、macOS向けドキュメントで案内されており、macOSではmacOS 26.0以降が必要で、Intel Macはサポートされない
- 一部のPS4ファームウェアモジュールを
sys_modulesフォルダに配置する必要があり、ゲームを正しく動作させるには、これらのモジュールを合法的に所有するPlayStation 4本体からダンプしなければならない
shadPS4の性格と対象ユーザー
- shadPS4はWindows、Linux、macOSで動作する初期段階のPlayStation 4エミュレーターで、C++で書かれている
- このリポジトリはエミュレーターコアを提供し、GUIは含まない
- GUIが必要なエンドユーザーはQtLauncherを利用する必要がある
- トラブルシューティングや使い方の確認にはQuickstartドキュメントを参照できる
- ゲームの動作可否確認用にshadPS4 Game Compatibilityが提供されている
現在の動作状況と開発方針
- shadPS4は初期開発段階のため、完璧な実行体験は期待しにくいと明記されている
- 現在実行可能なゲームの例は以下の通り
- Bloodborne
- Dark Souls Remastered
- Red Dead Redemption
- そのほか多数のゲーム
- プロジェクトは趣味として始まり、自由時間が限られているため、より複雑なゲームを実行できるようになるまでには時間がかかる可能性がある
- 開発チームは小規模で定期的なアップデートを継続するとしている
ビルドとプラットフォーム条件
- DockerおよびVSCodeベースのコンテナビルドはDocker Build Instructionsに従う
- プラットフォーム別のビルド文書が用意されている
- macOSでshadPS4を実行するにはmacOS 26.0以降が必要
- Intel Macはサポートされない
実行方法と入力
- コマンド一覧と各コマンドの詳細説明は
--helpの出力で確認できる - よく使われる実行パターンは以下の通り
shadPS4 CUSA00001: ゲームインストールフォルダ一覧からCUSA00001フォルダを探して起動するshadPS4 --fullscreen true --config-clean CUSA00001: ゲーム引数は通常最後に置くshadPS4 -g CUSA00001 --fullscreen true --config-clean:-gでゲーム引数を直接指定できるshadPS4 /path/to/game.elf: PS4 ELFファイルを直接起動するshadPS4 CUSA00001 -- -flag1 -flag2: ゲーム実行ファイルのargvとしてフラグを渡す
- テスト、デバッグ、Issue報告にはDebugging documentationを参照する
- キーボードショートカットはFPSカウンター、ビデオデバッグ情報、フルスクリーン、RenderDocキャプチャ、スクリーンショット撮影をサポートする
- XboxおよびDualShockコントローラーは追加設定なしで動作する
- キーボードとマウス入力は設定メニューのControllerボタンからカスタマイズできる
- カスタムバインドはゲームごとに保存される
- 1つのバインドにつき最大3つのキー、マウスボタン、ジョイスティック入力にマッピングされるマウス移動などをサポートする
ファームウェアファイルと法的条件
- shadPS4は一部のPlayStation 4ファームウェアファイルを読み込める
- 対応ファームウェアモジュールはshadPS4の
sys_modulesフォルダに配置する必要がある - 対応モジュールには
libSceAudiodec.sprx,libSceFont.sprx,libSceJpegDec.sprx,libSceJson.sprx,libSceLibcInternal.sprx,libScePngEnc.sprx,libSceRtc.sprx,libSceXml.sprxなどが含まれる - これらのモジュールはゲームを正しく実行するために必要
- ファームウェアモジュールは合法的に所有するPlayStation 4本体からダンプしなければならない
貢献と参考プロジェクト
- 貢献するにはCONTRIBUTING.mdを読み、PRを作成すればよい
- プロジェクトは以下のチームとプロジェクトに謝意を示している
- Panda3DS: PS4バイナリのx64コードをネイティブ実行する際に発生する問題の理解と解決に役立った
- fpPS4: PS4オペレーティングシステムとライブラリの複雑な部分の理解に役立った
- yuzu: shadPS4のシェーダーコンパイラはyuzuのHadesコンパイラを設計の土台としている
- felix86: x86-64 → RISC-V Linuxユーザー空間エミュレーター
- emudev.org: 消滅の危機にあるハードウェアの文書化、エミュレーション、シミュレーション、再実装に関心を持つ人々のネットワーク
- ライセンスはGPL-2.0 license
1件のコメント
Hacker News のコメント
純粋に気になるのだが、内部的には PCSX2 のようなエミュレータに近いのか、それとも Wine のような互換レイヤーに近いのだろうか?
PS4 がほぼ x86 コンピュータなら、難しい部分の大半は PS4 のシステム/グラフィックス API の実装になりそう。あるいは x86 PC と PS4 の間に、処理しなければならない大きなハードウェア差異もあるのだろうか?
少なくともその部分だけを見ても、Wine がやっていることよりかなり多くの作業をしている
Bloodborne のキャラクター画面まで到達した初の PS4 エミュレータに見える
https://x.com/shadps4/status/1825669017392107971?s=46
エミュレータはどう設計するのか気になる。学ぶのによい資料はある?
1 つ目は NES のように、対象システムの CPU を命令インタプリタ方式でエミュレートするコードを書く。2 つ目は Wine のように、対象システムの API を再実装する。対象システムが別の CPU アーキテクチャを使っている場合は、PS3 のように JIT コンパイラが必要になることもある
現代のコンソールエミュレータの多くは後者に近い。現代のコンソールの動作方式が PC に似ていて、OS カーネルとアプリケーション用のユーザーモードライブラリがあるためだ
後者もさらに 2 種類に分かれる。1 つはユーザーモードライブラリをエミュレートする方式で、もう 1 つはコンソールのカーネルを再実装しつつ、コンソール自体のシステムライブラリを再利用する方式だ
好きな言語でそこから始めるのを勧める
以前の試みや先行作業、そしてこのプロジェクトがなぜ違うのかを示す設計文書や資料はある?
追いかけてみる価値のある面白いプロジェクトに見える。Sony に現在携帯機の選択肢が不足していることを考えると、Steam Deck でどう動くのか気になる
0: https://www.reddit.com/r/SteamDeck/comments/wodw8x/i_tested_...
これは Gnm/Gnmx 向けの DXVK 相当を作ったという意味なのか?[0]
[0] https://en.wikipedia.org/wiki/PlayStation_4_system_software#...
Bloodborne の最新の進捗。多くの人が待っているのはこれだろう:
この開発者の YouTube: https://www.youtube.com/watch?v=wC6s0avpQRE
Sony がこのS 級の文化的意義を持つゲームを、いまだにほとんど悪意があるかのように放置しているのは一体何なのか分からない。PS6 のローンチタイトルにするために待っているのだろうか?
一部はダウンロードできるが、ほかはストリーミングのみなので、PS2 ゲームを遊ぶには良いインターネット接続が必要になる。ばかげている
旧作を遊びたいという需要は常にあるはずで、だからこそこうしたエミュレータが存在する
最近の現代コンソールが実質的に縮小版 PC システムになってきて、エミュレーション開発はより簡単になっているのだろうか
幸い PS4 はハッキングされ、ほぼすべてのファイルと情報が復号されてダンプされた。公式 PS4 SDK も流出した
これでコンソールがゲームをどう実行するかが分かり、次の段階はこの情報を使ってコンソールの外でゲームを実行することだ。PS4 システムは FreeBSD を改変したバージョンなので、PC と動作方式が非常に似ている。PS4 の実行ファイルはカスタム ELF ファイルにすぎない
そのため、コンソールの外で PS4 ゲームを実行するには、ゲームの実行ファイルを直接マッピングし、必要なシンボルを何らかの形で提供する必要がある。たとえば自前で実装するか、PS4 ライブラリを再利用する方式だ
それでも情報へのアクセスのしやすさが大きな要因だと思う
全体として、業界ではバイナリ変換も大きく進歩した。Rosetta 2 のようなものがその例だ。バイナリを別のホスト環境に載せるために使える、もう 1 つの道具になったわけだ
数年前に Spine という別の PS4 エミュレータも注目を集めていたのを思い出した。あのプロジェクトはどうなったのだろう
https://github.com/devofspine/spine
ソースコードはなく、バイナリだけがある