Paperboy (USA)
Paperboy (USA) は CNROM の基板に載り、プログラムは 32,768 バイト。電源投入から 8,000 歩のクロールが、新しいコードを見つけた道筋を 39 本残した。それらを 101,779 フレームにわたって再生すると、プログラムのうち 9,018 バイト、28 パーセントが実行された。
規則が名付けたもの
- パッドの読み取り: 2
- 待機のループ: 1
- 割り込みの中のゲーム: 1
- ジャンプエンジン: 8
- メモリに置かれたハンドラ: 3
- バンク切り替え: 1
- 画面メモリへの書き手: 1
- パレットの書き手: 1
- スプライトの書き手: 1
- スクロールの書き手: 1
- サウンドドライバ: 1
- 乱数のバイト: 1
- 二つのものを比べる所: 4
走行が入った 276 個のルーチン
ゲームのコードに入った場所のすべて。呼び出し、割り込み、テーブル経由のジャンプのどれかで入る。規則が名付けたものを先に、規則が見たものと一緒に並べる。それらのリスティングでの名前は、何であるかを言う: poll (読み取り)、engine (エンジン)、drain (書き出し)。
| 場所 | リスティングでの名前 | 入り方 | 回数 | 何であるか、その証拠 |
|---|---|---|---|---|
| $86BE | handlers_86BE | 呼び出し | 156,809 | メモリに置かれたハンドラ: 跳躍 132,729、着地した場所 79、アドレスの写し元 $0008,$000D,$04B6,$04CF |
| $80EA | poll_80EA | 呼び出し | 85,719 | パッドの読み取り: ポート $4016、一フレームの読み 13、一フレームのストローブ 5 パッドの読み取り: ポート $4017、一フレームの読み 8、一フレームのストローブ 5 |
| $8006 | nmi | 毎フレーム(NMI) | 39,502 | 割り込みの中のゲーム: 走ったフレーム 39,502、全フレーム 39,619、待機の場所 $80A1 スクロールの書き手: 走ったフレーム 39,502、ブランク中の書き込み 77,486 |
| $853E | drain_853E | 呼び出し | 38,791 | パレットの書き手: 走ったフレーム 38,791、書き込み 1,585 画面メモリへの書き手: 走ったフレーム 38,791、書き込み 9,666、ブランク中 7,582、描画中 2,084 |
| $839E | compare_839E | 呼び出し | 38,770 | 二つのものを比べる所: 命令 2、バイトの組 77、バイトの総数 19、比べた回数 210,252、横の位置のバイト $0019,$001A,$001B,$001C,$001D,$001E,$001F,$0020,$0021,$0022,$0023,$0024、縦の位置のバイト $004F,$0050,$0051,$0052,$0057,$07D5 スプライトの書き手: 走ったフレーム 38,796、スプライトのページへの書き込み 4,871,921 |
| $9C26 | engine_9C26 | 呼び出し | 23,178 | ジャンプエンジン: テーブル 3、そこを通った跳躍 11,578 |
| $82D9 | compare_82D9 | 呼び出し | 18,575 | 二つのものを比べる所: 命令 2、バイトの組 7、バイトの総数 9、比べた回数 17,237、横の位置のバイト $001D,$001E,$001F,$0020,$0025、縦の位置のバイト $0050,$0051,$0052,$0057 |
| $98C8 | engine_98C8 | 呼び出し | 12,712 | ジャンプエンジン: テーブル 4、そこを通った跳躍 5,608 |
| $861A | compare_861A | 呼び出し | 12,584 | 二つのものを比べる所: 命令 1、バイトの組 1、バイトの総数 2、比べた回数 6、横の位置のバイト $001E,$0025 |
| $8722 | engine_8722 | 呼び出し | 4,678 | ジャンプエンジン: テーブル 9、そこを通った跳躍 4,236 |
| $8706 | engine_8706 | 呼び出し | 4,674 | ジャンプエンジン: テーブル 36、そこを通った跳躍 2,649 |
| $8E3C | random_8E3C | 呼び出し | 2,395 | 乱数のバイト: 走ったフレーム 3,325、バイト $00C8、回転 2、排他的論理和 1 |
| $A993 | dispatch_A993 | テーブル | 1,729 | サウンドドライバ: 走ったフレーム 1,825、書き込み 4,436 |
| $9543 | engine_9543 | 呼び出し | 1,511 | ジャンプエンジン: テーブル 1、そこを通った跳躍 2 |
| $8A69 | engine_8A69 | 呼び出し | 1,108 | ジャンプエンジン: テーブル 1、そこを通った跳躍 6 |
| $90B8 | compare_90B8 | 呼び出し | 832 | 二つのものを比べる所: 命令 1、バイトの組 3、バイトの総数 4、比べた回数 822、横の位置のバイト $001E,$001F,$0020,$0025 |
| $A24E | engine_A24E | 呼び出し | 186 | ジャンプエンジン: テーブル 1、そこを通った跳躍 1 |
| $80A4 | bank_80A4 | 呼び出し | 157 | バンク切り替え: 書き込み 314、ブランク中 14、描画中 300 |
| $80B3 | engine_80B3 | 呼び出し | 58 | ジャンプエンジン: テーブル 1、そこを通った跳躍 58 |
| $A50B | handlers_A50B | 呼び出し | 42 | メモリに置かれたハンドラ: 跳躍 223、着地した場所 6、アドレスの写し元 $0002,$0003 |
| $8D16 | dispatch_8D16 | テーブル | 4 | メモリに置かれたハンドラ: 跳躍 404、着地した場所 13、アドレスの写し元 $009D,$009E |
| $81F0 | 呼び出し | 305,019 | ||
| $81B6 | 呼び出し | 60,620 | ||
| $94FC | テーブル | 46,208 | ||
| $867E | 呼び出し | 38,791 | ||
| $A4E2 | 呼び出し | 30,782 | ||
| $9F44 | テーブル | 25,445 | ||
| $9FA4 | 呼び出し | 25,445 | ||
| $9FB6 | 呼び出し | 25,445 | ||
| $834D | 呼び出し | 24,172 | ||
| $84F3 | 呼び出し | 23,271 | ||
| $8044 | 呼び出し | 23,207 | ||
| $8DB6 | テーブル | 23,207 | ||
| $8F86 | 呼び出し | 23,178 | ||
| $A462 | 呼び出し | 23,178 | ||
| $9BE0 | 呼び出し | 23,176 | ||
| $832B | 呼び出し | 21,746 | ||
| $8618 | 呼び出し | 20,167 | ||
| $9B65 | テーブル | 19,695 | ||
| $865E | 呼び出し | 19,064 | ||
| $A512 | 呼び出し | 18,247 | ||
| $A4CD | 呼び出し | 17,158 | ||
| $A522 | 呼び出し | 16,129 | ||
| $8A70 | 呼び出し | 15,516 | ||
| $8151 | 呼び出し | 14,523 | ||
| $8A76 | 呼び出し | 13,400 | ||
| $8A80 | 呼び出し | 13,002 | ||
| $9C1C | 呼び出し | 11,578 | ||
| $8A0A | 呼び出し | 11,498 | ||
| $8A59 | 呼び出し | 11,100 | ||
| $85C4 | 呼び出し | 9,698 | ||
| $908B | テーブル | 9,607 | ||
| $8DC8 | 呼び出し | 8,919 | ||
| $8FD6 | 呼び出し | 7,457 | ||
| $9E98 | 呼び出し | 7,204 | ||
| $8629 | 呼び出し | 6,264 | ||
| $88A4 | テーブル | 5,358 | ||
| $872F | 呼び出し | 5,145 | ||
| $8319 | 呼び出し | 4,907 | ||
| $84EA | 呼び出し | 4,173 | ||
| $9BC3 | テーブル | 3,473 | ||
| $9899 | テーブル | 3,355 | ||
| $98A4 | テーブル | 3,220 | ||
| $98B2 | テーブル | 3,157 | ||
| $98BD | テーブル | 2,980 | ||
| $81AA | 呼び出し | 2,491 | ||
| $864D | 呼び出し | 2,449 | ||
| $A4E6 | 呼び出し | 2,364 | ||
| $9E50 | テーブル | 2,121 | ||
| $9B25 | テーブル | 2,119 | ||
| $817A | 呼び出し | 2,080 | ||
| $818B | 呼び出し | 2,080 | ||
| $9AB2 | テーブル | 2,055 | ||
| $A537 | テーブル | 2,010 | ||
| $9E62 | テーブル | 1,834 | ||
| $A36F | 呼び出し | 1,798 | ||
| $9E7A | テーブル | 1,662 | ||
| $A356 | テーブル | 1,648 | ||
| $95A4 | テーブル | 1,623 | ||
| $95C4 | 呼び出し | 1,623 | ||
| $9E8C | テーブル | 1,589 | ||
| $862B | 呼び出し | 1,572 | ||
| $864F | 呼び出し | 1,570 | ||
| $A69B | テーブル | 1,454 | ||
| $A87C | テーブル | 1,281 | ||
| $8790 | テーブル | 1,277 | ||
| $8883 | テーブル | 1,274 | ||
| $A90E | テーブル | 1,258 | ||
| $9698 | 呼び出し | 1,224 | ||
| $8A65 | テーブル | 1,108 | ||
| $A1D6 | テーブル | 894 | ||
| $86CC | 呼び出し | 892 | ||
| $9553 | テーブル | 858 | ||
| $9594 | 呼び出し | 858 | ||
| $860F | 呼び出し | 843 | ||
| $98A1 | テーブル | 831 | ||
| $98AC | テーブル | 807 | ||
| $98BA | テーブル | 783 | ||
| $952A | テーブル | 762 | ||
| $98C5 | テーブル | 760 | ||
| $953D | テーブル | 749 | ||
| $8D8D | テーブル | 681 | ||
| $A61D | テーブル | 558 | ||
| $8678 | 呼び出し | 502 | ||
| $8290 | 呼び出し | 477 | ||
| $90A5 | テーブル | 426 | ||
| $90B2 | テーブル | 406 | ||
| $8505 | 呼び出し | 404 | ||
| $8530 | 呼び出し | 404 | ||
| $863A | 呼び出し | 396 | ||
| $A1C2 | 呼び出し | 384 | ||
| $907B | 呼び出し | 315 | ||
| $8643 | 呼び出し | 256 | ||
| $A7BA | テーブル | 252 | ||
| $8261 | 呼び出し | 223 | ||
| $82B8 | 呼び出し | 223 | ||
| $A248 | 呼び出し | 212 | ||
| $8244 | 呼び出し | 198 | ||
| $986E | テーブル | 198 | ||
| $A4BD | テーブル | 198 | ||
| $A1AF | テーブル | 193 | ||
| $A1BC | テーブル | 191 | ||
| $866F | 呼び出し | 183 | ||
| $9494 | テーブル | 170 | ||
| $A683 | テーブル | 166 | ||
| $94CE | テーブル | 154 | ||
| $A36B | テーブル | 150 | ||
| $94F0 | テーブル | 149 | ||
| $94F5 | テーブル | 149 | ||
| $9883 | テーブル | 140 | ||
| $A5E1 | テーブル | 128 | ||
| $9527 | テーブル | 127 | ||
| $953A | テーブル | 127 | ||
| $9057 | テーブル | 121 | ||
| $A208 | テーブル | 110 | ||
| $86C1 | 呼び出し | 109 | ||
| $825C | 呼び出し | 104 | ||
| $9066 | テーブル | 104 | ||
| $A1F6 | テーブル | 104 | ||
| $95BD | テーブル | 101 | ||
| $95C1 | 呼び出し | 101 | ||
| $811A | 呼び出し | 96 | ||
| $94E3 | テーブル | 92 | ||
| $9075 | テーブル | 90 | ||
| $A502 | テーブル | 83 | ||
| $A50A | テーブル | 83 | ||
| $8716 | 呼び出し | 80 | ||
| $9652 | 呼び出し | 72 | ||
| $94EB | テーブル | 62 | ||
| $A605 | テーブル | 62 | ||
| $86D5 | 呼び出し | 56 | ||
| $91B1 | 呼び出し | 56 | ||
| $9235 | 呼び出し | 56 | ||
| $E100 | 呼び出し | 53 | ||
| $A235 | テーブル | 48 | ||
| $A21B | テーブル | 47 | ||
| $A242 | テーブル | 47 | ||
| $852A | 呼び出し | 44 | ||
| $A228 | テーブル | 44 | ||
| $9E5F | テーブル | 43 | ||
| $87BC | テーブル | 42 | ||
| $87CA | テーブル | 42 | ||
| $87D9 | テーブル | 42 | ||
| $87F1 | テーブル | 42 | ||
| $8813 | テーブル | 42 | ||
| $882D | テーブル | 42 | ||
| $883E | テーブル | 42 | ||
| $885C | テーブル | 42 | ||
| $8861 | テーブル | 42 | ||
| $8868 | テーブル | 42 | ||
| $887B | テーブル | 42 | ||
| $A7B0 | テーブル | 42 | ||
| $8782 | テーブル | 41 | ||
| $8785 | テーブル | 41 | ||
| $A4ED | 呼び出し | 41 | ||
| $8048 | 電源投入 | 39 | ||
| $8092 | テーブル | 39 | ||
| $809A | テーブル | 39 | ||
| $813E | 呼び出し | 39 | ||
| $8754 | テーブル | 39 | ||
| $9BDE | 呼び出し | 39 | ||
| $88C8 | テーブル | 36 | ||
| $95CB | 呼び出し | 36 | ||
| $9E4D | テーブル | 36 | ||
| $9E74 | テーブル | 36 | ||
| $9AAF | テーブル | 34 | ||
| $9E89 | テーブル | 34 | ||
| $889C | テーブル | 33 | ||
| $821D | 呼び出し | 31 | ||
| $9AA1 | テーブル | 31 | ||
| $89CC | テーブル | 29 | ||
| $89D1 | テーブル | 29 | ||
| $89D6 | テーブル | 29 | ||
| $9B50 | テーブル | 29 | ||
| $9F31 | テーブル | 29 | ||
| $9F36 | テーブル | 29 | ||
| $A7C9 | 呼び出し | 29 | ||
| $A7DC | テーブル | 29 | ||
| $A7E3 | テーブル | 29 | ||
| $A7EA | テーブル | 29 | ||
| $A805 | テーブル | 29 | ||
| $A897 | テーブル | 29 | ||
| $A929 | テーブル | 29 | ||
| $90A2 | テーブル | 28 | ||
| $9F24 | 呼び出し | 28 | ||
| $8568 | 呼び出し | 27 | ||
| $8927 | テーブル | 27 | ||
| $8928 | テーブル | 27 | ||
| $89DC | 呼び出し | 27 | ||
| $8A09 | テーブル | 27 | ||
| $9ACA | 呼び出し | 27 | ||
| $9D37 | 呼び出し | 27 | ||
| $9EF8 | 呼び出し | 27 | ||
| $90AF | テーブル | 26 | ||
| $9AC4 | テーブル | 24 | ||
| $9493 | テーブル | 21 | ||
| $9A84 | テーブル | 18 | ||
| $A58D | テーブル | 16 | ||
| $A5B2 | テーブル | 16 | ||
| $A1F3 | テーブル | 15 | ||
| $9E43 | テーブル | 14 | ||
| $A205 | テーブル | 14 | ||
| $88F0 | テーブル | 13 | ||
| $9159 | 呼び出し | 13 | ||
| $916E | テーブル | 13 | ||
| $917B | テーブル | 13 | ||
| $9486 | 呼び出し | 13 | ||
| $A1AC | テーブル | 13 | ||
| $8A8B | 呼び出し | 12 | ||
| $8A94 | テーブル | 12 | ||
| $A1B9 | テーブル | 12 | ||
| $9054 | テーブル | 11 | ||
| $9063 | テーブル | 11 | ||
| $8AA8 | 呼び出し | 10 | ||
| $8AB0 | テーブル | 10 | ||
| $8AB1 | テーブル | 10 | ||
| $8AB6 | テーブル | 10 | ||
| $9072 | テーブル | 10 | ||
| $9BB2 | テーブル | 10 | ||
| $8AC5 | テーブル | 9 | ||
| $88FB | テーブル | 8 | ||
| $890F | テーブル | 8 | ||
| $8A52 | テーブル | 8 | ||
| $9481 | 呼び出し | 8 | ||
| $A218 | テーブル | 7 | ||
| $A225 | テーブル | 7 | ||
| $8917 | テーブル | 6 | ||
| $A232 | テーブル | 6 | ||
| $A23F | テーブル | 6 | ||
| $8953 | テーブル | 5 | ||
| $8AF7 | テーブル | 5 | ||
| $891C | テーブル | 4 | ||
| $8AD1 | テーブル | 4 | ||
| $8D05 | テーブル | 4 | ||
| $8D27 | テーブル | 4 | ||
| $8D30 | テーブル | 4 | ||
| $8D36 | テーブル | 4 | ||
| $9FD1 | 呼び出し | 4 | ||
| $A12B | 呼び出し | 4 | ||
| $A40A | 呼び出し | 4 | ||
| $879B | テーブル | 3 | ||
| $951D | テーブル | 3 | ||
| $95BA | テーブル | 3 | ||
| $875F | テーブル | 2 | ||
| $8945 | テーブル | 2 | ||
| $8979 | テーブル | 2 | ||
| $8DB5 | テーブル | 2 | ||
| $999C | テーブル | 2 | ||
| $A4C9 | テーブル | 2 | ||
| $A633 | テーブル | 2 | ||
| $8DA0 | テーブル | 1 | ||
| $904A | テーブル | 1 | ||
| $9975 | テーブル | 1 | ||
| $9C29 | テーブル | 1 | ||
| $A1A7 | テーブル | 1 | ||
| $A1C5 | テーブル | 1 |
待つ場所
規則が名付けたループのうち、ルーチンの内側にあって、それ自身はコードの入口ではないもの。
| 場所 | リスティングでの名前 | 何であるか、その証拠 |
|---|---|---|
| $80A1 | spin_80A1 | 待機のループ: 周回 271,492,681、一フレームの周回 6,852 |
ジャンプに使うテーブル
ゲームがその中から一つを選ぶ、アドレスのテーブル。ジャンプエンジンへの呼び出しの直後にあるものもあれば、カートリッジのどこかにあるものもある。後者は、ゲームが通って跳んだアドレスがどこから読み込まれたかで見つける。アドレスを積んでそこへ戻ることで跳ぶゲームもあれば、テーブルを二つに分けて、アドレスの下位バイトをある場所に、上位バイトを別の場所に置くゲームもある。どちらも同じやり方で見つける。項目は、走行が選ぶのを見た所までを数える。本当のテーブルはもっと長いかもしれない。最後の列は、その値が項目を選んだメモリのバイトで、追えた場合だけ書いてある: ゲームのモードか、物体の一つが今していることだ。
| 場所 | 届き方 | 項目 | 選ばれた数 | 選んだバイト |
|---|---|---|---|---|
| $98AA | 戻りで | 1 | 1 |
ルーチンが共有するメモリ
あるルーチンが書き、別のルーチンが読んだメモリは 762 バイト。添字を通して届いた場所は 52 か所で、メモリの中のテーブルや、物体の枠の並びはそう見える。
添字で届いた範囲: 位置を含むもの、次いで最も長いもの
| 起点 | 届いたバイト | 命令 | 含まれる位置 |
|---|---|---|---|
| $003F | 25 | 22 | 縦 5 |
| $000D | 25 | 17 | 横 13 |
| $0200 | 253 | 2 | |
| $0300 | 212 | 8 | |
| $0301 | 211 | 4 | |
| $0302 | 193 | 2 | |
| $0201 | 177 | 1 | |
| $0202 | 177 | 1 | |
| $0203 | 177 | 1 | |
| $0773 | 80 | 3 | |
| $0535 | 62 | 3 | |
| $05CD | 44 | 8 |
位置と一緒に動くもの
少なくとも二つのルーチンが、位置の配列と一緒に、同じ範囲をたどった配列。画面上のものの表は、メモリの中ではこう見える: 性質ごとに配列が一つ、ものごとに枠が一つ。どの配列が位置を持つかは言える。ほかの配列のうち、どれが位置に足し込まれるか (速度がすること) と、どれがジャンプのテーブルの行き先を選ぶか (状態や種類がすること)、どれが減らされる一方か (タイマーがすること) も言える。残りが何を持つかは、まだ名付けていない。
| 枠 | 配列 | ルーチン | 横の位置 | 縦の位置 | 位置に足し込まれる配列 | ジャンプを選ぶ配列 | 減らされる一方の配列 | 一緒に動く配列 |
|---|---|---|---|---|---|---|---|---|
| 25 | 5 | 25 | $000D | $003F | $0026, $0058, $0071 |
最も忙しい共有バイト 24 個
| バイト | 読み書き | 書くルーチン | 読むルーチン |
|---|---|---|---|
| $0000 | 3,832,705 | 6 | 6 |
| $009E | 1,765,306 | 6 | 6 |
| $009D | 1,765,286 | 4 | 6 |
| $0450 | 1,548,190 | 3 | 4 |
| $0094 | 1,032,023 | 3 | 3 |
| $0001 | 942,470 | 6 | 6 |
| $0095 | 727,004 | 3 | 3 |
| $0002 | 619,366 | 6 | 6 |
| $0451 | 594,190 | 5 | 6 |
| $0097 | 519,015 | 2 | 1 |
| $0098 | 385,524 | 1 | 6 |
| $0005 | 379,892 | 2 | 6 |
| $00B1 | 255,097 | 4 | 2 |
| $0006 | 193,856 | 4 | 6 |
| $0025 | 163,118 | 3 | 6 |
| $0007 | 139,445 | 4 | 6 |
| $044B | 137,742 | 6 | 6 |
| $0099 | 122,733 | 1 | 6 |
| $003E | 121,721 | 2 | 3 |
| $041F | 117,721 | 6 | 6 |
| $0438 | 117,719 | 6 | 6 |
| $04F9 | 117,194 | 6 | 6 |
| $04FA | 114,323 | 6 | 6 |
| $04FB | 114,305 | 6 | 6 |
このページはゲームのバイトを一つも見せない。これらの数を読み取ったリスティングは、カートリッジと一緒に留まる。