NEStinymachines

Blaster Master (USA)

Blaster Master (USA) は MMC1 の基板に載り、プログラムは 131,072 バイト。電源投入から 8,000 歩のクロールが、新しいコードを見つけた道筋を 183 本残した。それらを 369,723 フレームにわたって再生すると、プログラムのうち 13,581 バイト、10 パーセントが実行された。

規則が名付けたもの

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

ゲームのコードに入った場所のすべて。呼び出し、割り込み、テーブル経由のジャンプのどれかで入る。規則が名付けたものを先に、規則が見たものと一緒に並べる。それらのリスティングでの名前は、何であるかを言う: poll (読み取り)、engine (エンジン)、drain (書き出し)。

場所リスティングでの名前入り方回数何であるか、その証拠
$E63C (バンク 7)b7_bank_E63C呼び出し1,465,820
バンク切り替え: 書き込み 7,329,095、ブランク中 28,017、描画中 7,301,078
$835C (バンク 5)b5_sound_835C呼び出し581,958
サウンドドライバ: 走ったフレーム 145,889、書き込み 225,687
$EC73 (バンク 7)b7_sprites_EC73呼び出し325,799
スプライトの書き手: 走ったフレーム 89,580、スプライトのページへの書き込み 6,779,728
$E914 (バンク 7)b7_poll_E914呼び出し310,426
パッドの読み取り: ポート $4016、一フレームの読み 15、一フレームのストローブ 3
パッドの読み取り: ポート $4017、一フレームの読み 15、一フレームのストローブ 3
$EF2B (バンク 7)b7_compare_EF2B呼び出し249,098
二つのものを比べる所: 命令 2、バイトの組 6、バイトの総数 8、比べた回数 2,865、横の位置のバイト $001C,$0472,$0480,$048E,$049C、縦の位置のバイト $001E,$0474,$049E
$EB98 (バンク 7)b7_drain_EB98呼び出し157,957
パレットの書き手: 走ったフレーム 158,149、書き込み 4,919,582
画面メモリへの書き手: 走ったフレーム 158,149、書き込み 4,919,582、ブランク中 4,919,582、描画中 0
$E650 (バンク 7)b7_bank_E650呼び出し155,393
バンク切り替え: 書き込み 776,964、ブランク中 776,964、描画中 0
$E664 (バンク 7)b7_bank_E664呼び出し155,393
バンク切り替え: 書き込み 776,965、ブランク中 776,965、描画中 0
$E6BF (バンク 7)b7_scroll_E6BF呼び出し155,393
スクロールの書き手: 走ったフレーム 155,393、ブランク中の書き込み 310,786
$EC61 (バンク 7)b7_sprites_EC61呼び出し155,393
スプライトの書き手: 走ったフレーム 156,300、スプライトのページへの書き込み 9,940,736
$C7D8 (バンク 7)b7_sprites_C7D8呼び出し47,888
スプライトの書き手: 走ったフレーム 48,099、スプライトのページへの書き込み 1,532,414
$F668 (バンク 7)b7_sprites_F668呼び出し40,043
スプライトの書き手: 走ったフレーム 40,043、スプライトのページへの書き込み 1,498,072
$F88C (バンク 7)b7_sprites_F88C呼び出し540
スプライトの書き手: 走ったフレーム 540、スプライトのページへの書き込み 15,112
$E678 (バンク 7)b7_bank_E678呼び出し183
バンク切り替え: 書き込み 915、ブランク中 915、描画中 0
$E68C (バンク 7)b7_bank_E68C呼び出し183
バンク切り替え: 書き込み 183、ブランク中 183、描画中 0
$FFF4 (バンク 7)b7_reset電源投入183
バンク切り替え: 書き込み 366、ブランク中 366、描画中 0
スプライトの書き手: 走ったフレーム 49,898、スプライトのページへの書き込み 46,848
$BDF6 (バンク 5)呼び出し1,318,361
$808C (バンク 5)呼び出し1,262,208
$E61B (バンク 7)呼び出し878,627
$82CE (バンク 5)呼び出し581,958
$F0BC (バンク 7)呼び出し534,826
$EA3A (バンク 7)呼び出し514,086
$E9A2 (バンク 7)呼び出し417,792
$EB51 (バンク 7)呼び出し290,997
$F029 (バンク 7)呼び出し278,175
$EFD7 (バンク 7)呼び出し249,098
$C928 (バンク 7)呼び出し243,570
$C8DF (バンク 7)呼び出し243,445
$C9A4 (バンク 7)呼び出し243,236
$DC47 (バンク 7)呼び出し220,040
$DCDD (バンク 7)呼び出し207,134
$E996 (バンク 7)呼び出し205,762
$ECB4 (バンク 7)呼び出し192,090
$F1CA (バンク 7)呼び出し160,430
$EB7E (バンク 7)毎フレーム(NMI)157,957
$BE23 (バンク 5)呼び出し157,776
$DEEB (バンク 7)呼び出し157,776
$E697 (バンク 7)呼び出し155,393
$E936 (バンク 7)呼び出し155,393
$E287 (バンク 7)呼び出し155,212
$E2C1 (バンク 7)呼び出し155,212
$E8A9 (バンク 7)呼び出し155,212
$E895 (バンク 7)呼び出し154,145
$8127 (バンク 6)テーブル149,264
$F011 (バンク 7)呼び出し144,359
$D2AB (バンク 7)呼び出し102,999
$D9F5 (バンク 7)呼び出し101,063
$D1A4 (バンク 7)呼び出し94,860
$CD0A (バンク 7)呼び出し94,530
$CDD0 (バンク 7)呼び出し74,103
$EB14 (バンク 7)呼び出し73,633
$D40B (バンク 7)呼び出し72,381
$D3A3 (バンク 7)呼び出し72,259
$D3F8 (バンク 7)呼び出し72,247
$D394 (バンク 7)呼び出し71,988
$D2FE (バンク 7)呼び出し66,249
$D2DE (バンク 7)呼び出し63,062
$D9D3 (バンク 7)呼び出し56,538
$EA3C (バンク 7)呼び出し53,698
$D798 (バンク 7)呼び出し51,700
$C642 (バンク 7)呼び出し47,888
$C8AE (バンク 7)呼び出し47,888
$C971 (バンク 7)呼び出し47,888
$CA4B (バンク 7)呼び出し47,888
$D883 (バンク 7)呼び出し47,888
$D18D (バンク 7)呼び出し47,430
$CC6D (バンク 7)呼び出し47,265
$D1AD (バンク 7)呼び出し47,265
$CBDF (バンク 7)呼び出し47,100
$D3DE (バンク 7)呼び出し45,564
$D37A (バンク 7)呼び出し45,442
$D7A0 (バンク 7)呼び出し44,721
$DC51 (バンク 7)呼び出し43,780
$D2B1 (バンク 7)呼び出し42,598
$D256 (バンク 7)呼び出し40,088
$894E (バンク 6)呼び出し38,549
$96A2 (バンク 6)呼び出し37,528
$8E32 (バンク 6)呼び出し37,108
$92DE (バンク 6)テーブル37,108
$96C2 (バンク 6)呼び出し37,108
$CF07 (バンク 7)呼び出し37,108
$9641 (バンク 6)呼び出し37,038
$96D5 (バンク 6)呼び出し37,038
$96EB (バンク 6)呼び出し37,038
$D21D (バンク 7)呼び出し37,003
$D9AF (バンク 7)呼び出し32,136
$A2FA (バンク 6)呼び出し31,517
$A30A (バンク 6)呼び出し31,390
$D697 (バンク 7)呼び出し31,390
$D6CD (バンク 7)呼び出し31,390
$E04E (バンク 7)呼び出し31,002
$CCE8 (バンク 7)呼び出し30,389
$CCFF (バンク 7)呼び出し28,300
$888C (バンク 6)呼び出し28,229
$D37D (バンク 7)呼び出し26,817
$D3E1 (バンク 7)呼び出し26,817
$DCB2 (バンク 7)呼び出し22,464
$F19B (バンク 7)呼び出し20,212
$EB71 (バンク 7)呼び出し19,408
$CCF9 (バンク 7)呼び出し18,965
$CCEF (バンク 7)呼び出し16,876
$E083 (バンク 7)呼び出し16,650
$DF68 (バンク 7)呼び出し16,049
$A871 (バンク 6)テーブル15,617
$E02F (バンク 7)呼び出し15,617
$A7F1 (バンク 6)テーブル14,155
$E74D (バンク 7)呼び出し12,845
$E974 (バンク 7)呼び出し11,541
$DCD4 (バンク 7)呼び出し11,232
$F1BC (バンク 7)呼び出し11,180
$E775 (バンク 7)呼び出し11,134
$D327 (バンク 7)呼び出し10,167
$D349 (バンク 7)呼び出し10,167
$DF84 (バンク 7)呼び出し10,167
$DFA0 (バンク 7)呼び出し10,167
$E0A5 (バンク 7)呼び出し10,167
$E986 (バンク 7)呼び出し9,702
$85E2 (バンク 6)呼び出し8,413
$950D (バンク 6)呼び出し8,359
$815F (バンク 6)テーブル8,350
$880B (バンク 6)呼び出し8,334
$D975 (バンク 7)呼び出し6,433
$D98C (バンク 7)呼び出し6,433
$D71F (バンク 7)呼び出し5,598
$8624 (バンク 6)呼び出し5,588
$9C6B (バンク 6)テーブル5,231
$DA15 (バンク 7)呼び出し5,029
$D95E (バンク 7)呼び出し4,942
$DC2D (バンク 7)呼び出し4,866
$DB98 (バンク 7)呼び出し4,779
$D2DB (バンク 7)呼び出し4,035
$E4FD (バンク 7)呼び出し3,588
$978B (バンク 6)テーブル3,530
$E4AB (バンク 7)呼び出し3,352
$8124 (バンク 6)テーブル3,067
$E704 (バンク 7)呼び出し2,982
$F19F (バンク 7)呼び出し2,363
$E182 (バンク 7)呼び出し2,212
$E196 (バンク 7)呼び出し2,212
$BFE8 (バンク 5)呼び出し2,132
$DECC (バンク 7)呼び出し2,009
$E6FA (バンク 7)呼び出し1,972
$F771 (バンク 7)呼び出し1,928
$ED12 (バンク 7)呼び出し1,620
$92DB (バンク 6)テーブル1,511
$D908 (バンク 7)呼び出し1,491
$E308 (バンク 7)呼び出し1,485
$DAC4 (バンク 7)呼び出し1,404
$F1A3 (バンク 7)呼び出し1,404
$E0ED (バンク 7)呼び出し1,230
$E6F0 (バンク 7)呼び出し1,145
$E1D5 (バンク 7)呼び出し979
$8853 (バンク 6)テーブル970
$F192 (バンク 7)呼び出し826
$E0C7 (バンク 7)呼び出し759
$EA03 (バンク 7)呼び出し737
$CE0F (バンク 7)呼び出し735
$E93F (バンク 7)呼び出し735
$BE17 (バンク 5)呼び出し551
$BFE5 (バンク 5)呼び出し551
$DEC2 (バンク 7)呼び出し551
$DF05 (バンク 7)呼び出し551
$DF0A (バンク 7)呼び出し551
$CE27 (バンク 7)呼び出し514
$B2EF (バンク 6)テーブル505
$D2B9 (バンク 7)呼び出し500
$E1BD (バンク 7)呼び出し474
$E1D2 (バンク 7)呼び出し474
$EDF5 (バンク 7)呼び出し452
$B192 (バンク 6)テーブル435
$B1DE (バンク 6)呼び出し432
$8562 (バンク 6)テーブル427
$B2AB (バンク 6)テーブル414
$E949 (バンク 7)呼び出し408
$E953 (バンク 7)呼び出し408
$E0FA (バンク 7)呼び出し378
$9EE3 (バンク 6)テーブル366
$A53D (バンク 6)テーブル339
$A670 (バンク 6)呼び出し339
$CE3C (バンク 7)呼び出し339
$E107 (バンク 7)呼び出し339
$E120 (バンク 7)呼び出し333
$D790 (バンク 7)呼び出し321
$9BAD (バンク 6)テーブル314
$9BF0 (バンク 6)テーブル291
$D7CF (バンク 7)呼び出し271
$AC66 (バンク 6)テーブル262
$D7C0 (バンク 7)呼び出し251
$8C67 (バンク 6)テーブル240
$E4A6 (バンク 7)呼び出し240
$D7B6 (バンク 7)呼び出し233
$D136 (バンク 7)呼び出し212
$E87C (バンク 7)呼び出し192
$CE2E (バンク 7)呼び出し187
$E9A6 (バンク 7)呼び出し187
$F45D (バンク 7)呼び出し187
$F547 (バンク 7)呼び出し187
$F58F (バンク 7)呼び出し187
$F9CA (バンク 7)呼び出し187
$CDBA (バンク 7)呼び出し175
$E9CF (バンク 7)呼び出し171
$F5D9 (バンク 7)呼び出し171
$F67C (バンク 7)呼び出し171
$D7E3 (バンク 7)呼び出し168
$C659 (バンク 7)呼び出し165
$C6EF (バンク 7)呼び出し165
$CC35 (バンク 7)呼び出し165
$DCFC (バンク 7)呼び出し165
$E823 (バンク 7)呼び出し165
$CE82 (バンク 7)呼び出し164
$C772 (バンク 7)呼び出し163
$C9D6 (バンク 7)呼び出し163
$E692 (バンク 7)呼び出し163
$F7D1 (バンク 7)呼び出し163
$9707 (バンク 6)呼び出し161
$9770 (バンク 6)テーブル161
$CBA9 (バンク 7)呼び出し161
$E243 (バンク 7)呼び出し161
$C5B2 (バンク 7)呼び出し160
$CA14 (バンク 7)呼び出し160
$A2E9 (バンク 6)呼び出し127
$867A (バンク 6)テーブル122
$A7CE (バンク 6)テーブル114
$E862 (バンク 7)呼び出し96
$EAE9 (バンク 7)呼び出し96
$88E9 (バンク 6)呼び出し70
$815C (バンク 6)テーブル63
$A7EE (バンク 6)テーブル45
$D238 (バンク 7)呼び出し40
$D1EF (バンク 7)呼び出し38
$A86E (バンク 6)テーブル36
$882D (バンク 6)テーブル35
$A634 (バンク 6)呼び出し33
$E6E9 (バンク 7)呼び出し32
$E9B8 (バンク 7)呼び出し32
$F833 (バンク 7)呼び出し32
$F90B (バンク 7)呼び出し32
$F927 (バンク 7)呼び出し32
$F9A5 (バンク 7)呼び出し32
$9B81 (バンク 6)呼び出し27
$9B98 (バンク 6)テーブル27
$A53A (バンク 6)テーブル27
$855F (バンク 6)テーブル25
$8C64 (バンク 6)テーブル24
$9BDB (バンク 6)テーブル24
$D804 (バンク 7)呼び出し22
$D283 (バンク 7)呼び出し20
$8677 (バンク 6)テーブル18
$8850 (バンク 6)テーブル18
$9788 (バンク 6)テーブル18
$9BAA (バンク 6)テーブル18
$A7CB (バンク 6)テーブル18
$E4BB (バンク 7)呼び出し18
$E4E0 (バンク 7)呼び出し18
$DF0F (バンク 7)呼び出し17
$DF27 (バンク 7)呼び出し17
$E3D1 (バンク 7)呼び出し17
$E07B (バンク 7)呼び出し16
$E355 (バンク 7)呼び出し14
$9C1F (バンク 6)テーブル12
$E4EE (バンク 7)呼び出し12
$9BED (バンク 6)テーブル9
$9C68 (バンク 6)テーブル9
$D82C (バンク 7)呼び出し7
$E309 (バンク 7)呼び出し7
$E005 (バンク 7)呼び出し6
$A29E (バンク 6)呼び出し5
$AC3F (バンク 6)テーブル5
$9EC2 (バンク 6)テーブル4
$C5FA (バンク 7)呼び出し4
$DF46 (バンク 7)呼び出し4
$E38A (バンク 7)呼び出し4
$A511 (バンク 6)テーブル3
$B171 (バンク 6)テーブル3
$9B90 (バンク 6)呼び出し2
$B29E (バンク 6)テーブル2
$D246 (バンク 7)呼び出し2
$E797 (バンク 7)呼び出し2
$E3F0 (バンク 7)呼び出し1
$F71C (バンク 7)呼び出し1

待つ場所

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

場所リスティングでの名前何であるか、その証拠
$E93A (バンク 7)b7_wait_E93A
フレーム待ち: 待つ相手のバイト $0012、入った回数 155,342、周回 469,638,754、フレーム割り込みの下での書き込み 1,912,657、全フレーム 159,303
$F647 (バンク 7)b7_wait_F647
フレーム待ち: 待つ相手のバイト $00E0、入った回数 161、周回 24,632、一周ごとの呼び出し 1、フレーム割り込みの下での書き込み 652、全フレーム 159,303
$F872 (バンク 7)b7_wait_F872
フレーム待ち: 待つ相手のバイト $00F3、入った回数 12、周回 536、一周ごとの呼び出し 2、フレーム割り込みの下での書き込み 155,212、全フレーム 159,303

ジャンプに使うテーブル

ゲームがその中から一つを選ぶ、アドレスのテーブル。ジャンプエンジンへの呼び出しの直後にあるものもあれば、カートリッジのどこかにあるものもある。後者は、ゲームが通って跳んだアドレスがどこから読み込まれたかで見つける。アドレスを積んでそこへ戻ることで跳ぶゲームもあれば、テーブルを二つに分けて、アドレスの下位バイトをある場所に、上位バイトを別の場所に置くゲームもある。どちらも同じやり方で見つける。項目は、走行が選ぶのを見た所までを数える。本当のテーブルはもっと長いかもしれない。最後の列は、その値が項目を選んだメモリのバイトで、追えた場合だけ書いてある: ゲームのモードか、物体の一つが今していることだ。

場所届き方項目選ばれた数選んだバイト
$8002 (バンク 6)ポインタ経由9715$0470, $049A, $047E, $048C

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

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

004080C0$0000$0100$0200$0300$0400$0500$0600$07001+↓XY2XY
コンソールのメモリ 2,048 バイト。一行が 256 バイト。 番号の付いた帯は、下に描いた物体の表の列の一つで、番号は下の並び順と同じ。長さは表と同じで、塗り方も下の図と同じだ。表の列どうしが重なる所では、ものが一つずつ、それぞれの性質をすべて持って順に並んでいるので、表は一つの輪郭として描き、性質が始まる所ごとに印を付けてある。 濃い四角は、規則が比較を見た位置。 行の下の印は、最も忙しい共有バイト 24 個のうちの一つ。 二行目は、プロセッサがスタックを置くページだ。 添字で届いた範囲のうち、どの表にも属さないものは描いていない: メモリを消すループは、ほとんどすべてのバイトに届くからだ。

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

起点届いたバイト命令含まれる位置
$04012253横 4、縦 2
$00011231横 1、縦 1
$030025617
$040025617
$050025616
$070025615
$060025610
$00002568
$02002564
$04022254
$04032254
$04062254

位置と一緒に動くもの

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

0481216202428$0000+↓+224$0001XY+91
表 1: 2 個のルーチンが一緒にたどる、最大 123 枠の配列 2 本。列はそれぞれのアドレスにある配列、行は枠で、画面上のもの一つが、すべての列を横切る一行になる。 123 枠のうち最初の 32 枠を描いてある。 列の下の数は、その配列が表の長さを超えて届いたバイト数。 X と Y は位置で、濃い四角は規則が比較を見た枠。+ は位置に足し込まれる配列で、速度がすることだ。→ はジャンプを選んだ配列で、状態や種類がすることだ。↓ は減らされる一方の配列で、タイマーがすることだ。輪郭だけの列は一緒に動くが、まだ名付けていない。
0481216202428$0400+224$0401XY+193$0402+193$0403+193$0404+193$0405+193$0406+193$0407+193$0408+193$0409+193$040A+193$040B+193$040C+193$040D+193
表 2: 3 個のルーチンが一緒にたどる、最大 225 枠の配列 14 本。列はそれぞれのアドレスにある配列、行は枠で、画面上のもの一つが、すべての列を横切る一行になる。 225 枠のうち最初の 32 枠を描いてある。 列の下の数は、その配列が表の長さを超えて届いたバイト数。 X と Y は位置で、濃い四角は規則が比較を見た枠。+ は位置に足し込まれる配列で、速度がすることだ。→ はジャンプを選んだ配列で、状態や種類がすることだ。↓ は減らされる一方の配列で、タイマーがすることだ。輪郭だけの列は一緒に動くが、まだ名付けていない。
枠配列ルーチン横の位置縦の位置位置に足し込まれる配列ジャンプを選ぶ配列減らされる一方の配列一緒に動く配列
12322$0001$0001$0000$0000$0000
225143$0401$0401$0400, $0402, $0403, $0404, $0405, $0406, $0407, $0408, $0409, $040A, $040B, $040C, $040D

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

バイト読み書き書くルーチン読むルーチン
$0012433,471,93666
$007A17,191,36066
$007B14,534,07666
$003F9,389,75766
$00F79,284,37636
$003E8,977,38666
$00448,550,39366
$00F88,225,99722
$00006,857,97966
$00585,625,42843
$00573,606,06936
$00453,481,84966
$00563,132,09745
$00DB2,458,88566
$00011,840,00166
$00491,787,74966
$001D1,644,41136
$00FF1,617,44166
$00F51,563,39424
$004A1,494,66266
$00481,363,00566
$00461,355,40166
$00E91,320,67623
$004B1,267,64366

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

すべてのゲーム