解決策
2017年1月、バージニア州ハーンドンで開催されたAwesome Games Done Quickで、ツール支援型スピードランのロボットであるTASBotは、市販のスーパーファミコン上で『スーパーマリオ64』とValveの『Portal』をプレイしているかのように見せ、その後、本体を経由して中継されるライブSkype通話へと移行した。マシンの内部は一切改造されておらず、すべてはコントローラーポートから毎秒数千回のボタン入力として届けられ、その様子はTwitchで約20万人が視聴した。
その手法は「完全制御」であった。『スーパーマリオブラザーズ3』や『ロックマン』などで知られるグリッチを悪用し、バッファオーバーフローによってメモリへ侵入し、次いでコントローラー入力ストリームを生のアセンブリオペコードとして読み込むローダーをブートストラップする。数か月前、チームの主催者であるAllan Cecil(dwangoAC)は中国のGeekpwnカンファレンスで、NESのサウンドチップを通した高品質な音声ストリーミングを披露していた。NES Classicの入力デバイスはPeter Greenwood(micro500)によって製作された。
このデモは実際のエミュレーションを主張したわけではなかった——SNESで本当に『Portal』を動かすことについては「答えは依然としてノーだ」とArs Technicaは書いた——が、その主張を肌で感じさせた。すなわち、毎秒十分な数のボタン入力があれば、25年前のゲーム機が任意の現代ソフトウェアの出力デバイスになり得るということである。
達成したこと
ゲーム機のコントローラーポートをデータバスとして扱う。ボタン入力が生のオペコードとなり、バッファオーバーフローがそのストリームを実行するローダーをブートストラップする。
なぜ機能したのか
バッファオーバーフローのグリッチにより、ロボットはコントローラー入力だけを使ってゲーム機のメモリに任意のコードを書き込むことができた。
毎秒数千回の入力があれば、コントローラーポートは事実上、オペコード・音声・映像を運ぶデータバスとなった。
AGDQでライブ実演したことで、スピードラン用のツールが、ゲーム機はゲームポートを通じて再プログラムできるという公開デモへと変わった。
応用できること
十分な速さで叩き込むことができれば、あらゆる入力チャネルはプログラミングインターフェースになる——何を入力と見なすかの定義を変えることは、新しいハードウェアよりもプラットフォームを大きく広げる。
その後
このランは「Super N64」デモとしてAGDQの伝説に刻まれた。長年にわたりマラソンの名物となったTASBotの完全制御ブロックは、すでに『スーパーマリオブラザーズ3』を1秒未満で「クリア」するなどの偉業を生み出していた。
出典をたどる
出典
- How a robot got Super Mario 64 and Portal 'running' on an SNES Ars Technica · arstechnica.com ·