NEStinymachines

Super Mario Bros. 2 (USA) (Rev 1)

Super Mario Bros. 2 (USA) (Rev 1) は MMC3 の基板に載り、プログラムは 131,072 バイト。電源投入から 400 歩のクロールが、新しいコードを見つけた道筋を 31 本残した。それらを 24,411 フレームにわたって再生すると、プログラムのうち 9,665 バイト、7 パーセントが実行された。

規則が名付けたもの

走行が入った 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)11$0050
$94D0 (バンク 0)11$0534
$8242 (バンク 2)22$0051, $0052, $0053, $0054
$8260 (バンク 2)11$00EC
$83B3 (バンク 2)211$0093, $0094
$8A5C (バンク 2)81$0093, $0094
$889B (バンク 6)101
$88B8 (バンク 6)121
$88DE (バンク 6)11

ルーチンが共有するメモリ

あるルーチンが書き、別のルーチンが読んだメモリは 1,023 バイト。添字を通して届いた場所は 85 か所で、メモリの中のテーブルや、物体の枠の並びはそう見える。

添字で届いた範囲: 位置を含むもの、次いで最も長いもの

起点届いたバイト命令含まれる位置
$0028114横 3
$003262縦 1
$004756縦 2
$04D651縦 2
$00002562
$02002536
$02011975
$02031974
$02021973
$02041933
$02051933
$02061931

位置と一緒に動くもの

少なくとも二つのルーチンが、位置の配列と一緒に、同じ範囲をたどった配列。画面上のものの表は、メモリの中ではこう見える: 性質ごとに配列が一つ、ものごとに枠が一つ。どの配列が位置を持つかは言える。ほかの配列のうち、どれが位置に足し込まれるか (速度がすること) と、どれがジャンプのテーブルの行き先を選ぶか (状態や種類がすること) も言える。残りが何を持つかは、まだ名付けていない。

枠配列ルーチン横の位置縦の位置位置に足し込まれる配列ジャンプを選ぶ配列一緒に動く配列
1174$0028$0032$003C, $0407, $04CB$0014, $001E, $003C, $0407, $04CB
543$0047$005B, $006F, $009F

最も忙しい共有バイト 24 個

バイト読み書き書くルーチン読むルーチン
$00F5805,46536
$0001471,71066
$0000375,46766
$000A256,91566
$00EC219,03426
$00F0197,88263
$00F1197,88263
$0002197,74566
$0003192,86066
$0051136,51816
$0012132,84936
$000B123,36366
$00A8120,93016
$00E6109,81066
$00F790,99225
$000790,59466
$040088,72424
$009079,00316
$000C77,86566
$002874,18436
$00CB72,99256
$001472,22546
$002971,75016
$00E970,61533

このページはゲームのバイトを一つも見せない。これらの数を読み取ったリスティングは、カートリッジと一緒に留まる。

すべてのゲーム