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

AMPR カウンター

PS5PCEM の AMPR は、本体のカウンターと完了コマンドを、プロセス内のソフトウェアでモデル化したものです。128 個のカウンターが、送信順に書き込み、アトミックなフィールド更新、ペアの読み取り、マスク付きの待機を受け付けます。

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

タイトルが AMPR を何に使うか

本体の AMPR は、ファイルのデータを移動し、CPU と GPU が待機できるカウンターを更新する非同期エンジンです。ゲームはこれを使って、共有変数をスピンせずに、読み取りが届いたことや後のパスを開始してよいことを知ります。PS5PCEM は AMPR のハードウェアブロックをエミュレートしません。タイトルが組み立てたコマンドストリームをプロセス内で実行し、タイトルが登録した AMPR のイベントキューを通じて完了を伝えます。

カウンターバンクは 32 ビットのワードを 128 個持ちます。ペアは偶数番のカウンターと次のワードで、ひとつの 64 ビット値として読み書きされます。ひとつのロックが両方の半分とすべての読み取り・変更・書き込みを覆うので、読み手がちぎれたペアを観測することはありません。アクセスはペア全体、32 ビットのワード、どちらかの 16 ビットの半分、4 バイトのいずれかを指定できます。

書き込み、待機、タイムスタンプ

書き込みは、選んだフィールドに対する代入、ビット単位の OR、補数との AND、XOR、または折り返しのある加算です。待機は、そのフィールドをマスクの下で参照値と比較します。比較は、等しい、大きい、小さい、等しくない、到達したシーケンス値、そして大きい/小さいの符号付きの形です。シーケンスの比較はフィールドの符号ビットを 63 ビット目にシフトするため、同じ規則が 8、16、32、64 ビットで動きます。

すでに満たされている待機はその場で完了します。満たされていない待機は送信時のスナップショットを保持し、そのストリームのその後の書き込みとイベントより前に再開します。値が同じゲストスレッドの後の送信から来る場合も同様です。通常の API と _04_00 の API は引数リストが別々です。タイムスタンプはカウンターのコマンドとともに記録されます。タイトルがインポートしていた完了サイズの問い合わせは登録済みなので、これらの呼び出しは解決されます。

この経路で観測されたこと

本物のエクスポート面を通した呼び出しを含め、AMPR に絞ったテスト 22 件が ReleaseSafe で合格しています。Grand Theft Auto III の起動では 10,000 回を超える APR のファイル読み取りの送信と 350 件を超える AMPR の完了イベントが発生し、この経路で該当する AMPR のエラーはありません。この起動自体はカウンターの API を呼びません。カウンターの処理は、テストと、実際に値を待つタイトルでカバーされています。

これはエミュレーターが実行するコマンドの API カバレッジです。本体のメモリーコントローラーのサイクル単位のモデルではなく、ハードウェアのタイミングを主張するものでもありません。

実装済みのこと

  • 一貫した 64 ビットのペアと、バイト、ハーフ、ワードのフィールドを持つ 128 個のカウンター。
  • 代入、OR、補数との AND、XOR、折り返しのある加算、そしてマスク付き・符号付きの待機。
  • コマンドストリーム内の位置を保ち、値が届くと再開するブロックされた待機。
  • 登録された AMPR のイベントキューを通じて届く、順序どおりの完了。

まだ足りないこと

  • WaitOnAddress はまだプレースホルダーです。
  • 本物の AMPR ブロックのハードウェアのタイミングは再現していません。
  • デコーダーが認識しないカウンターのコマンドを、黙って成功として扱うことはありません。

関連するしくみ

これらのページについて

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

すべての技術