Tetris (USA)
Tetris (USA) は MMC1 の基板に載り、プログラムは 32,768 バイト。電源投入から 6,400 歩のクロールが、新しいコードを見つけた道筋を 54 本残した。それらを 181,254 フレームにわたって再生すると、プログラムのうち 6,318 バイト、19 パーセントが実行された。
規則が名付けたもの
- パッドの読み取り: 2
- フレーム待ち: 4
- ジャンプエンジン: 1
- バンク切り替え: 7
- 画面メモリへの書き手: 1
- パレットの書き手: 3
- スプライトの書き手: 5
- スクロールの書き手: 2
- サウンドドライバ: 1
- 乱数のバイト: 1
走行が入った 121 個のルーチン
ゲームのコードに入った場所のすべて。呼び出し、割り込み、テーブル経由のジャンプのどれかで入る。規則が名付けたものを先に、規則が見たものと一緒に並べる。それらのリスティングでの名前は、何であるかを言う: poll (読み取り)、engine (エンジン)、drain (書き出し)。
| 場所 | リスティングでの名前 | 入り方 | 回数 | 何であるか、その証拠 |
|---|---|---|---|---|
| $AC82 (バンク 0) | b0_engine_AC82 | 呼び出し | 194,840 | ジャンプエンジン: テーブル 4、そこを通った跳躍 194,840 |
| $AB69 (バンク 0) | b0_poll_AB69 | 呼び出し | 110,004 | パッドの読み取り: ポート $4016、一フレームの読み 16、一フレームのストローブ 4 パッドの読み取り: ポート $4017、一フレームの読み 16、一フレームのストローブ 4 |
| $AC6A (バンク 0) | b0_sprites_AC6A | 呼び出し | 60,749 | スプライトの書き手: 走ったフレーム 54,948、スプライトのページへの書き込み 15,521,454 |
| $AB47 (バンク 0) | b0_random_AB47 | 呼び出し | 60,684 | 乱数のバイト: 走ったフレーム 55,002、バイト $0017,$0018、回転 2、排他的論理和 1 |
| $8005 (バンク 0) | b0_nmi | 毎フレーム(NMI) | 55,002 | スクロールの書き手: 走ったフレーム 55,002、ブランク中の書き込み 109,960 |
| $E000 (バンク 1) | b1_sound_E000 | 呼び出し | 55,002 | サウンドドライバ: 走ったフレーム 54,734、書き込み 55,002 |
| $82B1 (バンク 0) | b0_dispatch_82B1 | テーブル | 37,643 | スクロールの書き手: 走ったフレーム 37,643、ブランク中の書き込み 75,286 |
| $9725 (バンク 0) | b0_drain_9725 | 呼び出し | 36,688 | 画面メモリへの書き手: 走ったフレーム 9,172、書き込み 26,800、ブランク中 26,800、描画中 0 |
| $8C27 (バンク 0) | b0_sprites_8C27 | 呼び出し | 18,224 | スプライトの書き手: 走ったフレーム 11,732、スプライトのページへの書き込み 199,848 |
| $ACB7 (バンク 0) | b0_bank_ACB7 | 呼び出し | 9,574 | バンク切り替え: 書き込み 47,870、ブランク中 1,100、描画中 46,770 |
| $ACCB (バンク 0) | b0_bank_ACCB | 呼び出し | 9,574 | バンク切り替え: 書き込み 47,870、ブランク中 1,100、描画中 46,770 |
| $94EE (バンク 0) | b0_dispatch_94EE | テーブル | 9,360 | パレットの書き手: 走ったフレーム 9,360、書き込み 9,360 |
| $8A0A (バンク 0) | b0_sprites_8A0A | 呼び出し | 9,304 | スプライトの書き手: 走ったフレーム 9,304、スプライトのページへの書き込み 150,282 |
| $8BCE (バンク 0) | b0_sprites_8BCE | 呼び出し | 9,304 | スプライトの書き手: 走ったフレーム 9,304、スプライトのページへの書き込み 148,560 |
| $AA98 (バンク 0) | b0_palette_AA98 | 呼び出し | 493 | パレットの書き手: 走ったフレーム 468、書き込み 4,393 |
| $ACA3 (バンク 0) | b0_bank_ACA3 | 呼び出し | 140 | バンク切り替え: 書き込み 700、ブランク中 270、描画中 430 |
| $ACDF (バンク 0) | b0_bank_ACDF | 呼び出し | 54 | バンク切り替え: 書き込み 270、ブランク中 270、描画中 0 |
| $FF00 (バンク 1) | b1_reset | 電源投入 | 54 | バンク切り替え: 書き込み 108、ブランク中 108、描画中 0 スプライトの書き手: 走ったフレーム 9,870、スプライトのページへの書き込み 13,824 |
| $82D1 (バンク 0) | b0_dispatch_82D1 | テーブル | 50 | バンク切り替え: 書き込み 100、ブランク中 0、描画中 100 |
| $83D7 (バンク 0) | b0_dispatch_83D7 | テーブル | 36 | バンク切り替え: 書き込み 72、ブランク中 0、描画中 72 |
| $9808 (バンク 0) | b0_palette_9808 | 呼び出し | 22 | パレットの書き手: 走ったフレーム 22、書き込み 176 |
| $AB8B (バンク 0) | 呼び出し | 110,001 | ||
| $8161 (バンク 0) | 呼び出し | 65,364 | ||
| $819B (バンク 0) | 呼び出し | 65,170 | ||
| $815D (バンク 0) | テーブル | 65,168 | ||
| $804B (バンク 0) | 呼び出し | 55,002 | ||
| $9D51 (バンク 0) | 呼び出し | 55,002 | ||
| $AB5E (バンク 0) | 呼び出し | 55,002 | ||
| $AB9D (バンク 0) | 呼び出し | 55,002 | ||
| $AA2F (バンク 0) | 呼び出し | 54,458 | ||
| $E194 (バンク 1) | 呼び出し | 50,624 | ||
| $E19C (バンク 1) | 呼び出し | 50,624 | ||
| $E1AC (バンク 1) | 呼び出し | 50,624 | ||
| $E1B9 (バンク 1) | 呼び出し | 50,624 | ||
| $E583 (バンク 1) | 呼び出し | 50,624 | ||
| $E5D0 (バンク 1) | 呼び出し | 29,077 | ||
| $E766 (バンク 1) | 呼び出し | 29,077 | ||
| $8174 (バンク 0) | テーブル | 9,304 | ||
| $8186 (バンク 0) | テーブル | 9,304 | ||
| $81B2 (バンク 0) | 呼び出し | 9,304 | ||
| $8776 (バンク 0) | 呼び出し | 9,304 | ||
| $87AE (バンク 0) | 呼び出し | 9,304 | ||
| $8884 (バンク 0) | テーブル | 9,304 | ||
| $9CBF (バンク 0) | テーブル | 9,304 | ||
| $9E16 (バンク 0) | テーブル | 9,304 | ||
| $A37F (バンク 0) | テーブル | 9,304 | ||
| $9874 (バンク 0) | 呼び出し | 9,302 | ||
| $9E27 (バンク 0) | テーブル | 9,302 | ||
| $81CF (バンク 0) | テーブル | 8,367 | ||
| $88AB (バンク 0) | 呼び出し | 8,367 | ||
| $8914 (バンク 0) | 呼び出し | 8,367 | ||
| $89AE (バンク 0) | 呼び出し | 8,367 | ||
| $85DA (バンク 0) | テーブル | 7,999 | ||
| $E735 (バンク 1) | 呼び出し | 7,897 | ||
| $EA41 (バンク 1) | 呼び出し | 5,058 | ||
| $E072 (バンク 1) | 呼び出し | 4,509 | ||
| $E0B5 (バンク 1) | 呼び出し | 4,013 | ||
| $948B (バンク 0) | 呼び出し | 1,733 | ||
| $84AE (バンク 0) | 呼び出し | 1,526 | ||
| $9712 (バンク 0) | 呼び出し | 1,432 | ||
| $E481 (バンク 1) | テーブル | 1,282 | ||
| $E39C (バンク 1) | テーブル | 1,011 | ||
| $9DE8 (バンク 0) | 呼び出し | 824 | ||
| $E04B (バンク 1) | 呼び出し | 668 | ||
| $E3DD (バンク 1) | テーブル | 646 | ||
| $E3B3 (バンク 1) | テーブル | 552 | ||
| $AA45 (バンク 0) | 呼び出し | 544 | ||
| $E9EB (バンク 1) | 呼び出し | 509 | ||
| $EA03 (バンク 1) | 呼び出し | 509 | ||
| $AB21 (バンク 0) | 呼び出し | 493 | ||
| $E637 (バンク 1) | 呼び出し | 446 | ||
| $E271 (バンク 1) | 呼び出し | 363 | ||
| $E425 (バンク 1) | テーブル | 360 | ||
| $E33B (バンク 1) | 呼び出し | 339 | ||
| $9A6B (バンク 0) | テーブル | 309 | ||
| $AA52 (バンク 0) | 呼び出し | 270 | ||
| $AA5F (バンク 0) | 呼び出し | 270 | ||
| $AA6B (バンク 0) | 呼び出し | 270 | ||
| $AA78 (バンク 0) | 呼び出し | 270 | ||
| $AA8A (バンク 0) | 呼び出し | 270 | ||
| $E253 (バンク 1) | 呼び出し | 255 | ||
| $E390 (バンク 1) | テーブル | 217 | ||
| $AA82 (バンク 0) | 呼び出し | 216 | ||
| $AC1C (バンク 0) | 呼び出し | 216 | ||
| $E003 (バンク 1) | 呼び出し | 198 | ||
| $977F (バンク 0) | 呼び出し | 188 | ||
| $9E39 (バンク 0) | テーブル | 178 | ||
| $988E (バンク 0) | テーブル | 142 | ||
| $9CAF (バンク 0) | 呼び出し | 135 | ||
| $9D17 (バンク 0) | 呼び出し | 133 | ||
| $98EB (バンク 0) | 呼び出し | 110 | ||
| $99A2 (バンク 0) | テーブル | 110 | ||
| $E287 (バンク 1) | 呼び出し | 110 | ||
| $E473 (バンク 1) | テーブル | 110 | ||
| $9E07 (バンク 0) | 呼び出し | 107 | ||
| $E247 (バンク 1) | 呼び出し | 104 | ||
| $E6D7 (バンク 1) | 呼び出し | 104 | ||
| $E3CA (バンク 1) | テーブル | 93 | ||
| $9969 (バンク 0) | 呼び出し | 88 | ||
| $E417 (バンク 1) | 呼び出し | 86 | ||
| $E43B (バンク 1) | テーブル | 86 | ||
| $9B03 (バンク 0) | テーブル | 66 | ||
| $9B58 (バンク 0) | テーブル | 66 | ||
| $A3F2 (バンク 0) | テーブル | 66 | ||
| $E3D1 (バンク 1) | テーブル | 66 | ||
| $E384 (バンク 1) | テーブル | 56 | ||
| $8200 (バンク 0) | テーブル | 54 | ||
| $824F (バンク 0) | テーブル | 54 | ||
| $A459 (バンク 0) | 呼び出し | 54 | ||
| $E006 (バンク 1) | 呼び出し | 54 | ||
| $E244 (バンク 1) | 呼び出し | 54 | ||
| $9907 (バンク 0) | 呼び出し | 48 | ||
| $9FF2 (バンク 0) | 呼び出し | 36 | ||
| $85F0 (バンク 0) | テーブル | 22 | ||
| $86DC (バンク 0) | テーブル | 22 | ||
| $87DC (バンク 0) | 呼び出し | 22 | ||
| $E41A (バンク 1) | テーブル | 14 | ||
| $E40E (バンク 1) | テーブル | 10 | ||
| $E42E (バンク 1) | テーブル | 4 | ||
| $9DF6 (バンク 0) | テーブル | 2 | ||
| $E403 (バンク 1) | テーブル | 2 |
待つ場所
規則が名付けたループのうち、ルーチンの内側にあって、それ自身はコードの入口ではないもの。
| 場所 | リスティングでの名前 | 何であるか、その証拠 |
|---|---|---|
| $828D (バンク 0) | b0_wait_828D | フレーム待ち: 待つ相手のバイト $00F5、入った回数 54、周回 6,257、一周ごとの呼び出し 1、フレーム割り込みの下での書き込み 1,987,495、全フレーム 55,254 |
| $A45B (バンク 0) | b0_wait_A45B | フレーム待ち: 待つ相手のバイト $00C3、入った回数 54、周回 13,470、一周ごとの呼び出し 1、フレーム割り込みの下での書き込み 192,960、全フレーム 55,254 |
| $AA37 (バンク 0) | b0_wait_AA37 | フレーム待ち: 待つ相手のバイト $0033、入った回数 54,458、周回 214,054,962、フレーム割り込みの下での書き込み 55,002、全フレーム 55,254 |
| $AA4D (バンク 0) | b0_wait_AA4D | フレーム待ち: 待つ相手のバイト $0033、入った回数 544、周回 2,062,901、フレーム割り込みの下での書き込み 55,002、全フレーム 55,254 |
ジャンプに使うテーブル
ゲームがその中から一つを選ぶ、アドレスのテーブル。ジャンプエンジンへの呼び出しの直後にあるものもあれば、カートリッジのどこかにあるものもある。後者は、ゲームが通って跳んだアドレスがどこから読み込まれたかで見つける。アドレスを積んでそこへ戻ることで跳ぶゲームもあれば、テーブルを二つに分けて、アドレスの下位バイトをある場所に、上位バイトを別の場所に置くゲームもある。どちらも同じやり方で見つける。項目は、走行が選ぶのを見た所までを数える。本当のテーブルはもっと長いかもしれない。最後の列は、その値が項目を選んだメモリのバイトで、追えた場合だけ書いてある: ゲームのモードか、物体の一つが今していることだ。
| 場所 | 届き方 | 項目 | 選ばれた数 | 選んだバイト |
|---|---|---|---|---|
| $8050 (バンク 0) | 呼び出しの直後 | 4 | 3 | $00BD |
| $8166 (バンク 0) | 呼び出しの直後 | 7 | 6 | $00C0 |
| $81A0 (バンク 0) | 呼び出しの直後 | 9 | 9 | $00A7 |
| $81B7 (バンク 0) | 呼び出しの直後 | 10 | 8 | $0068 |
| $E015 (バンク 1) | ポインタ経由 | 20 | 15 |
ルーチンが共有するメモリ
あるルーチンが書き、別のルーチンが読んだメモリは 449 バイト。添字を通して届いた場所は 47 か所で、メモリの中のテーブルや、物体の枠の並びはそう見える。
添字で届いた範囲: 位置を含むもの、次いで最も長いもの
| 起点 | 届いたバイト | 命令 | 含まれる位置 |
|---|---|---|---|
| $0400 | 201 | 4 | |
| $0500 | 201 | 2 | |
| $0700 | 80 | 2 | |
| $0200 | 32 | 10 | |
| $0040 | 32 | 2 | |
| $0060 | 32 | 2 | |
| $0000 | 25 | 2 | |
| $0001 | 24 | 1 | |
| $0730 | 21 | 3 | |
| $03EF | 16 | 1 | |
| $03F0 | 13 | 3 | |
| $03F1 | 13 | 1 |
最も忙しい共有バイト 24 個
| バイト | 読み書き | 書くルーチン | 読むルーチン |
|---|---|---|---|
| $0001 | 20,022,880 | 6 | 6 |
| $0000 | 20,021,494 | 6 | 6 |
| $00F5 | 3,633,963 | 5 | 6 |
| $0040 | 641,258 | 4 | 6 |
| $0060 | 614,130 | 3 | 3 |
| $00A7 | 307,410 | 6 | 6 |
| $00E0 | 242,904 | 6 | 6 |
| $00F7 | 210,524 | 3 | 5 |
| $00ED | 204,165 | 5 | 6 |
| $00C0 | 195,843 | 6 | 6 |
| $06F1 | 152,551 | 6 | 3 |
| $0017 | 152,200 | 2 | 5 |
| $06F5 | 152,089 | 3 | 3 |
| $06F0 | 151,980 | 2 | 3 |
| $06F2 | 151,980 | 2 | 3 |
| $06F3 | 151,980 | 2 | 3 |
| $00B1 | 122,500 | 2 | 6 |
| $00FB | 110,112 | 1 | 2 |
| $00FF | 109,104 | 6 | 6 |
| $0049 | 85,525 | 6 | 6 |
| $06FD | 80,316 | 3 | 4 |
| $00A0 | 77,429 | 5 | 3 |
| $00A1 | 77,429 | 5 | 3 |
| $00EE | 73,296 | 2 | 5 |
このページはゲームのバイトを一つも見せない。これらの数を読み取ったリスティングは、カートリッジと一緒に留まる。