Super Mario Bros. 2 (USA) (Rev 1)
Super Mario Bros. 2 (USA) (Rev 1) は MMC3 の基板に載り、プログラムは 131,072 バイト。電源投入から 400 歩のクロールが、新しいコードを見つけた道筋を 31 本残した。それらを 24,411 フレームにわたって再生すると、プログラムのうち 9,665 バイト、7 パーセントが実行された。
規則が名付けたもの
- パッドの読み取り: 2
- フレーム待ち: 2
- ジャンプエンジン: 1
- バンク切り替え: 6
- 画面メモリへの書き手: 1
- パレットの書き手: 3
- スプライトの書き手: 7
- スクロールの書き手: 1
- サウンドドライバ: 1
- 二つのものを比べる所: 3
走行が入った 182 個のルーチン
ゲームのコードに入った場所のすべて。呼び出し、割り込み、テーブル経由のジャンプのどれかで入る。規則が名付けたものを先に、規則が見たものと一緒に並べる。
| 場所 | 入り方 | 回数 | 何であるか、その証拠 |
|---|---|---|---|
| $E125 (バンク 14) | 呼び出し | 64,260 | ジャンプエンジン: テーブル 9、そこを通った跳躍 64,260 |
| $F67E (バンク 14) | 呼び出し | 27,068 | パッドの読み取り: ポート $4016、一フレームの読み 16、一フレームのストローブ 4 パッドの読み取り: ポート $4017、一フレームの読み 16、一フレームのストローブ 4 |
| $FF85 (バンク 14) | 呼び出し | 16,984 | バンク切り替え: 書き込み 67,936、ブランク中 532、描画中 67,404 |
| $EB94 (バンク 14) | 毎フレーム(NMI) | 13,754 | スクロールの書き手: 走ったフレーム 13,787、ブランク中の書き込み 26,820 |
| $FF73 (バンク 14) | 呼び出し | 13,754 | バンク切り替え: 書き込み 165,048、ブランク中 165,048、描画中 0 |
| $EC82 (バンク 14) | 呼び出し | 13,753 | バンク切り替え: 書き込み 54,996、ブランク中 39,967、描画中 15,029 |
| $FF88 (バンク 14) | 呼び出し | 13,753 | バンク切り替え: 書き込み 55,000、ブランク中 51,956、描画中 3,044 |
| $8361 (バンク 4) | 呼び出し | 13,750 | サウンドドライバ: 走ったフレーム 12,753、書き込み 45,424 |
| $ECE4 (バンク 14) | 呼び出し | 7,120 | パレットの書き手: 走ったフレーム 7,120、書き込み 832 |
| $ED0C (バンク 14) | 呼び出し | 6,414 | パレットの書き手: 走ったフレーム 6,414、書き込み 2,348 画面メモリへの書き手: 走ったフレーム 6,414、書き込み 86,779、ブランク中 13,772、描画中 73,007 |
| $ECA6 (バンク 14) | 呼び出し | 5,929 | スプライトの書き手: 走ったフレーム 5,927、スプライトのページへの書き込み 379,330 |
| $9E0B (バンク 3) | 呼び出し | 5,880 | スプライトの書き手: 走ったフレーム 5,880、スプライトのページへの書き込み 47,040 |
| $F31A (バンク 14) | 呼び出し | 5,880 | スプライトの書き手: 走ったフレーム 5,880、スプライトのページへの書き込み 117,600 |
| $9CF6 (バンク 2) | 呼び出し | 1,793 | スプライトの書き手: 走ったフレーム 1,449、スプライトのページへの書き込み 20,700 |
| $9D95 (バンク 3) | 呼び出し | 1,173 | 二つのものを比べる所: 命令 1、バイトの組 8、バイトの総数 5、比べた回数 3,104、縦の位置のバイト $0032,$004A,$004B,$04D9,$04DA |
| $9D82 (バンク 3) | 呼び出し | 93 | 二つのものを比べる所: 命令 1、バイトの組 2、バイトの総数 3、比べた回数 93、横の位置のバイト $0028,$002C,$002D |
| $EC90 (バンク 14) | 呼び出し | 64 | スプライトの書き手: 走ったフレーム 128、スプライトのページへの書き込み 4,096 |
| $FFA0 (バンク 14) | 呼び出し | 57 | バンク切り替え: 書き込み 57、ブランク中 0、描画中 57 |
| $9A3D (バンク 0) | 呼び出し | 31 | パレットの書き手: 走ったフレーム 706、書き込み 992 スプライトの書き手: 走ったフレーム 706、スプライトのページへの書き込み 9,792 |
| $FF50 (バンク 14) | 電源投入 | 31 | バンク切り替え: 書き込み 62、ブランク中 62、描画中 0 |
| $E288 (バンク 14) | 呼び出し | 29 | スプライトの書き手: 走ったフレーム 3,051、スプライトのページへの書き込み 3,712 |
| $9E3F (バンク 2) | 呼び出し | 12 | 二つのものを比べる所: 命令 1、バイトの組 2、バイトの総数 3、比べた回数 12、横の位置のバイト $0028,$002C,$002D |
| $97D6 (バンク 6) | 呼び出し | 58,080 | |
| $820E (バンク 2) | 呼び出し | 52,740 | |
| $8214 (バンク 2) | 呼び出し | 52,740 | |
| $823D (バンク 2) | 呼び出し | 52,740 | |
| $9AB9 (バンク 2) | 呼び出し | 52,740 | |
| $820D (バンク 2) | テーブル | 50,554 | |
| $9A4E (バンク 1) | 呼び出し | 21,647 | |
| $9A71 (バンク 1) | 呼び出し | 21,647 | |
| $92AA (バンク 0) | 呼び出し | 21,625 | |
| $92C1 (バンク 0) | 呼び出し | 21,625 | |
| $8643 (バンク 4) | 呼び出し | 20,408 | |
| $924F (バンク 0) | 呼び出し | 19,790 | |
| $8488 (バンク 0) | 呼び出し | 16,976 | |
| $9053 (バンク 0) | 呼び出し | 15,832 | |
| $9816 (バンク 6) | 呼び出し | 14,520 | |
| $9818 (バンク 6) | 呼び出し | 14,520 | |
| $981A (バンク 6) | 呼び出し | 14,520 | |
| $981C (バンク 6) | 呼び出し | 14,520 | |
| $8000 (バンク 4) | 呼び出し | 13,750 | |
| $8078 (バンク 4) | 呼び出し | 13,644 | |
| $8138 (バンク 4) | 呼び出し | 13,644 | |
| $82A2 (バンク 4) | 呼び出し | 13,644 | |
| $82FD (バンク 4) | 呼び出し | 13,644 | |
| $EC6E (バンク 14) | 呼び出し | 13,534 | |
| $F661 (バンク 14) | 呼び出し | 13,534 | |
| $EAB1 (バンク 14) | 呼び出し | 12,089 | |
| $FAFE (バンク 14) | 呼び出し | 11,760 | |
| $8FB2 (バンク 0) | 呼び出し | 7,916 | |
| $8FB5 (バンク 0) | 呼び出し | 7,916 | |
| $8FF5 (バンク 0) | 呼び出し | 7,814 | |
| $8FF8 (バンク 0) | 呼び出し | 7,814 | |
| $8C04 (バンク 6) | 呼び出し | 7,370 | |
| $9890 (バンク 6) | 呼び出し | 6,204 | |
| $8010 (バンク 2) | 呼び出し | 5,880 | |
| $8083 (バンク 0) | 呼び出し | 5,880 | |
| $F0E9 (バンク 14) | 呼び出し | 5,880 | |
| $F17E (バンク 14) | 呼び出し | 5,880 | |
| $F228 (バンク 14) | 呼び出し | 5,880 | |
| $F47C (バンク 14) | 呼び出し | 5,880 | |
| $F494 (バンク 14) | 呼び出し | 5,880 | |
| $F4C3 (バンク 14) | 呼び出し | 5,880 | |
| $FACA (バンク 14) | 呼び出し | 5,880 | |
| $8256 (バンク 2) | 呼び出し | 5,860 | |
| $82ED (バンク 2) | テーブル | 5,860 | |
| $9885 (バンク 6) | 呼び出し | 5,060 | |
| $8A02 (バンク 0) | 呼び出し | 3,958 | |
| $8A41 (バンク 0) | テーブル | 3,958 | |
| $8B35 (バンク 0) | 呼び出し | 3,958 | |
| $8C1A (バンク 0) | 呼び出し | 3,958 | |
| $8CD9 (バンク 0) | 呼び出し | 3,958 | |
| $8D6F (バンク 0) | 呼び出し | 3,958 | |
| $8DC0 (バンク 0) | 呼び出し | 3,958 | |
| $8EA4 (バンク 0) | 呼び出し | 3,958 | |
| $8EA6 (バンク 0) | 呼び出し | 3,958 | |
| $8EFA (バンク 0) | 呼び出し | 3,958 | |
| $8FFD (バンク 0) | 呼び出し | 3,958 | |
| $9316 (バンク 0) | 呼び出し | 3,958 | |
| $967B (バンク 6) | 呼び出し | 3,894 | |
| $9878 (バンク 6) | 呼び出し | 3,894 | |
| $8D2C (バンク 0) | 呼び出し | 3,789 | |
| $97E2 (バンク 6) | 呼び出し | 3,630 | |
| $828F (バンク 0) | 呼び出し | 3,111 | |
| $958C (バンク 3) | 呼び出し | 2,852 | |
| $9B87 (バンク 3) | 呼び出し | 2,852 | |
| $9BE2 (バンク 3) | 呼び出し | 2,852 | |
| $9C2E (バンク 3) | 呼び出し | 2,852 | |
| $9D29 (バンク 3) | 呼び出し | 2,852 | |
| $9D4C (バンク 3) | 呼び出し | 2,852 | |
| $9D6B (バンク 3) | 呼び出し | 2,852 | |
| $8629 (バンク 4) | 呼び出し | 2,690 | |
| $8894 (バンク 2) | 呼び出し | 2,186 | |
| $88E8 (バンク 2) | 呼び出し | 2,186 | |
| $89B9 (バンク 2) | テーブル | 2,186 | |
| $82E2 (バンク 0) | 呼び出し | 2,149 | |
| $833E (バンク 0) | 呼び出し | 2,123 | |
| $895D (バンク 0) | 呼び出し | 2,031 | |
| $8634 (バンク 4) | 呼び出し | 1,911 | |
| $910C (バンク 0) | 呼び出し | 1,854 | |
| $873F (バンク 4) | 呼び出し | 1,617 | |
| $86C1 (バンク 4) | 呼び出し | 1,539 | |
| $8577 (バンク 2) | 呼び出し | 1,426 | |
| $8A57 (バンク 2) | 呼び出し | 1,426 | |
| $9471 (バンク 2) | テーブル | 1,426 | |
| $94FD (バンク 3) | 呼び出し | 1,426 | |
| $95AC (バンク 3) | 呼び出し | 1,426 | |
| $98D1 (バンク 2) | 呼び出し | 1,426 | |
| $997E (バンク 2) | 呼び出し | 1,426 | |
| $9B1F (バンク 2) | 呼び出し | 1,426 | |
| $9E4F (バンク 2) | 呼び出し | 1,426 | |
| $9E54 (バンク 2) | 呼び出し | 1,426 | |
| $86BA (バンク 4) | 呼び出し | 1,354 | |
| $86CE (バンク 4) | 呼び出し | 1,341 | |
| $8743 (バンク 4) | 呼び出し | 1,210 | |
| $9DC5 (バンク 3) | 呼び出し | 1,173 | |
| $823D (バンク 0) | 呼び出し | 1,135 | |
| $8000 (バンク 0) | 呼び出し | 1,080 | |
| $F6C0 (バンク 14) | 呼び出し | 1,080 | |
| $82BE (バンク 0) | 呼び出し | 990 | |
| $846A (バンク 0) | 呼び出し | 822 | |
| $8311 (バンク 2) | 呼び出し | 720 | |
| $9608 (バンク 0) | 呼び出し | 656 | |
| $EAAD (バンク 14) | 呼び出し | 618 | |
| $8412 (バンク 0) | 呼び出し | 550 | |
| $8138 (バンク 2) | 呼び出し | 420 | |
| $84AC (バンク 0) | 呼び出し | 416 | |
| $9370 (バンク 6) | 呼び出し | 408 | |
| $938A (バンク 6) | 呼び出し | 288 | |
| $ECB4 (バンク 14) | 呼び出し | 192 | |
| $EA31 (バンク 14) | 呼び出し | 140 | |
| $EAA9 (バンク 14) | 呼び出し | 139 | |
| $E9A4 (バンク 14) | 呼び出し | 134 | |
| $8898 (バンク 6) | 呼び出し | 132 | |
| $8BB3 (バンク 6) | テーブル | 132 | |
| $EA94 (バンク 14) | 呼び出し | 114 | |
| $8451 (バンク 10) | 呼び出し | 74 | |
| $95D4 (バンク 6) | 呼び出し | 68 | |
| $88D8 (バンク 6) | 呼び出し | 66 | |
| $8CAF (バンク 6) | テーブル | 66 | |
| $8314 (バンク 0) | 呼び出し | 58 | |
| $E198 (バンク 14) | 呼び出し | 57 | |
| $E1F4 (バンク 14) | 呼び出し | 46 | |
| $88B5 (バンク 6) | 呼び出し | 44 | |
| $9020 (バンク 6) | テーブル | 44 | |
| $95AF (バンク 0) | 呼び出し | 44 | |
| $98A8 (バンク 6) | 呼び出し | 44 | |
| $98BC (バンク 6) | 呼び出し | 44 | |
| $E15B (バンク 14) | 呼び出し | 33 | |
| $E166 (バンク 14) | 呼び出し | 33 | |
| $E17F (バンク 14) | 呼び出し | 33 | |
| $9604 (バンク 0) | 呼び出し | 31 | |
| $FE41 (バンク 14) | 呼び出し | 31 | |
| $FE57 (バンク 14) | 呼び出し | 29 | |
| $86C8 (バンク 4) | 呼び出し | 27 | |
| $FE6E (バンク 14) | 呼び出し | 27 | |
| $93A4 (バンク 6) | 呼び出し | 24 | |
| $FE16 (バンク 14) | 呼び出し | 24 | |
| $8327 (バンク 10) | 呼び出し | 23 | |
| $E1FA (バンク 14) | 呼び出し | 23 | |
| $E228 (バンク 14) | 呼び出し | 23 | |
| $F218 (バンク 14) | 呼び出し | 23 | |
| $86EE (バンク 0) | 呼び出し | 22 | |
| $88FE (バンク 6) | 呼び出し | 22 | |
| $933A (バンク 6) | 呼び出し | 22 | |
| $946D (バンク 0) | 呼び出し | 22 | |
| $94CA (バンク 0) | 呼び出し | 22 | |
| $94DC (バンク 0) | テーブル | 22 | |
| $950E (バンク 6) | 呼び出し | 22 | |
| $9561 (バンク 0) | 呼び出し | 22 | |
| $9567 (バンク 6) | 呼び出し | 22 | |
| $95E6 (バンク 6) | 呼び出し | 22 | |
| $9728 (バンク 6) | 呼び出し | 22 | |
| $98DC (バンク 6) | 呼び出し | 22 | |
| $F754 (バンク 14) | 呼び出し | 22 | |
| $8441 (バンク 2) | 呼び出し | 12 | |
| $845D (バンク 2) | 呼び出し | 12 | |
| $8C99 (バンク 0) | 呼び出し | 7 | |
| $81A2 (バンク 0) | 呼び出し | 4 | |
| $E9EB (バンク 14) | 呼び出し | 4 | |
| $81D6 (バンク 0) | 呼び出し | 2 | |
| $81FE (バンク 0) | 呼び出し | 2 |
待つ場所
規則が名付けたループのうち、ルーチンの内側にあって、それ自身はコードの入口ではないもの。
| 場所 | 何であるか、その証拠 |
|---|---|
| $961A (バンク 0) | フレーム待ち: 待つ相手のバイト $00EB、入った回数 686、周回 2,926,371、フレーム割り込みの下での書き込み 27,506、全フレーム 13,911 |
| $EAC3 (バンク 14) | フレーム待ち: 待つ相手のバイト $00EB、入った回数 12,872、周回 49,070,935、フレーム割り込みの下での書き込み 27,506、全フレーム 13,911 |
ジャンプエンジンのテーブル
テーブルはそれぞれ、エンジンへの呼び出しの直後にある。項目は、走行が選ぶのを見た所までを数える。本当のテーブルはもっと長いかもしれない。最後の列は、その値が項目を選んだメモリのバイトで、追えた場合だけ書いてある: ゲームのモードか、物体の一つが今していることだ。
| 場所 | 項目 | 選ばれた数 | 選んだバイト |
|---|---|---|---|
| $8A2F (バンク 0) | 1 | 1 | $0050 |
| $94D0 (バンク 0) | 1 | 1 | $0534 |
| $8242 (バンク 2) | 2 | 2 | $0051, $0052, $0053, $0054 |
| $8260 (バンク 2) | 1 | 1 | $00EC |
| $83B3 (バンク 2) | 21 | 1 | $0093, $0094 |
| $8A5C (バンク 2) | 8 | 1 | $0093, $0094 |
| $889B (バンク 6) | 10 | 1 | |
| $88B8 (バンク 6) | 12 | 1 | |
| $88DE (バンク 6) | 1 | 1 |
ルーチンが共有するメモリ
あるルーチンが書き、別のルーチンが読んだメモリは 1,023 バイト。添字を通して届いた場所は 85 か所で、メモリの中のテーブルや、物体の枠の並びはそう見える。
添字で届いた範囲: 位置を含むもの、次いで最も長いもの
| 起点 | 届いたバイト | 命令 | 含まれる位置 |
|---|---|---|---|
| $0028 | 11 | 4 | 横 3 |
| $0032 | 6 | 2 | 縦 1 |
| $0047 | 5 | 6 | 縦 2 |
| $04D6 | 5 | 1 | 縦 2 |
| $0000 | 256 | 2 | |
| $0200 | 253 | 6 | |
| $0201 | 197 | 5 | |
| $0203 | 197 | 4 | |
| $0202 | 197 | 3 | |
| $0204 | 193 | 3 | |
| $0205 | 193 | 3 | |
| $0206 | 193 | 1 |
位置と一緒に動くもの
少なくとも二つのルーチンが、位置の配列と一緒に、同じ範囲をたどった配列。画面上のものの表は、メモリの中ではこう見える: 性質ごとに配列が一つ、ものごとに枠が一つ。どの配列が位置を持つかは言える。ほかの配列のうち、どれが位置に足し込まれるか (速度がすること) と、どれがジャンプのテーブルの行き先を選ぶか (状態や種類がすること) も言える。残りが何を持つかは、まだ名付けていない。
| 枠 | 配列 | ルーチン | 横の位置 | 縦の位置 | 位置に足し込まれる配列 | ジャンプを選ぶ配列 | 一緒に動く配列 |
|---|---|---|---|---|---|---|---|
| 11 | 7 | 4 | $0028 | $0032 | $003C, $0407, $04CB | $0014, $001E, $003C, $0407, $04CB | |
| 5 | 4 | 3 | $0047 | $005B, $006F, $009F |
最も忙しい共有バイト 24 個
| バイト | 読み書き | 書くルーチン | 読むルーチン |
|---|---|---|---|
| $00F5 | 805,465 | 3 | 6 |
| $0001 | 471,710 | 6 | 6 |
| $0000 | 375,467 | 6 | 6 |
| $000A | 256,915 | 6 | 6 |
| $00EC | 219,034 | 2 | 6 |
| $00F0 | 197,882 | 6 | 3 |
| $00F1 | 197,882 | 6 | 3 |
| $0002 | 197,745 | 6 | 6 |
| $0003 | 192,860 | 6 | 6 |
| $0051 | 136,518 | 1 | 6 |
| $0012 | 132,849 | 3 | 6 |
| $000B | 123,363 | 6 | 6 |
| $00A8 | 120,930 | 1 | 6 |
| $00E6 | 109,810 | 6 | 6 |
| $00F7 | 90,992 | 2 | 5 |
| $0007 | 90,594 | 6 | 6 |
| $0400 | 88,724 | 2 | 4 |
| $0090 | 79,003 | 1 | 6 |
| $000C | 77,865 | 6 | 6 |
| $0028 | 74,184 | 3 | 6 |
| $00CB | 72,992 | 5 | 6 |
| $0014 | 72,225 | 4 | 6 |
| $0029 | 71,750 | 1 | 6 |
| $00E9 | 70,615 | 3 | 3 |
このページはゲームのバイトを一つも見せない。これらの数を読み取ったリスティングは、カートリッジと一緒に留まる。