本文へスキップ
PS5PCEM
一部ファームウェアと HLE

APR のファイル識別子と読み取り

APR はタイトルのファイルを一度だけ解決し、その後のコマンドバッファではプロセス内の識別子を使います。遅延した AMPR の読み取りは、ホストのディスクリプターを持ち続けることなく、同じ読み取り専用の /app0 のファイルを開き直します。

2026年10月10日 までのリポジトリノート

パスの代わりに識別子

アクセラレーターの API は、コマンドのたびにパスを求めません。タイトルはパスを解決してコンパクトなファイル識別子を受け取り、後で送信する読み取りコマンドにその識別子を入れます。PS5PCEM はパスとファイルサイズを識別子と並べて保持します。このテーブルはプロセス内のものです。ホストのパスがゲストに返されることはありません。

ファイルはタイトルの読み取り専用の /app0 マウントから来ます。解決済みの項目は遅延した読み取りの実行時に開き直せるため、エミュレーターはすべてのディスクリプターをプロセスの全期間持ち続ける必要がありません。キャッシュされたテーブルは最大 64 ファイルを保持します。

コマンドバッファ

送信は 1 回の読み取り呼び出しではなく、ゲストのコマンドバッファです。PS5PCEM は最大 32 個の有効なコマンドバッファを受け付けます。各バッファには上限があり、読み取り 32、書き込み 32、マップ 32、完了レコード 32、操作 128 です。最大 64 件の送信を同時に処理でき、自動プールは 8 個のバッファを保持します。読み取りは、ファイル識別子、ゲスト側の書き込み先、サイズ、ファイルオフセットを指定し、バイト数を受け取るアドレスを指定することもできます。

読み取り処理は、不明な識別子、存在しないファイル、短いかアラインされていないコマンドバッファ、ファイルや書き込み先からはみ出す要求を拒否します。1 回の読み取りは 4 GiB が上限ですが、これはインターフェースの上限であり、タイトルがそれほど大きな読み取りを行うという意味ではありません。マップのコマンドは、ゲストが期待する 16 KiB の AMM ページサイズを使います。

APR と AMPR の関係

APR はファイルテーブルとコマンドバッファの寿命を担当します。AMPR は、カウンター、待機、そして処理の完了をタイトルに伝える完了イベントを担当します。タイトルは多数のファイル読み取りをキューに入れ、完了コマンドが更新するカウンターを待つことができます。Grand Theft Auto III の初回の起動は観測された大きな例で、読み取りはこの経路を通り、完了イベントは AMPR のキューを通じて戻ってきます。

もうひとつのファイル API であるカーネルの非同期 I/O は別のページで扱います。APR はアクセラレーターのコマンドストリームです。カーネルのバッチ API は POSIX 風のリクエストリストです。

実装済みのこと

  • 読み取り専用の /app0 のパスに対するプロセス内のファイル識別子と、後の読み取りのために保持するサイズ。
  • 読み取り、書き込み、マップ、完了レコードのための上限付きのコマンドバッファ。
  • 同じタイトルのファイルを開き直す遅延読み取り。
  • 不明なファイル、オーバーフロー、不正なバッファの確認付きの拒否。

まだ足りないこと

  • この経路はコマンドバッファのソフトウェア実行であり、本体の DMA エンジンではありません。
  • 書き込み可能なパッケージファイルは /app0 の外にあります。セーブはセーブデータのマウントを通ります。
  • 解決処理が見ていないファイルを、識別子だけからでっち上げることはできません。

関連するしくみ

これらのページについて

本文は PS5PCEM リポジトリのアーキテクチャノートと 2026 年 10 月のレポートに基づいています。個別のテストに合格したことは、新しいフレームレートや新しいクリアを意味しません。

すべての技術