>_ DevTrendsja

言語

ホーム

言語

セクション

フロントエンド バックエンド モバイル DevOps AI / ML ゲーム開発 ブロックチェーン 組み込み セキュリティ
C

ReXGlueでXbox 360ゲームをネイティブC++にポーティング

Xbox 360のようなコンソールのエミュレーションは、常に高いCPU負荷がボトルネックとなってきました。8スレッドのPowerPC Xenonは、その場で命令を翻訳するためだけに相当なハードウェアを必要としていました。Xeniaプロジェクトの開発者は素晴らしい仕事をしましたが、最新のPCでもCPU負荷はまだ顕著です。

リバースエンジニアリングコミュニティは、別のアプローチを採用しています:静的リコンパイルです。ゲームプレイ中にコードを翻訳するのではなく、ユーティリティがコンソールの実行ファイルを1パスで標準的なC++ソースコードに変換し、ターゲットプラットフォーム用にネイティブにコンパイルします。

これ正是倒にReXGlueプロジェクトが行っていることです。

静的リコンパイルとは

エミュレータがリアルタイムで実行されると、PowerPC命令のデコード、レジスタ管理、コンソールアーキテクチャのシミュレーションを継続的に行なう必要があります。静的リコンパイラは事前にバイナリを処理し、命令を分析して同等のC++コードを生成します。

次にClangやMSVCのような標準コンパイラが引き継ぎ、生成されたコードを特定のプロセッサに最適化して、利用可能なすべてのx86-64またはARM64命令を活用します。結果は標準的なネイティブアプリケーションになります。

このアプローチは翻訳のオーバーヘッドを完全に排除します。ゲームはPCの能力を直接活用し、はるかに少ないリソースで動作します。

ReXGlueの構成

プロジェクトの開発者は、Xeniaチームの調査研究成果と、XenonRecompおよびrexdexツール開発者の成果に基づいていることを明示的に認めています。

ReXGlueのアーキテクチャは2つのコンポーネントに分けられます:

  • Xbox 360バイナリを読み込んでC++関数を生成する解析ツール。
  • コンソールのシステムコール、メモリ管理、入出力操作を処理するランタイムライブラリ(SDK)。

リポジトリには、ランタイムとビルドラッパーが含まれています。ソースコード自体はCおよびC++で書かれています。

このプロジェクトは、Windows(amd64)およびLinux(amd64、arm64)のビルドをサポートしています。ARM64ビルドは特に注目に値します——フレームレートのペナルティなしに、ハンドヘルドコンソールやシングルボードコンピュータでリコンパイルされたゲームを動作させることが可能になります。

現在の状態と制限事項

開発者はプロジェクトの初期段階であることを明示しています。パブリックAPIは頻繁に変更され、一部の機能は未完成のままです。コンパイルされたゲームを1クリックで実行可能なバイナリに変換することはまだできません。

静的リコンパイルには一般的に多くのニュアンスがあります。バイナリには間接ジャンプやパックされたデータが含まれていることが多く、自動翻訳ツールはヒントなしに関数の境界を独立して判断できない場合があります。そのため、ポーティングプロセスでは各タイトルごとにゲーム固有の設定を作成する必要があります。

現在、リポジトリには約750個のスターがあります。コミュニティはDiscordサーバーとGitHubのリリースセクションを中心に形成されており、開発者はそこでナイトリービルドを公開しています。

ツールの対象者

現時点では、このツールを使って数分でXbox 360のゲームを動作させることはできません。しかし、このプロジェクトは以下の人々にきっと興味を持たれるでしょう:

  • PowerPC実行ファイルの構造を研究しているリバースエンジニアや研究者。
  • あるISAから別のISAへのコード生成の実用的な例を探しているコンパイラおよび翻訳ツール開発者。

CLIと設定ファイルの操作詳細な手順については、リポジトリのWikiを参照してください。ソースコード自体はGitHubのrexglue/rexglue-sdkリポジトリで入手できます。

関連プロジェクト