NES版Tetrisで新たなコード実行方法が発見
- ハッカーたちが、ゲーム内でNES版Tetrisを再プログラムする方法を発見
- この方法は、ゲーム終了時のクラッシュを避けたいハイスコア挑戦者に役立つ可能性がある
コード実行の方法
- NES版Tetrisの"kill screen"を利用し、メモリを操作する複雑な手法によって、未改造のハードウェアとカートリッジで動作するTetrisのバージョンに新しい挙動をコーディングできる
- Super Mario World、Paper Mario、The Legend of Zelda: Ocarina of Time などのゲームでも、同様の"任意コード実行"グリッチが見つかっている
- NES版Tetrisに外部コードを導入する基本的な方法は、少なくとも2021年から公に理論化されていた
- この方法は、Tetrisのハイスコアテーブルを機械語コード命令として読み始める手順を詳しく説明している
コントローラーポートを使った仕組み
- NES版Tetrisのクラッシュは、ゲームのスコア処理ルーチンがフレーム間で新しいスコアを計算するのに時間がかかりすぎると発生する
- この遅延が起きると、制御コードの一部が新しいフレーム書き込みルーチンによって中断され、意図しないRAM領域へジャンプして次の命令を探すことになる
- 日本版コンソールであるファミコン上で動作する際、Tetrisが潜在的な入力を処理する方法のおかげで、プレイヤーはこのジャンプを操作できる
ハイスコアテーブルでコーディングする
- Displaced Gamers のジャンプ制御手法では、プレイヤーは3つ目のコントローラーで「上」を、4つ目のコントローラーで右、左、下を押し続ける必要がある
- これにより、ジャンプコードはゲームのハイスコア一覧の名前とスコアを保存するRAM領域へ送られ、プレイヤーが直接操作できるより大きなRAM領域が得られる
- ハイスコアテーブルの対象部分に"(G"を入れると、ゲームはハイスコアテーブルの別の領域へジャンプするよう強制される
- ここで名前とスコアが、NES CPU向けのopcodeとして順番に読み込まれ始める
- ただし、名前入力領域で使える記号は43個、ハイスコアの一部にできる数字は10個しかないため、利用可能なNESのopcode命令のうち一部しかハイスコアテーブルに"コーディング"できない
- バッテリーバックアップの保存システムがないため、ハッカーはTetrisを起動するたびに、これらのハイスコアを手動で達成し、複雑な名前を入力しなければならない
GN⁺の見解
- NES版Tetrisにこのような隠れた挙動があったというのは驚きだ。当時は発見されなかったようで、数十年たった今になって見つかった点が実に興味深い。
- ファミコンの拡張ポートを活用してこの種のハックが可能だったという点も面白い。任天堂が意図した機能ではないだろうが、NESと比べて機能が豊富なファミコンの特徴が表れているように思える。
- こうしたバグを利用して、逆にクラッシュを防ぐコードを書き込むという発想も実に巧妙だ。理論上はゲームプレイを継続できるため、ハイスコア挑戦には大きな助けになりそうだ。
- ただし、この方法を使うにはゲームを始めるたびに複雑な設定が必要になるため、不便そうではある。実際に使うなら、もう少し自動化する方法が必要かもしれない。
- おそらくこの方法は、普通にゲームを楽しみたい一般ユーザーよりも、ハイスコアに挑戦する愛好家やプログラミングに関心のある人々に訴求しそうだ。広く普及するのは難しそうに見える。
1件のコメント
Hacker Newsの意見
要約: