ゲームボーイ、ブラウザで「速く」なった仕組み

エンタメ・カルチャー

iPhoneなどのJITコンパイルが制限される環境でも、WebAssembly(WASM)を使うことで、かつて人気を博したゲームボーイのエミュレータを、ネイティブで動かす「インタプリタ」(命令を一行ずつ解釈する方式)よりも速く動かせる道が開けました。

これは、Webブラウザの技術を応用した、ゲームボーイエミュレータ「WATaBoy」の開発で示された、まさにデジタル考古学的な発見です。1989年に任天堂から発売されたゲームボーイは、そのシンプルさと携帯性で世界中を熱狂させました。今でも多くのファンに愛されていますが、そのゲームを現代のデバイスで遊ぶにはエミュレータが使われます。

通常、エミュレータを速く動かすには、CPUが直接理解できる「ネイティブコード」をその場で生成する「JITコンパイル」という技術が使われます。しかし、iOSのような一部のOSでは、セキュリティ上の理由からこのJITコンパイルが厳しく制限されているんです。

ここで登場するのがWebAssembly(WASM)です。WASMは、Webブラウザ上で動く、軽量で高速なバイナリ形式のコード。ブラウザに搭載されたJavaScriptエンジンなどが、このWASMを効率的にJITコンパイルしてくれるのです。WATaBoyの開発者は、このブラウザの仕組みを借りて、ゲームボーイのCPU命令をWASMのコードに変換しました。

驚くべきことに、この「WASMへのJITコンパイル」は、ネイティブ環境で動くインタープリタ(コードを一行ずつ解釈して実行する方式)よりも、ゲームボーイの処理を高速に実行しました。これは、ブラウザの洗練されたJITコンパイラが、WASMを極めて効率的にネイティブコードへ変換してくれるおかげです。まるで、古い機械を最新の工場で組み立て直したようなものです。

さらに、ゲームボーイのようなCPUでも、タイミングまで正確に再現する「サイクルアキュレート」なエミュレーションにJITコンパイルを導入するのは、割り込み処理などの複雑さが伴い、容易ではありません。しかし、WATaBoyは、先行する「GameRoy」というエミュレータが開発した、割り込み発生を予測するなどの改善技術をWASM JITに応用することで、この難問をクリアしました。

この「JIT-to-Wasm」というアプローチは、CPUエミュレータ開発の新たな可能性を示しています。かつて限られた環境でしか動かなかったゲームが、Web技術の進化によって、より多くの場所で、より快適に遊べるようになる。これは、デジタル遺産が現代に息づく、興味深い一例と言えるでしょう。


関連記事


参考にした情報源: humphri.es

コメント

タイトルとURLをコピーしました