Q-bert (USA)
Q-bert (USA) は CNROM の基板に載り、プログラムは 32,768 バイト。電源投入から 6,400 歩のクロールが、新しいコードを見つけた道筋を 56 本残した。それらを 251,556 フレームにわたって再生すると、プログラムのうち 8,718 バイト、27 パーセントが実行された。
規則が名付けたもの
- パッドの読み取り: 2
- 待機のループ: 1
- 割り込みの中のゲーム: 1
- ジャンプエンジン: 1
- バンク切り替え: 3
- 画面メモリへの書き手: 1
- パレットの書き手: 1
- スプライトの書き手: 5
- スクロールの書き手: 1
- サウンドドライバ: 1
- 乱数のバイト: 1
- 二つのものを比べる所: 4
走行が入った 227 個のルーチン
ゲームのコードに入った場所のすべて。呼び出し、割り込み、テーブル経由のジャンプのどれかで入る。規則が名付けたものを先に、規則が見たものと一緒に並べる。それらのリスティングでの名前は、何であるかを言う: poll (読み取り)、engine (エンジン)、drain (書き出し)。
| 場所 | リスティングでの名前 | 入り方 | 回数 | 何であるか、その証拠 |
|---|---|---|---|---|
| $911E | sprites_911E | 呼び出し | 1,304,277 | スプライトの書き手: 走ったフレーム 81,519、スプライトのページへの書き込み 3,237,903 |
| $91EC | sprites_91EC | 呼び出し | 1,079,301 | スプライトの書き手: 走ったフレーム 66,686、スプライトのページへの書き込み 1,079,299 |
| $8207 | engine_8207 | 呼び出し | 282,967 | ジャンプエンジン: テーブル 18、そこを通った跳躍 282,967 |
| $CE58 | sound_CE58 | 呼び出し | 179,428 | サウンドドライバ: 走ったフレーム 45,282、書き込み 15,987 |
| $CC12 | poll_CC12 | 呼び出し | 163,051 | パッドの読み取り: ポート $4016、一フレームの読み 16、一フレームのストローブ 4 パッドの読み取り: ポート $4017、一フレームの読み 16、一フレームのストローブ 4 |
| $CAF5 | nmi | 毎フレーム(NMI) | 81,735 | 割り込みの中のゲーム: 走ったフレーム 81,791、全フレーム 82,296、待機の場所 $CAF2 |
| $90A5 | drain_90A5 | 呼び出し | 81,573 | パレットの書き手: 走ったフレーム 81,573、書き込み 7,136 画面メモリへの書き手: 走ったフレーム 81,573、書き込み 257,177、ブランク中 256,645、描画中 532 |
| $CB69 | scroll_CB69 | 呼び出し | 81,573 | スクロールの書き手: 走ったフレーム 81,545、ブランク中の書き込み 163,090 |
| $8000 | random_8000 | 呼び出し | 81,525 | 乱数のバイト: 走ったフレーム 80,637、バイト $003C,$003D、回転 2、排他的論理和 1 |
| $9292 | sprites_9292 | 呼び出し | 81,520 | スプライトの書き手: 走ったフレーム 81,519、スプライトのページへの書き込み 4,137,789 |
| $BA3C | compare_BA3C | 呼び出し | 11,684 | 二つのものを比べる所: 命令 2、バイトの組 25、バイトの総数 20、比べた回数 12,986、横の位置のバイト $0480,$0482,$0483,$0484,$0485,$0490,$0492,$0493,$0494,$0495、縦の位置のバイト $0460,$0462,$0463,$0464,$0465,$0470,$0472,$0473,$0474,$0475 |
| $B39E | dispatch_B39E | テーブル | 2,654 | 二つのものを比べる所: 命令 1、バイトの組 6、バイトの総数 5、比べた回数 373、横の位置のバイト $0480,$0482,$0483,$0484,$0490 |
| $B4D7 | dispatch_B4D7 | テーブル | 2,150 | 二つのものを比べる所: 命令 3、バイトの組 9、バイトの総数 9、比べた回数 4,211、横の位置のバイト $0480,$0482,$0490、縦の位置のバイト $0460,$0462,$0463,$0464,$0465,$0470 |
| $E88D | sprites_E88D | 呼び出し | 971 | スプライトの書き手: 走ったフレーム 971、スプライトのページへの書き込み 971 |
| $B404 | dispatch_B404 | テーブル | 743 | 二つのものを比べる所: 命令 1、バイトの組 2、バイトの総数 3、比べた回数 328、縦の位置のバイト $0460,$0462,$0470 |
| $CC3B | bank_CC3B | 呼び出し | 194 | バンク切り替え: 書き込み 388、ブランク中 4、描画中 384 |
| $CA85 | reset | 電源投入 | 56 | バンク切り替え: 書き込み 112、ブランク中 112、描画中 0 スプライトの書き手: 走ったフレーム 81,791、スプライトのページへの書き込み 14,336 |
| $CC37 | bank_CC37 | 呼び出し | 56 | バンク切り替え: 書き込み 112、ブランク中 0、描画中 112 |
| $9329 | 呼び出し | 1,160,818 | ||
| $8452 | 呼び出し | 664,576 | ||
| $D3CD | 呼び出し | 179,428 | ||
| $D430 | 呼び出し | 104,220 | ||
| $CE35 | 呼び出し | 98,459 | ||
| $D4C9 | 呼び出し | 91,411 | ||
| $CB9F | 呼び出し | 81,573 | ||
| $CBB5 | 呼び出し | 81,530 | ||
| $CD6C | 呼び出し | 81,530 | ||
| $CDDA | 呼び出し | 81,530 | ||
| $CE3C | 呼び出し | 81,530 | ||
| $CBDB | 呼び出し | 81,526 | ||
| $84FD | 呼び出し | 81,517 | ||
| $CBF7 | 呼び出し | 81,500 | ||
| $9C73 | テーブル | 50,426 | ||
| $D20E | 呼び出し | 47,694 | ||
| $D237 | 呼び出し | 47,694 | ||
| $D1A7 | 呼び出し | 35,214 | ||
| $D1C6 | 呼び出し | 35,214 | ||
| $9CDC | テーブル | 31,422 | ||
| $E510 | 呼び出し | 31,390 | ||
| $D252 | 呼び出し | 29,546 | ||
| $E8B9 | 呼び出し | 26,880 | ||
| $E8E0 | 呼び出し | 26,196 | ||
| $E85F | 呼び出し | 26,096 | ||
| $8132 | 呼び出し | 24,896 | ||
| $E4E9 | 呼び出し | 23,441 | ||
| $E5D4 | テーブル | 22,899 | ||
| $E611 | テーブル | 21,912 | ||
| $84F4 | 呼び出し | 18,620 | ||
| $8220 | 呼び出し | 18,021 | ||
| $84A1 | 呼び出し | 17,911 | ||
| $C4FF | 呼び出し | 15,395 | ||
| $C272 | 呼び出し | 14,309 | ||
| $D0B7 | 呼び出し | 14,270 | ||
| $811C | テーブル | 14,095 | ||
| $802D | テーブル | 12,958 | ||
| $D1D3 | 呼び出し | 12,483 | ||
| $C1F1 | 呼び出し | 12,376 | ||
| $C7C8 | 呼び出し | 12,213 | ||
| $A1A4 | 呼び出し | 11,809 | ||
| $9EF1 | テーブル | 11,721 | ||
| $E4C6 | 呼び出し | 11,721 | ||
| $C12E | 呼び出し | 11,720 | ||
| $B9C3 | 呼び出し | 11,574 | ||
| $A7C5 | 呼び出し | 11,552 | ||
| $A880 | 呼び出し | 11,552 | ||
| $B123 | 呼び出し | 11,552 | ||
| $C28E | テーブル | 11,416 | ||
| $C29D | 呼び出し | 11,416 | ||
| $C54A | 呼び出し | 10,771 | ||
| $B17E | 呼び出し | 10,060 | ||
| $C286 | テーブル | 9,591 | ||
| $C4E3 | 呼び出し | 9,133 | ||
| $C216 | テーブル | 8,155 | ||
| $C4C4 | 呼び出し | 8,155 | ||
| $C55F | 呼び出し | 7,985 | ||
| $E6D6 | テーブル | 7,508 | ||
| $C56A | 呼び出し | 7,410 | ||
| $81B5 | 呼び出し | 6,436 | ||
| $9D9A | テーブル | 5,600 | ||
| $CC8E | 呼び出し | 4,767 | ||
| $BCE7 | 呼び出し | 4,704 | ||
| $C555 | 呼び出し | 4,624 | ||
| $B1D3 | テーブル | 4,300 | ||
| $E741 | テーブル | 4,185 | ||
| $E7A3 | 呼び出し | 4,185 | ||
| $D3E7 | テーブル | 4,053 | ||
| $A8C1 | 呼び出し | 4,041 | ||
| $D2BA | テーブル | 3,854 | ||
| $80AE | テーブル | 3,834 | ||
| $B1B3 | テーブル | 3,712 | ||
| $BFD9 | 呼び出し | 3,544 | ||
| $C243 | 呼び出し | 2,984 | ||
| $C268 | 呼び出し | 2,878 | ||
| $EF72 | 呼び出し | 2,801 | ||
| $EF88 | 呼び出し | 2,800 | ||
| $E796 | テーブル | 2,704 | ||
| $B4F3 | テーブル | 2,605 | ||
| $84EE | 呼び出し | 2,334 | ||
| $84F6 | 呼び出し | 2,334 | ||
| $F01B | テーブル | 1,985 | ||
| $A9B6 | 呼び出し | 1,957 | ||
| $D1FD | 呼び出し | 1,788 | ||
| $BFAD | 呼び出し | 1,772 | ||
| $9E0D | テーブル | 1,676 | ||
| $BC73 | 呼び出し | 1,568 | ||
| $BC82 | 呼び出し | 1,568 | ||
| $BDCB | 呼び出し | 1,568 | ||
| $BDD9 | 呼び出し | 1,568 | ||
| $BDE7 | 呼び出し | 1,568 | ||
| $BDF5 | 呼び出し | 1,568 | ||
| $C145 | 呼び出し | 1,492 | ||
| $C190 | 呼び出し | 1,492 | ||
| $C196 | 呼び出し | 1,492 | ||
| $E81A | 呼び出し | 1,406 | ||
| $B4E7 | テーブル | 1,374 | ||
| $B233 | テーブル | 1,339 | ||
| $D370 | テーブル | 1,108 | ||
| $D39C | 呼び出し | 1,000 | ||
| $A1C9 | テーブル | 962 | ||
| $D38F | 呼び出し | 856 | ||
| $D2C1 | テーブル | 806 | ||
| $C21F | テーブル | 787 | ||
| $C2F7 | 呼び出し | 786 | ||
| $E59A | テーブル | 784 | ||
| $E5AF | テーブル | 784 | ||
| $B1C3 | テーブル | 709 | ||
| $CEBE | 呼び出し | 674 | ||
| $E94D | 呼び出し | 642 | ||
| $C2AF | テーブル | 599 | ||
| $C33E | 呼び出し | 599 | ||
| $E575 | 呼び出し | 594 | ||
| $CBC3 | 呼び出し | 584 | ||
| $C23C | 呼び出し | 580 | ||
| $A222 | テーブル | 561 | ||
| $CB89 | 呼び出し | 533 | ||
| $E5DF | テーブル | 495 | ||
| $E5FA | テーブル | 492 | ||
| $9E73 | テーブル | 476 | ||
| $CD57 | 呼び出し | 418 | ||
| $C000 | 呼び出し | 408 | ||
| $A217 | テーブル | 384 | ||
| $B6C0 | 呼び出し | 381 | ||
| $D2D4 | テーブル | 379 | ||
| $E940 | 呼び出し | 322 | ||
| $E730 | テーブル | 300 | ||
| $9E1F | テーブル | 297 | ||
| $F0A6 | テーブル | 256 | ||
| $814C | 呼び出し | 253 | ||
| $B73D | 呼び出し | 236 | ||
| $F102 | 呼び出し | 232 | ||
| $83E0 | 呼び出し | 228 | ||
| $C37D | テーブル | 215 | ||
| $EFDA | テーブル | 200 | ||
| $E51D | テーブル | 199 | ||
| $E918 | 呼び出し | 198 | ||
| $83E4 | 呼び出し | 193 | ||
| $9E2B | テーブル | 174 | ||
| $F04E | テーブル | 148 | ||
| $D3DA | 呼び出し | 144 | ||
| $D340 | テーブル | 138 | ||
| $9E23 | テーブル | 132 | ||
| $8143 | 呼び出し | 121 | ||
| $8303 | 呼び出し | 117 | ||
| $B31E | テーブル | 116 | ||
| $CC56 | 呼び出し | 115 | ||
| $E645 | 呼び出し | 115 | ||
| $81D4 | 呼び出し | 114 | ||
| $B267 | テーブル | 113 | ||
| $E70D | テーブル | 100 | ||
| $E6E9 | テーブル | 99 | ||
| $B243 | テーブル | 94 | ||
| $B37F | テーブル | 93 | ||
| $D2EB | テーブル | 90 | ||
| $E77F | テーブル | 87 | ||
| $EFFD | テーブル | 80 | ||
| $A2CA | テーブル | 78 | ||
| $C448 | 呼び出し | 72 | ||
| $F072 | テーブル | 72 | ||
| $9E27 | テーブル | 70 | ||
| $B665 | テーブル | 64 | ||
| $A871 | 呼び出し | 62 | ||
| $A913 | 呼び出し | 62 | ||
| $A99C | 呼び出し | 62 | ||
| $AA50 | 呼び出し | 62 | ||
| $AA6A | 呼び出し | 62 | ||
| $83BA | 呼び出し | 59 | ||
| $9E9D | 呼び出し | 58 | ||
| $8157 | テーブル | 56 | ||
| $8174 | テーブル | 56 | ||
| $817F | テーブル | 56 | ||
| $9E5D | 呼び出し | 56 | ||
| $BC24 | 呼び出し | 56 | ||
| $BE1C | 呼び出し | 56 | ||
| $CA8A | 割り込み(IRQ) | 56 | ||
| $CB53 | 呼び出し | 56 | ||
| $9CA8 | 呼び出し | 55 | ||
| $B149 | 呼び出し | 54 | ||
| $9CE7 | テーブル | 52 | ||
| $80F2 | テーブル | 50 | ||
| $8107 | テーブル | 50 | ||
| $81CF | 呼び出し | 50 | ||
| $81D8 | 呼び出し | 50 | ||
| $8236 | 呼び出し | 43 | ||
| $8290 | 呼び出し | 39 | ||
| $E6FB | テーブル | 33 | ||
| $9D20 | テーブル | 30 | ||
| $8265 | 呼び出し | 28 | ||
| $9E41 | テーブル | 28 | ||
| $9EC8 | テーブル | 28 | ||
| $BBE2 | 呼び出し | 28 | ||
| $C77A | 呼び出し | 28 | ||
| $B2B3 | テーブル | 27 | ||
| $B2F7 | テーブル | 27 | ||
| $EFCC | テーブル | 25 | ||
| $EFE5 | テーブル | 25 | ||
| $C356 | テーブル | 19 | ||
| $C806 | 呼び出し | 18 | ||
| $A1D4 | テーブル | 17 | ||
| $C219 | 呼び出し | 15 | ||
| $C42F | 呼び出し | 15 | ||
| $E908 | 呼び出し | 9 | ||
| $C451 | 呼び出し | 6 | ||
| $EFA2 | テーブル | 5 | ||
| $F037 | テーブル | 4 | ||
| $C459 | テーブル | 3 | ||
| $C49D | テーブル | 2 | ||
| $CD9B | 呼び出し | 1 |
待つ場所
規則が名付けたループのうち、ルーチンの内側にあって、それ自身はコードの入口ではないもの。
| 場所 | リスティングでの名前 | 何であるか、その証拠 |
|---|---|---|
| $CAF2 | spin_CAF2 | 待機のループ: 周回 550,559,895、一フレームの周回 6,689 |
ジャンプに使うテーブル
ゲームがその中から一つを選ぶ、アドレスのテーブル。ジャンプエンジンへの呼び出しの直後にあるものもあれば、カートリッジのどこかにあるものもある。後者は、ゲームが通って跳んだアドレスがどこから読み込まれたかで見つける。アドレスを積んでそこへ戻ることで跳ぶゲームもあれば、テーブルを二つに分けて、アドレスの下位バイトをある場所に、上位バイトを別の場所に置くゲームもある。どちらも同じやり方で見つける。項目は、走行が選ぶのを見た所までを数える。本当のテーブルはもっと長いかもしれない。最後の列は、その値が項目を選んだメモリのバイトで、追えた場合だけ書いてある: ゲームのモードか、物体の一つが今していることだ。
| 場所 | 届き方 | 項目 | 選ばれた数 | 選んだバイト |
|---|---|---|---|---|
| $801B | 呼び出しの直後 | 9 | 8 | $0018 |
| $8179 | 呼び出しの直後 | 1 | 1 | $0090 |
| $9C8A | 呼び出しの直後 | 14 | 9 | $0034 |
| $9CE1 | 呼び出しの直後 | 3 | 3 | $0090 |
| $9DD4 | 呼び出しの直後 | 5 | 5 | |
| $A1CE | 呼び出しの直後 | 3 | 3 | $0088 |
| $B1A1 | 呼び出しの直後 | 9 | 4 | $0613, $0614, $0615, $0616 |
| $B1B9 | 呼び出しの直後 | 4 | 4 | $061B |
| $B1C9 | 呼び出しの直後 | 4 | 4 | $061E, $061B |
| $B1D9 | 呼び出しの直後 | 5 | 5 | $061C, $061D, $061B |
| $B239 | 呼び出しの直後 | 4 | 4 | $061B |
| $C1F8 | 呼び出しの直後 | 11 | 9 | $0053 |
| $D457 | ポインタ経由 | 21 | 7 | |
| $E515 | 呼び出しの直後 | 4 | 4 | $008E |
| $E59F | 呼び出しの直後 | 1 | 1 | $008F |
| $E5D9 | 呼び出しの直後 | 3 | 3 | $008F |
| $E6DB | 呼び出しの直後 | 7 | 7 | $008F |
| $E885 | 呼び出しの直後 | 4 | 4 | $002E |
| $EF8E | 呼び出しの直後 | 10 | 10 | $060A |
ルーチンが共有するメモリ
あるルーチンが書き、別のルーチンが読んだメモリは 567 バイト。添字を通して届いた場所は 73 か所で、メモリの中のテーブルや、物体の枠の並びはそう見える。
添字で届いた範囲: 位置を含むもの、次いで最も長いもの
| 起点 | 届いたバイト | 命令 | 含まれる位置 |
|---|---|---|---|
| $0460 | 16 | 24 | 縦 5 |
| $0480 | 16 | 15 | 横 5 |
| $0470 | 6 | 3 | 縦 5 |
| $0490 | 6 | 3 | 横 5 |
| $0300 | 256 | 39 | |
| $0700 | 256 | 14 | |
| $0400 | 256 | 12 | |
| $0500 | 256 | 1 | |
| $0200 | 253 | 2 | |
| $0201 | 253 | 1 | |
| $0202 | 253 | 1 | |
| $0203 | 253 | 1 |
位置と一緒に動くもの
少なくとも二つのルーチンが、位置の配列と一緒に、同じ範囲をたどった配列。画面上のものの表は、メモリの中ではこう見える: 性質ごとに配列が一つ、ものごとに枠が一つ。どの配列が位置を持つかは言える。ほかの配列のうち、どれが位置に足し込まれるか (速度がすること) と、どれがジャンプのテーブルの行き先を選ぶか (状態や種類がすること)、どれが減らされる一方か (タイマーがすること) も言える。残りが何を持つかは、まだ名付けていない。
| 枠 | 配列 | ルーチン | 横の位置 | 縦の位置 | 位置に足し込まれる配列 | ジャンプを選ぶ配列 | 減らされる一方の配列 | 一緒に動く配列 |
|---|---|---|---|---|---|---|---|---|
| 16 | 10 | 24 | $0480, $0490 | $0460, $0470 | $0611, $0619 | $0400, $0410, $0420, $0440, $0611, $0619 |
最も忙しい共有バイト 24 個
| バイト | 読み書き | 書くルーチン | 読むルーチン |
|---|---|---|---|
| $0000 | 9,977,128 | 6 | 6 |
| $0008 | 8,630,698 | 6 | 6 |
| $0009 | 8,406,231 | 6 | 6 |
| $0001 | 7,593,107 | 6 | 6 |
| $0003 | 6,703,813 | 6 | 6 |
| $0002 | 5,145,878 | 6 | 6 |
| $0005 | 5,067,354 | 6 | 6 |
| $000E | 3,430,929 | 4 | 6 |
| $0004 | 2,963,678 | 6 | 6 |
| $000C | 2,501,844 | 2 | 3 |
| $000B | 2,260,331 | 3 | 3 |
| $0022 | 1,013,183 | 2 | 3 |
| $00AB | 926,224 | 2 | 6 |
| $009A | 608,721 | 6 | 6 |
| $00F7 | 489,112 | 2 | 3 |
| $00A5 | 440,417 | 6 | 6 |
| $000D | 421,839 | 5 | 6 |
| $0032 | 384,952 | 6 | 6 |
| $0030 | 376,590 | 5 | 6 |
| $0098 | 375,027 | 3 | 6 |
| $0099 | 375,027 | 3 | 6 |
| $001E | 311,568 | 6 | 6 |
| $009B | 306,222 | 6 | 6 |
| $0601 | 287,425 | 6 | 5 |
このページはゲームのバイトを一つも見せない。これらの数を読み取ったリスティングは、カートリッジと一緒に留まる。