NEStinymachines

Tetris (USA)

Tetris (USA) は MMC1 の基板に載り、プログラムは 32,768 バイト。電源投入から 6,400 歩のクロールが、新しいコードを見つけた道筋を 54 本残した。それらを 181,254 フレームにわたって再生すると、プログラムのうち 6,318 バイト、19 パーセントが実行された。

規則が名付けたもの

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

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

場所リスティングでの名前入り方回数何であるか、その証拠
$AC82 (バンク 0)b0_engine_AC82呼び出し194,840
ジャンプエンジン: テーブル 4、そこを通った跳躍 194,840
$AB69 (バンク 0)b0_poll_AB69呼び出し110,004
パッドの読み取り: ポート $4016、一フレームの読み 16、一フレームのストローブ 4
パッドの読み取り: ポート $4017、一フレームの読み 16、一フレームのストローブ 4
$AC6A (バンク 0)b0_sprites_AC6A呼び出し60,749
スプライトの書き手: 走ったフレーム 54,948、スプライトのページへの書き込み 15,521,454
$AB47 (バンク 0)b0_random_AB47呼び出し60,684
乱数のバイト: 走ったフレーム 55,002、バイト $0017,$0018、回転 2、排他的論理和 1
$8005 (バンク 0)b0_nmi毎フレーム(NMI)55,002
スクロールの書き手: 走ったフレーム 55,002、ブランク中の書き込み 109,960
$E000 (バンク 1)b1_sound_E000呼び出し55,002
サウンドドライバ: 走ったフレーム 54,734、書き込み 55,002
$82B1 (バンク 0)b0_dispatch_82B1テーブル37,643
スクロールの書き手: 走ったフレーム 37,643、ブランク中の書き込み 75,286
$9725 (バンク 0)b0_drain_9725呼び出し36,688
画面メモリへの書き手: 走ったフレーム 9,172、書き込み 26,800、ブランク中 26,800、描画中 0
$8C27 (バンク 0)b0_sprites_8C27呼び出し18,224
スプライトの書き手: 走ったフレーム 11,732、スプライトのページへの書き込み 199,848
$ACB7 (バンク 0)b0_bank_ACB7呼び出し9,574
バンク切り替え: 書き込み 47,870、ブランク中 1,100、描画中 46,770
$ACCB (バンク 0)b0_bank_ACCB呼び出し9,574
バンク切り替え: 書き込み 47,870、ブランク中 1,100、描画中 46,770
$94EE (バンク 0)b0_dispatch_94EEテーブル9,360
パレットの書き手: 走ったフレーム 9,360、書き込み 9,360
$8A0A (バンク 0)b0_sprites_8A0A呼び出し9,304
スプライトの書き手: 走ったフレーム 9,304、スプライトのページへの書き込み 150,282
$8BCE (バンク 0)b0_sprites_8BCE呼び出し9,304
スプライトの書き手: 走ったフレーム 9,304、スプライトのページへの書き込み 148,560
$AA98 (バンク 0)b0_palette_AA98呼び出し493
パレットの書き手: 走ったフレーム 468、書き込み 4,393
$ACA3 (バンク 0)b0_bank_ACA3呼び出し140
バンク切り替え: 書き込み 700、ブランク中 270、描画中 430
$ACDF (バンク 0)b0_bank_ACDF呼び出し54
バンク切り替え: 書き込み 270、ブランク中 270、描画中 0
$FF00 (バンク 1)b1_reset電源投入54
バンク切り替え: 書き込み 108、ブランク中 108、描画中 0
スプライトの書き手: 走ったフレーム 9,870、スプライトのページへの書き込み 13,824
$82D1 (バンク 0)b0_dispatch_82D1テーブル50
バンク切り替え: 書き込み 100、ブランク中 0、描画中 100
$83D7 (バンク 0)b0_dispatch_83D7テーブル36
バンク切り替え: 書き込み 72、ブランク中 0、描画中 72
$9808 (バンク 0)b0_palette_9808呼び出し22
パレットの書き手: 走ったフレーム 22、書き込み 176
$AB8B (バンク 0)呼び出し110,001
$8161 (バンク 0)呼び出し65,364
$819B (バンク 0)呼び出し65,170
$815D (バンク 0)テーブル65,168
$804B (バンク 0)呼び出し55,002
$9D51 (バンク 0)呼び出し55,002
$AB5E (バンク 0)呼び出し55,002
$AB9D (バンク 0)呼び出し55,002
$AA2F (バンク 0)呼び出し54,458
$E194 (バンク 1)呼び出し50,624
$E19C (バンク 1)呼び出し50,624
$E1AC (バンク 1)呼び出し50,624
$E1B9 (バンク 1)呼び出し50,624
$E583 (バンク 1)呼び出し50,624
$E5D0 (バンク 1)呼び出し29,077
$E766 (バンク 1)呼び出し29,077
$8174 (バンク 0)テーブル9,304
$8186 (バンク 0)テーブル9,304
$81B2 (バンク 0)呼び出し9,304
$8776 (バンク 0)呼び出し9,304
$87AE (バンク 0)呼び出し9,304
$8884 (バンク 0)テーブル9,304
$9CBF (バンク 0)テーブル9,304
$9E16 (バンク 0)テーブル9,304
$A37F (バンク 0)テーブル9,304
$9874 (バンク 0)呼び出し9,302
$9E27 (バンク 0)テーブル9,302
$81CF (バンク 0)テーブル8,367
$88AB (バンク 0)呼び出し8,367
$8914 (バンク 0)呼び出し8,367
$89AE (バンク 0)呼び出し8,367
$85DA (バンク 0)テーブル7,999
$E735 (バンク 1)呼び出し7,897
$EA41 (バンク 1)呼び出し5,058
$E072 (バンク 1)呼び出し4,509
$E0B5 (バンク 1)呼び出し4,013
$948B (バンク 0)呼び出し1,733
$84AE (バンク 0)呼び出し1,526
$9712 (バンク 0)呼び出し1,432
$E481 (バンク 1)テーブル1,282
$E39C (バンク 1)テーブル1,011
$9DE8 (バンク 0)呼び出し824
$E04B (バンク 1)呼び出し668
$E3DD (バンク 1)テーブル646
$E3B3 (バンク 1)テーブル552
$AA45 (バンク 0)呼び出し544
$E9EB (バンク 1)呼び出し509
$EA03 (バンク 1)呼び出し509
$AB21 (バンク 0)呼び出し493
$E637 (バンク 1)呼び出し446
$E271 (バンク 1)呼び出し363
$E425 (バンク 1)テーブル360
$E33B (バンク 1)呼び出し339
$9A6B (バンク 0)テーブル309
$AA52 (バンク 0)呼び出し270
$AA5F (バンク 0)呼び出し270
$AA6B (バンク 0)呼び出し270
$AA78 (バンク 0)呼び出し270
$AA8A (バンク 0)呼び出し270
$E253 (バンク 1)呼び出し255
$E390 (バンク 1)テーブル217
$AA82 (バンク 0)呼び出し216
$AC1C (バンク 0)呼び出し216
$E003 (バンク 1)呼び出し198
$977F (バンク 0)呼び出し188
$9E39 (バンク 0)テーブル178
$988E (バンク 0)テーブル142
$9CAF (バンク 0)呼び出し135
$9D17 (バンク 0)呼び出し133
$98EB (バンク 0)呼び出し110
$99A2 (バンク 0)テーブル110
$E287 (バンク 1)呼び出し110
$E473 (バンク 1)テーブル110
$9E07 (バンク 0)呼び出し107
$E247 (バンク 1)呼び出し104
$E6D7 (バンク 1)呼び出し104
$E3CA (バンク 1)テーブル93
$9969 (バンク 0)呼び出し88
$E417 (バンク 1)呼び出し86
$E43B (バンク 1)テーブル86
$9B03 (バンク 0)テーブル66
$9B58 (バンク 0)テーブル66
$A3F2 (バンク 0)テーブル66
$E3D1 (バンク 1)テーブル66
$E384 (バンク 1)テーブル56
$8200 (バンク 0)テーブル54
$824F (バンク 0)テーブル54
$A459 (バンク 0)呼び出し54
$E006 (バンク 1)呼び出し54
$E244 (バンク 1)呼び出し54
$9907 (バンク 0)呼び出し48
$9FF2 (バンク 0)呼び出し36
$85F0 (バンク 0)テーブル22
$86DC (バンク 0)テーブル22
$87DC (バンク 0)呼び出し22
$E41A (バンク 1)テーブル14
$E40E (バンク 1)テーブル10
$E42E (バンク 1)テーブル4
$9DF6 (バンク 0)テーブル2
$E403 (バンク 1)テーブル2

待つ場所

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

場所リスティングでの名前何であるか、その証拠
$828D (バンク 0)b0_wait_828D
フレーム待ち: 待つ相手のバイト $00F5、入った回数 54、周回 6,257、一周ごとの呼び出し 1、フレーム割り込みの下での書き込み 1,987,495、全フレーム 55,254
$A45B (バンク 0)b0_wait_A45B
フレーム待ち: 待つ相手のバイト $00C3、入った回数 54、周回 13,470、一周ごとの呼び出し 1、フレーム割り込みの下での書き込み 192,960、全フレーム 55,254
$AA37 (バンク 0)b0_wait_AA37
フレーム待ち: 待つ相手のバイト $0033、入った回数 54,458、周回 214,054,962、フレーム割り込みの下での書き込み 55,002、全フレーム 55,254
$AA4D (バンク 0)b0_wait_AA4D
フレーム待ち: 待つ相手のバイト $0033、入った回数 544、周回 2,062,901、フレーム割り込みの下での書き込み 55,002、全フレーム 55,254

ジャンプに使うテーブル

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

場所届き方項目選ばれた数選んだバイト
$8050 (バンク 0)呼び出しの直後43$00BD
$8166 (バンク 0)呼び出しの直後76$00C0
$81A0 (バンク 0)呼び出しの直後99$00A7
$81B7 (バンク 0)呼び出しの直後108$0068
$E015 (バンク 1)ポインタ経由2015

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

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

004080C0$0000$0100$0200$0300$0400$0500$0600$0700
コンソールのメモリ 2,048 バイト。一行が 256 バイト。 行の下の印は、最も忙しい共有バイト 24 個のうちの一つ。 二行目は、プロセッサがスタックを置くページだ。 添字で届いた範囲のうち、どの表にも属さないものは描いていない: メモリを消すループは、ほとんどすべてのバイトに届くからだ。

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

起点届いたバイト命令含まれる位置
$04002014
$05002012
$0700802
$02003210
$0040322
$0060322
$0000252
$0001241
$0730213
$03EF161
$03F0133
$03F1131

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

バイト読み書き書くルーチン読むルーチン
$000120,022,88066
$000020,021,49466
$00F53,633,96356
$0040641,25846
$0060614,13033
$00A7307,41066
$00E0242,90466
$00F7210,52435
$00ED204,16556
$00C0195,84366
$06F1152,55163
$0017152,20025
$06F5152,08933
$06F0151,98023
$06F2151,98023
$06F3151,98023
$00B1122,50026
$00FB110,11212
$00FF109,10466
$004985,52566
$06FD80,31634
$00A077,42953
$00A177,42953
$00EE73,29625

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

すべてのゲーム