パターン
パターンとは、ゲームが繰り返しやることだ。ここにあるものはどれも、コードが走っている間にしたことについての規則で見つけたもので、バイトがどう見えるかでは決して見つけない。証拠が無いときは、何も名付けない。
数は注意して読むこと。サウンドドライバと画面メモリへの書き手がすべてのゲームで見つかるのは、その規則が「一番多くやったルーチン」を選ぶからで、そういうルーチンは必ず一つある。ほかのものは、証拠があった所でだけ見つかる。
パッドの読み取り
コントローラを読むルーチン。したことで名付ける: 走ったフレームごとに、パッドのポートをボタン一つにつき一回、少なくとも八回読んだ。
19 本すべてのゲームで見つかった。ルーチンは 38 個。
待機のループ
自分自身へ跳ぶ一つの命令。メインのプログラムは次のフレームまですることが無く、ここで待つ。
19 本のうち 4 本で見つかった。ルーチンは 4 個:
数える待機ループ
出口の無い輪になった数個の命令で、メモリの一バイトを変えることしかしない。待機のループと同じく、メインのプログラムはフレームの間ここに居る。そのバイトは、読む側にとっては乱数も同然だ。どこまで進んだかは、そのフレームの仕事にかかった時間で決まるからだ。
19 本のうち 4 本で見つかった。ルーチンは 4 個:
割り込みの中のゲーム
メインのプログラムが待つだけのとき、ゲームのすべては、映像チップがフレームごとに一度起こす割り込みのハンドラの中で走る。待機のループか数える待機ループがあり、ハンドラがフレームの半分以上で走ったとき、そのハンドラをこう名付ける。
19 本のうち 8 本で見つかった。ルーチンは 8 個:
フレーム待ち
メモリの一バイトを読んで調べることだけを繰り返すループ。ループの中の何ものもそのバイトを変えられないので、映像チップがフレームごとに一度起こす割り込みがそれを変えるまで、ゲームはそこに留まる。その割り込みのハンドラ、またはハンドラが呼ぶルーチンがそのバイトに書いたとき、ループをこう名付ける。ゲームはこうした待ちを何か所にも持つことがあり、待つ相手は旗のこともあれば、ハンドラが減らしていくカウンタのこともある。待ちの一周ごとに小さな用事を済ませるゲームもある。
19 本のうち 12 本で見つかった。ルーチンは 37 個:
ジャンプエンジン
次にどこへ行くかを選ぶために、ほかのコードが呼ぶルーチン。呼び出しの直後にアドレスのテーブルが続き、エンジンは番号でそこを通って跳ぶ。そうした呼び出しが届くルーチンとして名付け、それぞれのテーブルは、走行が項目を選ぶのを見た範囲まで書き出す。
19 本のうち 15 本で見つかった。ルーチンは 23 個:
- Blades of Steel (USA)
- Double Dribble (USA) (Rev 1)
- Goonies II, The (USA)
- Legend of Zelda, The (USA) (Rev 1)
- Metroid (USA)
- Mike Tyson's Punch-Out!! (Japan, USA) (En)
- Ninja Gaiden (USA)
- Paperboy (USA)
- Q-bert (USA)
- Super Mario Bros. + Duck Hunt (USA)
- Super Mario Bros. 2 (USA) (Rev 1)
- Super Mario Bros. 3 (USA) (Rev 1)
- Teenage Mutant Ninja Turtles (USA)
- Tetris (USA)
- Zelda II - The Adventure of Link (USA)
バンク切り替え
カートリッジ自身のアドレス範囲へ書き込んだルーチン。そこにレジスタを持つ基板では、その書き込みが、コンソールに見えるプログラムの部分を選ぶ。
19 本のうち 18 本で見つかった。ルーチンは 139 個:
- Battle Chess (USA)
- Blades of Steel (USA)
- Blaster Master (USA)
- Double Dribble (USA) (Rev 1)
- Fester's Quest (USA)
- Goonies II, The (USA)
- Legend of Zelda, The (USA) (Rev 1)
- Metroid (USA)
- Mike Tyson's Punch-Out!! (Japan, USA) (En)
- Ninja Gaiden (USA)
- Paperboy (USA)
- Q-bert (USA)
- Super Mario Bros. + Duck Hunt (USA)
- Super Mario Bros. 2 (USA) (Rev 1)
- Super Mario Bros. 3 (USA) (Rev 1)
- Teenage Mutant Ninja Turtles (USA)
- Tetris (USA)
- Zelda II - The Adventure of Link (USA)
画面メモリへの書き手
画面メモリへ書いたルーチンのうち、ほとんどのフレームで走ったものの中で最も多く書いたもの。証拠は、その書き込みのうち絵と絵の間のブランクに入った数と、描画中に入った数を言う。
19 本すべてのゲームで見つかった。ルーチンは 19 個。
パレットの書き手
画面メモリのアドレスがパレットを指している間に書き込んだルーチン。ゲームが設定するアドレスを追うので、どの書き込みもどこかに着地する。
19 本すべてのゲームで見つかった。ルーチンは 30 個。
スプライトの書き手
コンソールが毎フレーム、スプライトの表へ写すメモリのページに書き込んだルーチン。動くものを画面に置くのはこれらのルーチンだ。
19 本すべてのゲームで見つかった。ルーチンは 178 個。
スクロールの書き手
走ったすべてのフレームで、ブランクの間にスクロールを設定したルーチン。
19 本すべてのゲームで見つかった。ルーチンは 20 個。
画面の分割
絵が描かれている間に映像チップのステータスを一フレームに何度も見張り、それからそこでスクロールを動かすルーチン。スクロールする画面の上でステータスバーが止まっていられるのは、このためだ。
19 本のうち 6 本で見つかった。ルーチンは 9 個:
サウンドドライバ
音源チップのレジスタへ書いたルーチンのうち、ほとんどのフレームで走ったものの中で最も多く書いたもの。
19 本すべてのゲームで見つかった。ルーチンは 19 個。
乱数のバイト
ルーチンが毎フレーム、自分自身から書き直すメモリ。そのバイトへの回転と、同じルーチンのどこかにある排他的論理和を伴う。ゲームのさいころだ。
19 本のうち 8 本で見つかった。ルーチンは 11 個:
二つのものを比べる所
画面上の別々の二つのものの位置を、比べるか引き算するルーチン。それぞれの値を、読み込まれた元のメモリのバイトから、ゲームが写していく先々を通して追い、どのバイトがスプライトの位置になるかを見る。そのうえで、そうしたバイトの二つが出会うルーチンを名付ける。当たり判定の心臓部だ。敵がプレイヤーはどちら側かを知る方法でもあり、ゲームが描くものを奥行きの順に並べる方法でもある。この規則はそれらを区別しない。
19 本のうち 8 本で見つかった。ルーチンは 18 個: