PS2の機械語コードをウェブページへ

あるオープンソースのプロジェクトが、PlayStation 2のソフトウェアをブラウザーで動かす新たな方法を示している。ゲーム機全体を従来型エミュレーターで動かすのではなく、ゲームの機械語コードを静的に再コンパイルする手法だ。PS2 Web Recompは、PlayStation 2のEmotion Engine用実行ファイルをC++へ変換し、その出力をWebAssemblyにコンパイルしたうえで、再実装したシステムとハードウェアの機能にリンクする。グラフィックスの描画にはWebGPUを使う。

開発者によれば、リポジトリにゲームのデータは含まれていない。利用者は自分が所有するゲームのディスクイメージを用意し、その後、プロジェクトのスクリプトでウェブページをローカルに構築する必要がある。この線引きにより、リポジトリは市販ゲームのファイルを配布する経路ではなく、技術的なツールキットとなっている。

システムの最初の動作立ち上げには『グランツーリスモ4』が使われた。同作は2基のベクトルユニットの両方、特殊な浮動小数点の挙動、描画済みの画像を別の形で解釈し直すグラフィックス技法に依存するため、難度の高い試験となる。プロジェクトが公表した結果によれば、現在は起動からメニュー、レースまで進み、効果音、音楽、ブラウザー上でのメモリーカード保存も動作する。PAL版のレースでは、ノートパソコンの内蔵グラフィックスを使い、Chrome上で元の2倍の解像度において、目標の毎秒50フレームに達した。

次に『God of War II』を、ゲーム固有のコードを使わず、同じスクリプトで処理した。この2本目の試験では、再コンパイル、ベクトルユニットのタイミング、入出力プロセッサーの実装で、それまで見つかっていなかった不足が明らかになった。開発者は、同程度のハードウェアで、激しい戦闘中もゲーム機本来の解像度では毎秒60フレーム、その2倍の解像度では毎秒48〜60フレームを記録したと報告している。

ゲーム機特有の動作を再構築

プロジェクトは、R5900プロセッサーの128ビットレジスター、分岐遅延スロット、非標準的な浮動小数点の挙動など、ゲームが前提とするアーキテクチャーの細部を保持する。スレッド、セマフォ、割り込み、ゲーム機の入出力プロセッサーとの通信といったOSの機能もモデル化する。ゲーム側が提供する音声、ディスクアクセス、コントローラー、メモリーカード用のモジュールはR3000インタープリターで動かし、その周辺のライブラリーは再実装している。

Graphics Synthesizerのメモリーは、本来の配置形式のままGPU上に保持される。WebGPUのコンピュートシェーダーで、テクスチャー処理、パレット、ブレンディング、深度テストを再現する一方、ソフトウェアラスタライザーを出力確認の基準として用いる。実行環境では、SPU2音声システムと、ゲーム機のMPEG-2動画デコーダーも再実装している。

性能改善では、GPUへのディスパッチ回数を減らし、繰り返し行うテクスチャーのアップロードをキャッシュし、エミュレーション処理をページのメインスレッドから移した。その成果は、まだ開発者によるプロジェクトの段階にあるものの、意欲的なブラウザー実行環境となっている。事前変換と現代のウェブグラフィックスを組み合わせれば、従来型の完全なエミュレーターを一式にまとめなくても、複雑なゲーム機のソフトウェアを実用的に動かせることを、すでに示している。