ゲームボーイからニンテンドーDSまでの任天堂製携帯ゲーム機に対応する、Go言語製エミュレーター『guac』のバージョン0.0.4が公開されました。
今回のアップデートでは、ゲームボーイアドバンスのCPUや各種サブシステムをサイクル単位で再現する新たなGBAコアを搭載。これまで動作が難しかったテストROMやゲームへの対応が進められています。
●guac公式サイト
https://guacemulator.com/
●guac(GitHub)
https://github.com/aabalke/guac
Go言語で作られたマルチエミュレーター
『guac』は、ゲームボーイ、ゲームボーイカラー、ゲームボーイアドバンス、ニンテンドーDSに対応するオープンソースエミュレーターです。エミュレーターの多くはCやC++などで開発されていますが、本作ではGoogleが開発したプログラミング言語「Go」が使用されています。
現時点ではWindowsとLinux向けのプリコンパイル済み実行ファイルが配布されており、BIOSやファームウェアを用意しなくてもゲームを起動できます。実機から吸い出したBIOSなどを使用することも可能です。
メニューを含むコントローラー操作や、機種ごとの入力設定にも対応。ユーザーインターフェースの配色、ホットキー、ニンテンドーDSの画面配置なども変更できます。
GBAのCPUや周辺機能をサイクル単位で再現
バージョン0.0.4では、GBAエミュレーションの精度が大幅に強化されました。開発者によると、GBAのCPUだけではなく、周辺のサブシステムについてもサイクル単位での動作を再現しており、多数のテストROMやゲームが新たに動作するようになったとのことです。
サイクル精度のエミュレーションでは、命令の実行結果だけではなく、それぞれの処理が何クロック目に行われるかというタイミングまで再現します。
処理の順番やタイミングに依存するゲームでは、一般的な命令単位のエミュレーションで画面表示や音声、ゲーム進行に問題が起きる場合があります。サイクル単位で実機の挙動に近付けることで、こうした互換性問題の改善が期待できます。
ただし、現時点では開発者が「サイクル精度」と説明している段階であり、すべてのGBAソフトや実機テストに対する第三者検証が完了したわけではありません。
難関の「Classic NES Series」も動作
今回の発表では、新たに動作するようになった例として、GBA向けに発売された「Classic NES Series」が挙げられています。
これはファミコンソフトをGBA上で再現したシリーズで、日本では「ファミコンミニ」の名称で展開されていました。『スーパーマリオブラザーズ』『ゼルダの伝説1』『メトロイド』などが、GBAカートリッジとして発売されています。
これらのタイトルは、GBA上でファミコンを再現する独自の仕組みを使用しており、開発者はエミュレーション上の難関タイトルとして紹介しています。
このほか、ゲーム内時計に利用されるRTCや、『ボクらの太陽』シリーズなどで使用された太陽センサーのエミュレーションにも対応しています。
初代ゲームボーイのソフトをゲームボーイカラー環境で動かすモードに加えて、ゲームボーイカラー用ソフトを初代ゲームボーイ環境として動かす組み合わせもサポートされました。
ニンテンドーDS向けの独自JITも搭載
『guac』ではGBAだけではなく、ニンテンドーDSのエミュレーションにも独自の技術が使用されています。
ニンテンドーDS用コアには、Go言語向けに開発された独自JITコンパイラーを搭載。エミュレートしているCPU命令を実行時にホスト側のコードへ変換することで、処理内容によってはCPUエミュレーションが2~5倍高速化すると説明されています。
このJITは、生成したコードからGoの関数を呼び出せるように設計されているほか、開発者によればGo言語で作られた初のARM64対応JITでもあるとのことです。ユニークな機能として、ニンテンドーDSの3DシーンをOBJ形式で書き出す機能も搭載。書き出したデータは、BlenderやMayaなどの3Dソフトで読み込めます。
低性能機やAndroidへの対応は今後の課題
PC向けとしては開発が進んでいる一方、低性能な機器ではまだ十分な速度が出ない場合があります。開発者のRedditでの説明によると、Raspberry Pi 4BではGBAが毎秒40~50フレーム、3Dを使用するニンテンドーDSソフトは毎秒10~20フレーム程度とのことです。
使用しているライブラリー自体はAndroidにも対応していますが、現在はGBAとニンテンドーDSの処理速度が十分ではないため、Android版の提供は見送られています。今後、描画処理を最適化したあとにAndroid対応が検討される予定です。
『guac』はまだバージョン0.0.4という若いプロジェクトで、対応機能やパフォーマンスには発展途上の部分が残されています。
それでも、Go言語だけでゲームボーイからニンテンドーDSまでを再現し、GBAではサイクル精度のコア、DSでは独自のARM64対応JITを実装している点はかなりユニークです。今後、既存のエミュレーターにどこまで精度や速度で近付けるのか注目したいところです。
via.Reddit















ダンジョンズ&ドラゴンズ ビジュアル大全 半世紀を超えるその歴史とアート









ゲームコンソール2.0