Tetris (USA)
Tetris (USA) は MMC1 の基板に載り、プログラムは 32,768 バイト。電源投入から 400 歩のクロールが、新しいコードを見つけた道筋を 33 本残した。それらを 32,313 フレームにわたって再生すると、プログラムのうち 5,371 バイト、16 パーセントが実行された。
規則が名付けたもの
- パッドの読み取り: 2
- フレーム待ち: 4
- ジャンプエンジン: 1
- バンク切り替え: 7
- 画面メモリへの書き手: 1
- パレットの書き手: 3
- スプライトの書き手: 5
- スクロールの書き手: 2
- サウンドドライバ: 1
- 乱数のバイト: 1
走行が入った 111 個のルーチン
ゲームのコードに入った場所のすべて。呼び出し、割り込み、テーブル経由のジャンプのどれかで入る。規則が名付けたものを先に、規則が見たものと一緒に並べる。
| 場所 | 入り方 | 回数 | 何であるか、その証拠 |
|---|---|---|---|
| $AB69 (バンク 0) | 呼び出し | 43,322 | パッドの読み取り: ポート $4016、一フレームの読み 16、一フレームのストローブ 4 パッドの読み取り: ポート $4017、一フレームの読み 16、一フレームのストローブ 4 |
| $AC82 (バンク 0) | 呼び出し | 30,073 | ジャンプエンジン: テーブル 4、そこを通った跳躍 30,073 |
| $AB47 (バンク 0) | 呼び出し | 24,059 | 乱数のバイト: 走ったフレーム 21,661、バイト $0017,$0018、回転 2、排他的論理和 1 |
| $AC6A (バンク 0) | 呼び出し | 22,895 | スプライトの書き手: 走ったフレーム 21,628、スプライトのページへの書き込み 5,842,818 |
| $8005 (バンク 0) | 毎フレーム(NMI) | 21,661 | スクロールの書き手: 走ったフレーム 21,661、ブランク中の書き込み 43,298 |
| $E000 (バンク 1) | 呼び出し | 21,661 | サウンドドライバ: 走ったフレーム 21,500、書き込み 21,661 |
| $82B1 (バンク 0) | テーブル | 18,728 | スクロールの書き手: 走ったフレーム 18,728、ブランク中の書き込み 37,456 |
| $8C27 (バンク 0) | 呼び出し | 3,403 | スプライトの書き手: 走ったフレーム 1,977、スプライトのページへの書き込み 28,840 |
| $9725 (バンク 0) | 呼び出し | 2,244 | 画面メモリへの書き手: 走ったフレーム 561、書き込み 3,000、ブランク中 3,000、描画中 0 |
| $ACB7 (バンク 0) | 呼び出し | 711 | バンク切り替え: 書き込み 3,555、ブランク中 650、描画中 2,905 |
| $ACCB (バンク 0) | 呼び出し | 711 | バンク切り替え: 書き込み 3,555、ブランク中 650、描画中 2,905 |
| $94EE (バンク 0) | テーブル | 561 | パレットの書き手: 走ったフレーム 561、書き込み 561 |
| $8A0A (バンク 0) | 呼び出し | 550 | スプライトの書き手: 走ったフレーム 550、スプライトのページへの書き込み 8,811 |
| $8BCE (バンク 0) | 呼び出し | 550 | スプライトの書き手: 走ったフレーム 550、スプライトのページへの書き込み 8,496 |
| $AA98 (バンク 0) | 呼び出し | 296 | パレットの書き手: 走ったフレーム 276、書き込み 2,592 |
| $ACA3 (バンク 0) | 呼び出し | 84 | バンク切り替え: 書き込み 420、ブランク中 165、描画中 255 |
| $ACDF (バンク 0) | 呼び出し | 33 | バンク切り替え: 書き込み 165、ブランク中 165、描画中 0 |
| $FF00 (バンク 1) | 電源投入 | 33 | バンク切り替え: 書き込み 66、ブランク中 66、描画中 0 スプライトの書き手: 走ったフレーム 889、スプライトのページへの書き込み 8,448 |
| $82D1 (バンク 0) | テーブル | 31 | バンク切り替え: 書き込み 62、ブランク中 0、描画中 62 |
| $83D7 (バンク 0) | テーブル | 20 | バンク切り替え: 書き込み 40、ブランク中 0、描画中 40 |
| $9808 (バンク 0) | 呼び出し | 12 | パレットの書き手: 走ったフレーム 12、書き込み 96 |
| $AB8B (バンク 0) | 呼び出し | 43,321 | |
| $804B (バンク 0) | 呼び出し | 21,661 | |
| $9D51 (バンク 0) | 呼び出し | 21,661 | |
| $AB5E (バンク 0) | 呼び出し | 21,661 | |
| $AB9D (バンク 0) | 呼び出し | 21,661 | |
| $E194 (バンク 1) | 呼び出し | 21,642 | |
| $E19C (バンク 1) | 呼び出し | 21,642 | |
| $E1AC (バンク 1) | 呼び出し | 21,642 | |
| $E1B9 (バンク 1) | 呼び出し | 21,642 | |
| $E583 (バンク 1) | 呼び出し | 21,642 | |
| $AA2F (バンク 0) | 呼び出し | 21,338 | |
| $E5D0 (バンク 1) | 呼び出し | 7,397 | |
| $E766 (バンク 1) | 呼び出し | 7,397 | |
| $8161 (バンク 0) | 呼び出し | 3,989 | |
| $815D (バンク 0) | テーブル | 3,873 | |
| $819B (バンク 0) | 呼び出し | 3,873 | |
| $85DA (バンク 0) | テーブル | 2,372 | |
| $E735 (バンク 1) | 呼び出し | 1,976 | |
| $EA41 (バンク 1) | 呼び出し | 1,391 | |
| $E072 (バンク 1) | 呼び出し | 1,379 | |
| $E0B5 (バンク 1) | 呼び出し | 1,256 | |
| $E481 (バンク 1) | テーブル | 756 | |
| $84AE (バンク 0) | 呼び出し | 706 | |
| $8174 (バンク 0) | テーブル | 550 | |
| $8186 (バンク 0) | テーブル | 550 | |
| $81B2 (バンク 0) | 呼び出し | 550 | |
| $8776 (バンク 0) | 呼び出し | 550 | |
| $87AE (バンク 0) | 呼び出し | 550 | |
| $8884 (バンク 0) | テーブル | 550 | |
| $9CBF (バンク 0) | テーブル | 550 | |
| $9E16 (バンク 0) | テーブル | 550 | |
| $A37F (バンク 0) | テーブル | 550 | |
| $9874 (バンク 0) | 呼び出し | 549 | |
| $9E27 (バンク 0) | テーブル | 549 | |
| $81CF (バンク 0) | テーブル | 530 | |
| $88AB (バンク 0) | 呼び出し | 530 | |
| $8914 (バンク 0) | 呼び出し | 530 | |
| $89AE (バンク 0) | 呼び出し | 530 | |
| $9712 (バンク 0) | 呼び出し | 440 | |
| $AA45 (バンク 0) | 呼び出し | 323 | |
| $AB21 (バンク 0) | 呼び出し | 296 | |
| $E3B3 (バンク 1) | テーブル | 294 | |
| $E271 (バンク 1) | 呼び出し | 201 | |
| $AA52 (バンク 0) | 呼び出し | 161 | |
| $AA5F (バンク 0) | 呼び出し | 161 | |
| $AA6B (バンク 0) | 呼び出し | 161 | |
| $AA78 (バンク 0) | 呼び出し | 161 | |
| $AA8A (バンク 0) | 呼び出し | 161 | |
| $E253 (バンク 1) | 呼び出し | 151 | |
| $E3DD (バンク 1) | テーブル | 150 | |
| $E04B (バンク 1) | 呼び出し | 137 | |
| $AA82 (バンク 0) | 呼び出し | 132 | |
| $AC1C (バンク 0) | 呼び出し | 132 | |
| $E9EB (バンク 1) | 呼び出し | 126 | |
| $EA03 (バンク 1) | 呼び出し | 126 | |
| $E003 (バンク 1) | 呼び出し | 118 | |
| $948B (バンク 0) | 呼び出し | 105 | |
| $E287 (バンク 1) | 呼び出し | 64 | |
| $E473 (バンク 1) | テーブル | 64 | |
| $9E07 (バンク 0) | 呼び出し | 49 | |
| $E247 (バンク 1) | 呼び出し | 49 | |
| $E3CA (バンク 1) | テーブル | 49 | |
| $E6D7 (バンク 1) | 呼び出し | 49 | |
| $E39C (バンク 1) | テーブル | 46 | |
| $8200 (バンク 0) | テーブル | 33 | |
| $A459 (バンク 0) | 呼び出し | 33 | |
| $E006 (バンク 1) | 呼び出し | 33 | |
| $E244 (バンク 1) | 呼び出し | 33 | |
| $824F (バンク 0) | テーブル | 32 | |
| $98EB (バンク 0) | 呼び出し | 26 | |
| $9907 (バンク 0) | 呼び出し | 26 | |
| $9FF2 (バンク 0) | 呼び出し | 20 | |
| $E33B (バンク 1) | 呼び出し | 20 | |
| $9969 (バンク 0) | 呼び出し | 14 | |
| $85F0 (バンク 0) | テーブル | 12 | |
| $86DC (バンク 0) | テーブル | 12 | |
| $87DC (バンク 0) | 呼び出し | 12 | |
| $E3D1 (バンク 1) | テーブル | 10 | |
| $E417 (バンク 1) | 呼び出し | 10 | |
| $9A6B (バンク 0) | テーブル | 8 | |
| $E390 (バンク 1) | テーブル | 8 | |
| $E637 (バンク 1) | 呼び出し | 6 | |
| $9CAF (バンク 0) | 呼び出し | 5 | |
| $988E (バンク 0) | テーブル | 4 | |
| $9D17 (バンク 0) | 呼び出し | 4 | |
| $99A2 (バンク 0) | テーブル | 2 | |
| $9B03 (バンク 0) | テーブル | 2 | |
| $9B58 (バンク 0) | テーブル | 2 | |
| $A3F2 (バンク 0) | テーブル | 2 | |
| $E384 (バンク 1) | テーブル | 2 |
待つ場所
規則が名付けたループのうち、ルーチンの内側にあって、それ自身はコードの入口ではないもの。
| 場所 | 何であるか、その証拠 |
|---|---|
| $828D (バンク 0) | フレーム待ち: 待つ相手のバイト $00F5、入った回数 32、周回 2,277、一周ごとの呼び出し 1、フレーム割り込みの下での書き込み 779,777、全フレーム 21,813 |
| $A45B (バンク 0) | フレーム待ち: 待つ相手のバイト $00C3、入った回数 33、周回 8,136、一周ごとの呼び出し 1、フレーム割り込みの下での書き込み 70,306、全フレーム 21,813 |
| $AA37 (バンク 0) | フレーム待ち: 待つ相手のバイト $0033、入った回数 21,338、周回 86,515,130、フレーム割り込みの下での書き込み 21,661、全フレーム 21,813 |
| $AA4D (バンク 0) | フレーム待ち: 待つ相手のバイト $0033、入った回数 323、周回 1,223,757、フレーム割り込みの下での書き込み 21,661、全フレーム 21,813 |
ジャンプエンジンのテーブル
テーブルはそれぞれ、エンジンへの呼び出しの直後にある。項目は、走行が選ぶのを見た所までを数える。本当のテーブルはもっと長いかもしれない。最後の列は、その値が項目を選んだメモリのバイトで、追えた場合だけ書いてある: ゲームのモードか、物体の一つが今していることだ。
| 場所 | 項目 | 選ばれた数 | 選んだバイト |
|---|---|---|---|
| $8050 (バンク 0) | 4 | 3 | $00BD |
| $8166 (バンク 0) | 6 | 5 | $00C0 |
| $81A0 (バンク 0) | 9 | 9 | $00A7 |
| $81B7 (バンク 0) | 9 | 7 | $0068 |
ルーチンが共有するメモリ
あるルーチンが書き、別のルーチンが読んだメモリは 392 バイト。添字を通して届いた場所は 44 か所で、メモリの中のテーブルや、物体の枠の並びはそう見える。
添字で届いた範囲: 位置を含むもの、次いで最も長いもの
| 起点 | 届いたバイト | 命令 | 含まれる位置 |
|---|---|---|---|
| $0700 | 80 | 2 | |
| $0200 | 32 | 10 | |
| $0040 | 32 | 2 | |
| $0060 | 32 | 2 | |
| $0000 | 25 | 2 | |
| $0001 | 24 | 1 | |
| $03EF | 16 | 1 | |
| $03F0 | 13 | 3 | |
| $03F1 | 13 | 1 | |
| $0690 | 10 | 1 | |
| $0680 | 9 | 3 | |
| $0730 | 9 | 3 |
最も忙しい共有バイト 24 個
| バイト | 読み書き | 書くルーチン | 読むルーチン |
|---|---|---|---|
| $0000 | 7,465,961 | 6 | 6 |
| $0001 | 7,461,993 | 6 | 6 |
| $00F5 | 1,407,825 | 4 | 6 |
| $00E0 | 96,007 | 6 | 6 |
| $00ED | 85,013 | 5 | 6 |
| $0017 | 68,784 | 2 | 4 |
| $06F1 | 65,129 | 6 | 3 |
| $06F5 | 65,041 | 3 | 3 |
| $06F0 | 64,992 | 2 | 3 |
| $06F2 | 64,992 | 2 | 3 |
| $06F3 | 64,992 | 2 | 3 |
| $00F7 | 53,642 | 2 | 5 |
| $00FF | 52,936 | 6 | 6 |
| $00B1 | 45,438 | 2 | 4 |
| $00FB | 43,388 | 1 | 2 |
| $0040 | 37,973 | 4 | 6 |
| $0060 | 36,336 | 3 | 3 |
| $00C0 | 30,615 | 5 | 6 |
| $06FD | 29,407 | 3 | 4 |
| $00BD | 22,406 | 6 | 3 |
| $06F9 | 22,295 | 6 | 6 |
| $06F8 | 22,136 | 2 | 4 |
| $06FA | 22,010 | 2 | 3 |
| $06FB | 22,010 | 2 | 3 |
このページはゲームのバイトを一つも見せない。これらの数を読み取ったリスティングは、カートリッジと一緒に留まる。