2026-10-27 · ← ニュース
Geminiがカンファレンスバッジ用にゲームボーイのエミュレーターを書いた だが最も手強いバグを見つけたのは本物のゲームだった
Steve FranciaはGeminiの助けを借り、GitHub Universeのバッジ上で、1フレーム16.6 msに収まるNESとゲームボーイカラーのエミュレーターを動かした。ループの下書きはモデルが担い、設計とハードウェアでの計測、ゼルダやポケモンでのバグ探しは人間が担った。
画像を読み込めませんでした。
今年のGitHub Universeでは、首から下げたバッジでゼルダが遊べる。かつてGoogleでGo言語を率いたSteve Franciaが、Geminiの助けを借りてバッジ上でNESエミュレーターを動かし、さらにゲームボーイとゲームボーイカラーにも対応させた。昨年も同様のバッジをハックしたSimon Willisonが、この取り組みを紹介した。
RP2350搭載のバッジで『夢をみる島』が60フレームで動く
バッジの名前はBadger。230 MHzで動くデュアルコアのRP2350チップ、320 × 240ピクセルのカラー液晶、16 MBのフラッシュ、8 MBのPSRAMを備える。OSはMicroPythonベースのMonaOS 4.0だ。Franciaはイベントの数日前に、「hack this」と書かれたカードと一緒にバッジを受け取った。
最も手っ取り早いのは、既製のC製エミュレーターを書き込むことだった。Franciaによれば約20分で済むが、そうするとバッジ本来のアプリやBluetoothでの連絡先交換、会場を回る赤外線スタンプラリーが使えなくなる。そこで彼は、MicroPythonの中で動く普通のアプリとしてエミュレーターを作ることにした。ただし通常のMicroPythonは毎秒10万〜20万命令程度しか処理できず、NESにはその約10倍が必要だ。
突破口は、型付きのPythonを直接ARMの機械語に変換するViperモードだった。最初のNESエミュレーターは約1,100行で、作者によればゼルダを毎秒約32フレームで動かせる。ゲームボーイカラーはさらに難しかった。CPUのSM83は512命令あり、NESの56命令とは桁が違う。それでもFranciaは、CPUのエミュレーションが12 ms未満、描画が3 ms未満で、60 Hzの1フレーム16.6 msに収まると報告している。バッジを上下逆さにすると、タッチボタンがコントローラーになる。
ループを書いたのはモデル、判断と計測は人間
ゲームそのものより興味深いのは、Franciaが珍しく細かく説明している役割分担だ。彼によれば、Gemini 4 Argonは6502 CPU、グラフィックチップ、メモリバンク切り替えを説明したプロンプトから内側のループを下書きした。Franciaは4つのメモリポインターを軸にした設計を決め、Viperのカーネルを整え、すべての数値を実機でUSB経由で計測した。残ったバグは、実際に動かして初めてわかる類いのものだったという。
ゲームボーイでは、それが文字どおりの意味で当てはまった。『ポケットモンスター クリスタル』は起動すると枠が空のまま表示された。このゲームはフォントを高速にコピーするため、スタックポインターをROMに向けるからだ。Franciaは、ハードウェアがそんなことを許すとは知らなかったと認めている。『ゼルダの伝説 夢をみる島DX』では、下に歩くと1フレームだけ主人公が半分に割れた。エミュレーターがゲームボーイカラーの倍速モードを考慮していなかったためだ。300 MHzへのオーバークロックを試すと、バッジは完全にフリーズした。
開発者にとっては、ここに実践的な型がある。AIのおかげで、ゲームボーイのハードウェアを知らない人でも、わずかな時間で動くコアにたどり着けた。だが本当の試験は、16.6 msという時間予算と、あらゆる誤った思い込みを容赦なく暴いた90年代のカートリッジの山だった。
Geminiがどれだけコードを書いたか、作者は明かしていない
記事からは、コードのうちどれだけがモデル由来で、Franciaがどれだけ書き直したのかはわからない。ループが動くまでに何回失敗したのかという記録もない。それがない以上、このプロジェクトは、モデルが単独でエミュレーターを書けることの証明というより、熟練エンジニアの見事な実演と見るべきだ。
ありふれた制約もある。バッジにはスピーカーがないため、NES版は音が出ない。コードはオープンソースだが、ゲームは同梱されておらず、各自が合法的に入手したROMを用意する必要がある。カンファレンスバッジ向けの数日楽しめるおもちゃであって、プラットフォームではない。
Viperの技が広まるかは、ほかのバッジハッカー次第
Franciaはリポジトリと、ゲームボーイからNESエミュレーターに逆輸入してそちらも高速化した5つの技を公開した。最初のシグナルは、ほかのバッジ所有者やMicroPythonのコミュニティがそれを取り入れるかどうかだ。
2つ目のシグナルは、仕事の進め方に関わる。似たプロジェクトがプロンプトの記録やモデルが書いたコードの割合を公開するようになれば、昨年のバッジでWillisonがClaude Codeを使って実践したように、AIが本当に何週間も節約した場面と、作業をデバッグに移しただけの場面を比べられるようになる。
Lilithの判定
Geminiはすべてのプロンプトを通過するゲームボーイを書き上げたが、そこへオーキド博士が空っぽの枠を連れて現れた。AIのコードが本当に動くかを知りたいなら、モデルの隣に、説明書を読まず容赦もしない四半世紀前のカートリッジが要る。