NEStinymachines

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

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

規則が名付けたもの

走行が入った 242 個のルーチン

ゲームのコードに入った場所のすべて。呼び出し、割り込み、テーブル経由のジャンプのどれかで入る。規則が名付けたものを先に、規則が見たものと一緒に並べる。

場所入り方回数何であるか、その証拠
$FF12 (バンク 30)呼び出し102,750
パッドの読み取り: ポート $4016、一フレームの読み 16、一フレームのストローブ 8
パッドの読み取り: ポート $4017、一フレームの読み 16、一フレームのストローブ 8
$FE99 (バンク 30)呼び出し49,366
ジャンプエンジン: テーブル 26、そこを通った跳躍 49,366
$FC6F (バンク 30)呼び出し39,143
バンク切り替え: 書き込み 156,471、ブランク中 54,153、描画中 102,318
$F486 (バンク 30)毎フレーム(NMI)26,795
バンク切り替え: 書き込み 267,740、ブランク中 234,470、描画中 33,270
スクロールの書き手: 走ったフレーム 26,838、ブランク中の書き込み 55,942
$FFAD (バンク 30)呼び出し26,795
バンク切り替え: 書き込み 321,511、ブランク中 321,511、描画中 0
$F795 (バンク 30)割り込み(IRQ)26,622
バンク切り替え: 書き込み 199,281、ブランク中 0、描画中 199,281
サウンドドライバ: 走ったフレーム 26,622、書き込み 53,241
$9293 (バンク 26)呼び出し26,084
パレットの書き手: 走ったフレーム 25,697、書き込み 23,877
$D984 (バンク 30)呼び出し25,611
乱数のバイト: 走ったフレーム 25,611、バイト $0781,$0782,$0783,$0784、回転 4、排他的論理和 1
$FFC2 (バンク 30)呼び出し25,352
バンク切り替え: 書き込み 50,704、ブランク中 1,146、描画中 49,558
$92DC (バンク 26)呼び出し16,502
画面メモリへの書き手: 走ったフレーム 12,897、書き込み 139,264、ブランク中 17,632、描画中 121,632
$99AA (バンク 11)呼び出し14,760
スプライトの書き手: 走ったフレーム 1,845、スプライトのページへの書き込み 117,916
$FD84 (バンク 30)呼び出し11,566
スプライトの書き手: 走ったフレーム 11,523、スプライトのページへの書き込み 1,479,690
$83C3 (バンク 10)呼び出し8,066
スプライトの書き手: 走ったフレーム 8,066、スプライトのページへの書き込み 132
$920B (バンク 24)呼び出し6,882
スプライトの書き手: 走ったフレーム 3,442、スプライトのページへの書き込み 207,985
$841A (バンク 9)呼び出し5,884
スプライトの書き手: 走ったフレーム 2,942、スプライトのページへの書き込み 2,832
$9754 (バンク 24)呼び出し5,697
スプライトの書き手: 走ったフレーム 1,863、スプライトのページへの書き込み 6,804
$89D3 (バンク 9)呼び出し5,488
スプライトの書き手: 走ったフレーム 2,744、スプライトのページへの書き込み 43,886
$8F44 (バンク 24)呼び出し5,390
スプライトの書き手: 走ったフレーム 5,390、スプライトのページへの書き込み 344,960
$852B (バンク 10)呼び出し5,380
スプライトの書き手: 走ったフレーム 5,380、スプライトのページへの書き込み 53,757
$936E (バンク 24)呼び出し4,084
スプライトの書き手: 走ったフレーム 2,042、スプライトのページへの書き込み 342
$95E2 (バンク 9)呼び出し2,942
スプライトの書き手: 走ったフレーム 2,942、スプライトのページへの書き込み 23,522
$FFD1 (バンク 30)呼び出し2,897
バンク切り替え: 書き込み 5,794、ブランク中 556、描画中 5,238
$95BE (バンク 11)テーブル2,178
スプライトの書き手: 走ったフレーム 1,089、スプライトのページへの書き込み 20,346
$DBD5 (バンク 30)呼び出し2,048
バンク切り替え: 書き込み 4,096、ブランク中 556、描画中 3,540
$8C35 (バンク 24)テーブル1,912
スプライトの書き手: 走ったフレーム 4,209、スプライトのページへの書き込み 9,945
$97D6 (バンク 24)呼び出し1,899
スプライトの書き手: 走ったフレーム 1,863、スプライトのページへの書き込み 45,576
$9820 (バンク 11)テーブル1,886
二つのものを比べる所: 命令 2、バイトの組 3、バイトの総数 5、比べた回数 2,829、横の位置のバイト $0079,$00B1,$0722、縦の位置のバイト $0075,$00B2
$86C4 (バンク 10)テーブル1,599
スプライトの書き手: 走ったフレーム 1,599、スプライトのページへの書き込み 902
$8859 (バンク 24)呼び出し1,481
パレットの書き手: 走ったフレーム 109、書き込み 3,488
$96EE (バンク 24)呼び出し1,320
スプライトの書き手: 走ったフレーム 586、スプライトのページへの書き込み 12,992
$8DCA (バンク 10)テーブル712
二つのものを比べる所: 命令 2、バイトの組 2、バイトの総数 4、比べた回数 54、横の位置のバイト $0079,$007A、縦の位置のバイト $0075,$0076
スプライトの書き手: 走ったフレーム 712、スプライトのページへの書き込み 15,644
$94C0 (バンク 24)テーブル669
スプライトの書き手: 走ったフレーム 669、スプライトのページへの書き込み 6,504
$950C (バンク 24)テーブル640
二つのものを比べる所: 命令 1、バイトの組 1、バイトの総数 2、比べた回数 640、横の位置のバイト $008B,$008C
スプライトの書き手: 走ったフレーム 640、スプライトのページへの書き込み 6,400
$D4CD (バンク 30)呼び出し473
バンク切り替え: 書き込み 946、ブランク中 0、描画中 946
$958C (バンク 24)テーブル350
スプライトの書き手: 走ったフレーム 350、スプライトのページへの書き込み 4,200
$8F29 (バンク 10)呼び出し289
スプライトの書き手: 走ったフレーム 289、スプライトのページへの書き込み 6,357
$9568 (バンク 24)テーブル222
スプライトの書き手: 走ったフレーム 222、スプライトのページへの書き込み 2,224
$8B84 (バンク 10)テーブル215
スプライトの書き手: 走ったフレーム 43、スプライトのページへの書き込み 28,380
$FFBF (バンク 30)呼び出し205
バンク切り替え: 書き込み 410、ブランク中 0、描画中 410
$9117 (バンク 9)呼び出し181
スプライトの書き手: 走ったフレーム 181、スプライトのページへの書き込み 1,448
$97BE (バンク 9)呼び出し125
スプライトの書き手: 走ったフレーム 125、スプライトのページへの書き込み 999
$D6CE (バンク 30)呼び出し120
スプライトの書き手: 走ったフレーム 300、スプライトのページへの書き込み 30,720
$D4BB (バンク 30)呼び出し107
バンク切り替え: 書き込み 214、ブランク中 0、描画中 214
$8AA2 (バンク 10)テーブル86
スプライトの書き手: 走ったフレーム 43、スプライトのページへの書き込み 11,352
$99F4 (バンク 11)呼び出し82
二つのものを比べる所: 命令 2、バイトの組 3、バイトの総数 5、比べた回数 246、横の位置のバイト $0079,$00B1,$0722、縦の位置のバイト $0075,$00B2
$DABA (バンク 30)呼び出し64
バンク切り替え: 書き込み 128、ブランク中 0、描画中 128
$FF40 (バンク 30)電源投入60
バンク切り替え: 書き込み 429、ブランク中 300、描画中 129
二つのものを比べる所: 命令 1、バイトの組 1、バイトの総数 2、比べた回数 5,428、横の位置のバイト $00B1,$0722
スプライトの書き手: 走ったフレーム 13,422、スプライトのページへの書き込み 1,585
$91AC (バンク 10)呼び出し43
スプライトの書き手: 走ったフレーム 43、スプライトのページへの書き込み 5,676
$87A0 (バンク 10)テーブル41
スプライトの書き手: 走ったフレーム 41、スプライトのページへの書き込み 902
$F4F0 (バンク 30)呼び出し6
バンク切り替え: 書き込み 60、ブランク中 38、描画中 22
$99D4 (バンク 11)呼び出し44,280
$8D1B (バンク 9)呼び出し35,304
$98D0 (バンク 9)呼び出し35,304
$8996 (バンク 9)呼び出し34,014
$998B (バンク 11)呼び出し29,520
$8000 (バンク 28)呼び出し26,784
$8661 (バンク 28)呼び出し26,607
$80A1 (バンク 28)呼び出し26,578
$82AB (バンク 28)呼び出し26,578
$8449 (バンク 28)呼び出し26,578
$E34F (バンク 30)呼び出し26,567
$FEBE (バンク 30)呼び出し25,611
$E785 (バンク 30)呼び出し21,354
$D734 (バンク 30)呼び出し17,424
$9071 (バンク 24)呼び出し16,409
$D705 (バンク 30)呼び出し16,032
$98F3 (バンク 11)呼び出し14,760
$D6E5 (バンク 30)呼び出し13,590
$8806 (バンク 24)呼び出し13,205
$93E6 (バンク 26)呼び出し12,406
$E2C0 (バンク 30)呼び出し11,838
$8B30 (バンク 9)呼び出し11,808
$989C (バンク 9)呼び出し11,328
$8B4D (バンク 9)呼び出し8,866
$9C29 (バンク 11)呼び出し8,398
$84E0 (バンク 10)呼び出し8,355
$89B4 (バンク 24)呼び出し7,743
$84FA (バンク 10)テーブル7,307
$90C1 (バンク 24)呼び出し6,956
$80A7 (バンク 9)呼び出し5,884
$87D2 (バンク 9)呼び出し5,669
$84A8 (バンク 9)テーブル5,488
$9890 (バンク 9)呼び出し5,488
$8506 (バンク 10)テーブル5,380
$976E (バンク 24)呼び出し5,040
$8A7D (バンク 24)呼び出し4,825
$8F6D (バンク 24)呼び出し4,084
$8FF8 (バンク 24)呼び出し4,084
$90A0 (バンク 24)呼び出し4,084
$9340 (バンク 24)呼び出し4,084
$89CF (バンク 24)テーブル3,648
$8EC5 (バンク 24)呼び出し3,478
$93C3 (バンク 24)呼び出し3,478
$90AC (バンク 24)呼び出し3,201
$9421 (バンク 24)呼び出し3,201
$9776 (バンク 24)呼び出し3,201
$81A7 (バンク 9)呼び出し2,963
$8018 (バンク 9)呼び出し2,942
$8026 (バンク 9)呼び出し2,942
$809C (バンク 9)呼び出し2,942
$8106 (バンク 9)呼び出し2,942
$82C1 (バンク 9)テーブル2,942
$82E5 (バンク 9)テーブル2,942
$83F1 (バンク 9)呼び出し2,942
$8A4E (バンク 9)呼び出し2,942
$8B94 (バンク 9)呼び出し2,942
$8CF6 (バンク 9)呼び出し2,942
$9789 (バンク 9)呼び出し2,942
$9691 (バンク 24)呼び出し2,615
$8DF5 (バンク 11)呼び出し2,178
$958D (バンク 11)呼び出し2,178
$9A8A (バンク 11)呼び出し2,178
$DC78 (バンク 30)呼び出し2,048
$8AB2 (バンク 24)テーブル2,042
$8B81 (バンク 24)呼び出し2,042
$978E (バンク 24)呼び出し1,912
$96AD (バンク 24)呼び出し1,899
$E33B (バンク 30)呼び出し1,831
$976C (バンク 11)呼び出し1,599
$E756 (バンク 30)呼び出し1,331
$8B9A (バンク 24)テーブル1,303
$8CD1 (バンク 26)呼び出し1,157
$8D68 (バンク 26)呼び出し1,157
$8DBD (バンク 11)呼び出し1,089
$8DF4 (バンク 11)テーブル1,089
$8E7C (バンク 11)テーブル1,089
$953B (バンク 11)呼び出し1,089
$9B6D (バンク 11)呼び出し1,089
$E7AB (バンク 30)呼び出し1,038
$8BDC (バンク 26)呼び出し1,024
$E7BF (バンク 30)呼び出し989
$E835 (バンク 30)呼び出し917
$903C (バンク 26)呼び出し810
$9073 (バンク 26)呼び出し803
$9175 (バンク 26)呼び出し803
$8F9D (バンク 26)呼び出し802
$9256 (バンク 26)呼び出し802
$944A (バンク 26)呼び出し802
$E831 (バンク 30)呼び出し785
$91FE (バンク 10)呼び出し684
$9280 (バンク 10)呼び出し682
$945A (バンク 24)テーブル586
$9556 (バンク 24)テーブル572
$FDC7 (バンク 30)呼び出し454
$9444 (バンク 24)テーブル442
$9265 (バンク 9)呼び出し368
$854A (バンク 10)テーブル328
$8566 (バンク 10)呼び出し328
$8D76 (バンク 26)テーブル308
$8A8C (バンク 10)呼び出し301
$9431 (バンク 24)テーブル292
$8070 (バンク 26)呼び出し289
$8DBB (バンク 26)テーブル287
$E7B2 (バンク 30)呼び出し287
$8DA6 (バンク 26)テーブル281
$8DD6 (バンク 26)テーブル281
$81AC (バンク 28)呼び出し272
$D935 (バンク 30)呼び出し252
$FDBF (バンク 30)呼び出し227
$8B9B (バンク 24)テーブル216
$8BAD (バンク 24)テーブル210
$FDA9 (バンク 30)呼び出し206
$840E (バンク 26)テーブル188
$89B5 (バンク 9)呼び出し181
$8D3B (バンク 9)テーブル181
$9035 (バンク 9)呼び出し181
$924D (バンク 9)呼び出し181
$934F (バンク 9)呼び出し181
$8F04 (バンク 9)呼び出し162
$8F7F (バンク 9)呼び出し162
$8FB9 (バンク 9)テーブル162
$9027 (バンク 9)呼び出し162
$987E (バンク 9)呼び出し162
$9884 (バンク 9)呼び出し162
$8BF7 (バンク 24)テーブル152
$842C (バンク 14)テーブル147
$8576 (バンク 14)テーブル147
$DA49 (バンク 30)呼び出し147
$FD97 (バンク 30)呼び出し146
$FCD8 (バンク 30)呼び出し129
$9878 (バンク 9)呼び出し125
$8489 (バンク 14)テーブル105
$DA75 (バンク 30)呼び出し105
$D68E (バンク 30)呼び出し86
$8BC0 (バンク 24)テーブル75
$8BCA (バンク 24)テーブル74
$8BA3 (バンク 26)呼び出し64
$8C69 (バンク 26)呼び出し64
$983F (バンク 27)呼び出し64
$D51B (バンク 30)呼び出し64
$82C4 (バンク 26)テーブル60
$8399 (バンク 26)呼び出し60
$88AF (バンク 24)呼び出し60
$8990 (バンク 24)呼び出し60
$90C4 (バンク 26)呼び出し51
$9108 (バンク 26)呼び出し51
$97A8 (バンク 24)呼び出し50
$8AF4 (バンク 24)テーブル49
$8C1A (バンク 24)テーブル49
$8B26 (バンク 24)呼び出し47
$E82B (バンク 30)呼び出し47
$8398 (バンク 26)テーブル44
$81D8 (バンク 11)呼び出し43
$8299 (バンク 11)呼び出し43
$82C4 (バンク 10)呼び出し43
$834D (バンク 10)呼び出し43
$840E (バンク 12)呼び出し43
$845D (バンク 12)呼び出し43
$8CBB (バンク 24)テーブル43
$FCBF (バンク 30)呼び出し43
$8459 (バンク 9)テーブル42
$85AB (バンク 14)テーブル42
$85B8 (バンク 14)テーブル42
$9792 (バンク 11)テーブル41
$9327 (バンク 9)呼び出し40
$80CF (バンク 26)テーブル28
$E7B9 (バンク 30)呼び出し28
$D553 (バンク 30)呼び出し27
$8B5E (バンク 24)呼び出し24
$93E8 (バンク 24)呼び出し24
$8200 (バンク 9)テーブル21
$823C (バンク 9)テーブル21
$8408 (バンク 14)テーブル21
$85F2 (バンク 14)テーブル21
$DA1D (バンク 30)呼び出し21
$FDB1 (バンク 30)呼び出し21
$8328 (バンク 26)呼び出し16
$9409 (バンク 24)テーブル16
$8BE4 (バンク 24)テーブル12
$9818 (バンク 9)呼び出し10
$83B1 (バンク 26)テーブル8
$83CD (バンク 26)テーブル8
$8118 (バンク 26)テーブル7
$8092 (バンク 26)テーブル6
$9805 (バンク 9)呼び出し5
$9369 (バンク 10)呼び出し4
$940A (バンク 24)テーブル4
$941B (バンク 24)テーブル4
$8C1A (バンク 9)呼び出し3
$8C8C (バンク 9)テーブル3
$8383 (バンク 9)呼び出し1
$8522 (バンク 26)呼び出し1

待つ場所

規則が名付けたループのうち、ルーチンの内側にあって、それ自身はコードの入口ではないもの。

場所何であるか、その証拠
$881C (バンク 24)
フレーム待ち: 待つ相手のバイト $0010、入った回数 13,199、周回 56,343,449、フレーム割り込みの下での書き込み 53,478、全フレーム 28,220
$804B (バンク 28)
フレーム待ち: 待つ相手のバイト $04E0、入った回数 3、周回 3、フレーム割り込みの下での書き込み 859、全フレーム 28,220
$D6FB (バンク 30)
フレーム待ち: 待つ相手のバイト $0010、入った回数 13,579、周回 49,905,908、フレーム割り込みの下での書き込み 53,478、全フレーム 28,220

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

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

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

起点届いたバイト命令含まれる位置
$00751299縦 2
$00A5162横 1、縦 1
$008769横 2
$007924横 2
$072221横 1
$020125315
$020025314
$020325310
$00002463
$020215310
$02051539
$02041536

位置と一緒に動くもの

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

枠配列ルーチン横の位置縦の位置位置に足し込まれる配列ジャンプを選ぶ配列一緒に動く配列
129610$0079$0075$0077, $0085, $0095, $00B7
6812$0087$0097$00D8$0077, $008F, $0097, $009F, $00D2, $00D8, $051F

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

バイト読み書き書くルーチン読むルーチン
$00005,090,23766
$00014,530,15866
$00021,217,17666
$0003623,39566
$000E361,05466
$000F264,25066
$000C220,22066
$0005143,47365
$0025140,06944
$0006130,17366
$0007110,52566
$04F4106,47822
$0782106,14824
$00BC102,09166
$072095,84966
$078584,92623
$078684,92523
$078884,92423
$078484,90323
$078784,83823
$078984,83523
$078384,75923
$072184,74464
$001584,08746

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

すべてのゲーム