2 ポイント 投稿者 GN⁺ 2024-08-22 | 1件のコメント | WhatsAppで共有
  • 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は初期開発段階のため、完璧な実行体験は期待しにくいと明記されている
  • 現在実行可能なゲームの例は以下の通り
  • プロジェクトは趣味として始まり、自由時間が限られているため、より複雑なゲームを実行できるようになるまでには時間がかかる可能性がある
  • 開発チームは小規模で定期的なアップデートを継続するとしている

ビルドとプラットフォーム条件

  • 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件のコメント

 
GN⁺ 2024-08-22
Hacker News のコメント
  • 純粋に気になるのだが、内部的には PCSX2 のようなエミュレータに近いのか、それとも Wine のような互換レイヤーに近いのだろうか?
    PS4 がほぼ x86 コンピュータなら、難しい部分の大半は PS4 のシステム/グラフィックス API の実装になりそう。あるいは x86 PC と PS4 の間に、処理しなければならない大きなハードウェア差異もあるのだろうか?

    • PS4 と PC の間にあるさまざまな違いは、Marcan の 2016 年 CCC 講演を見るとよい: https://youtu.be/QMiubC6LdTA
    • コンソールでは、すべてのシェーダーがそのプラットフォーム向けに事前コンパイルされた状態で配布されるため、シェーダー再コンパイラベースの構造が必要になるはず
      少なくともその部分だけを見ても、Wine がやっていることよりかなり多くの作業をしている
    • ほとんどの PS4 エミュレータは Wine と同じ方式で動作する
  • Bloodborne のキャラクター画面まで到達した初の PS4 エミュレータに見える

  • エミュレータはどう設計するのか気になる。学ぶのによい資料はある?

    • どのハードウェアをエミュレートしようとしているかによって大きく変わる。通常は 2 種類ある: フルシステムエミュレーションシステム API エミュレーション
      1 つ目は NES のように、対象システムの CPU を命令インタプリタ方式でエミュレートするコードを書く。2 つ目は Wine のように、対象システムの API を再実装する。対象システムが別の CPU アーキテクチャを使っている場合は、PS3 のように JIT コンパイラが必要になることもある
      現代のコンソールエミュレータの多くは後者に近い。現代のコンソールの動作方式が PC に似ていて、OS カーネルとアプリケーション用のユーザーモードライブラリがあるためだ
      後者もさらに 2 種類に分かれる。1 つはユーザーモードライブラリをエミュレートする方式で、もう 1 つはコンソールのカーネルを再実装しつつ、コンソール自体のシステムライブラリを再利用する方式だ
    • https://rylev.github.io/DMG-01/public/book/ この資料は読みやすい
    • 学びたいなら、ドキュメントがよく整備されていて比較的単純な古い Game Boy エミュレータのようなものから見るとよさそう
    • YouTube の javidx9、つまり OneLoneCoder が、NES エミュレータをゼロから作るかなり良いシリーズを作っている: https://www.youtube.com/watch?v=nViZg02IMQo&list=PLrOv9FMX8x...
    • Game Boy エミュレータを書くオンライン資料は多く、アーキテクチャも十分単純なので追いやすい
      好きな言語でそこから始めるのを勧める
  • 以前の試みや先行作業、そしてこのプロジェクトがなぜ違うのかを示す設計文書や資料はある?

  • 追いかけてみる価値のある面白いプロジェクトに見える。Sony に現在携帯機の選択肢が不足していることを考えると、Steam Deck でどう動くのか気になる

    • 絶対に無理だと思う。Steam Deck は一部の PS3 エミュレーションゲームではまずまずのフレームレートを出すが[0]、人々が実際に PS4 で遊びたいと思うようなゲームを動かすのは厳しい
      0: https://www.reddit.com/r/SteamDeck/comments/wodw8x/i_tested_...
    • 互換レイヤー方式で行くなら、Switch エミュレータよりうまく動く可能性もある
  • これは 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 のローンチタイトルにするために待っているのだろうか?

    • Sony のゲームはずっと好きだったが、Sony が PS4 に後方互換性を入れず、誰も関心がないと主張しておきながら、後になって旧作をサブスクリプション型の PSNOW サービスで遊ばせるようにしたことは忘れられない
      一部はダウンロードできるが、ほかはストリーミングのみなので、PS2 ゲームを遊ぶには良いインターネット接続が必要になる。ばかげている
      旧作を遊びたいという需要は常にあるはずで、だからこそこうしたエミュレータが存在する
  • 最近の現代コンソールが実質的に縮小版 PC システムになってきて、エミュレーション開発はより簡単になっているのだろうか

    • 以前の世代についてはよく分からないが、PS4 エミュレーションがどう可能なのかは説明できる。最初の段階は、コンソールがゲームをどう実行するかを理解することだ
      幸い PS4 はハッキングされ、ほぼすべてのファイルと情報が復号されてダンプされた。公式 PS4 SDK も流出した
      これでコンソールがゲームをどう実行するかが分かり、次の段階はこの情報を使ってコンソールの外でゲームを実行することだ。PS4 システムは FreeBSD を改変したバージョンなので、PC と動作方式が非常に似ている。PS4 の実行ファイルはカスタム ELF ファイルにすぎない
      そのため、コンソールの外で PS4 ゲームを実行するには、ゲームの実行ファイルを直接マッピングし、必要なシンボルを何らかの形で提供する必要がある。たとえば自前で実装するか、PS4 ライブラリを再利用する方式だ
    • インターネットのおかげで同じことをしている人たちにより簡単にアクセスできるし、こうしたシステムがどう動作するかを把握するための計算能力も向上した
      それでも情報へのアクセスのしやすさが大きな要因だと思う
    • 共通の命令セットアーキテクチャは確実に役立つ。コンソール OS を起動しなくてもゲームイメージを直接実行し、その下に必要な依存関係を差し込む道が開けるからだ。つまり WINE がやっている方式に近い
      全体として、業界ではバイナリ変換も大きく進歩した。Rosetta 2 のようなものがその例だ。バイナリを別のホスト環境に載せるために使える、もう 1 つの道具になったわけだ
    • その通り。世代間でアーキテクチャがある程度似ていれば、より速くなる
  • 数年前に Spine という別の PS4 エミュレータも注目を集めていたのを思い出した。あのプロジェクトはどうなったのだろう
    https://github.com/devofspine/spine
    ソースコードはなく、バイナリだけがある