Ninja Gaiden (USA)
Ninja Gaiden (USA) は MMC1 の基板に載り、プログラムは 131,072 バイト。電源投入から 8,000 歩のクロールが、新しいコードを見つけた道筋を 142 本残した。それらを 304,842 フレームにわたって再生すると、プログラムのうち 12,425 バイト、9 パーセントが実行された。
規則が名付けたもの
- パッドの読み取り: 1
- フレーム待ち: 3
- ジャンプエンジン: 2
- メモリに置かれたハンドラ: 4
- バンク切り替え: 14
- 画面メモリへの書き手: 1
- パレットの書き手: 1
- スプライトの書き手: 10
- スクロールの書き手: 1
- 画面の分割: 3
- サウンドドライバ: 1
- 乱数のバイト: 1
- 二つのものを比べる所: 6
走行が入った 177 個のルーチン
ゲームのコードに入った場所のすべて。呼び出し、割り込み、テーブル経由のジャンプのどれかで入る。規則が名付けたものを先に、規則が見たものと一緒に並べる。それらのリスティングでの名前は、何であるかを言う: poll (読み取り)、engine (エンジン)、drain (書き出し)。
| 場所 | リスティングでの名前 | 入り方 | 回数 | 何であるか、その証拠 |
|---|---|---|---|---|
| $80F4 (バンク 3) | b3_sound_80F4 | 呼び出し | 261,747 | サウンドドライバ: 走ったフレーム 65,968、書き込み 745,908 |
| $C028 (バンク 7) | b7_bank_C028 | 呼び出し | 196,540 | バンク切り替え: 書き込み 982,017、ブランク中 0、描画中 982,017 |
| $E819 (バンク 7) | b7_poll_E819 | 呼び出し | 182,984 | パッドの読み取り: ポート $4016、一フレームの読み 15、一フレームのストローブ 3 |
| $80A8 (バンク 5) | b5_engine_80A8 | 呼び出し | 97,924 | ジャンプエンジン: テーブル 3、そこを通った跳躍 97,924 |
| $C02A (バンク 7) | b7_bank_C02A | 呼び出し | 97,872 | バンク切り替え: 書き込み 489,200、ブランク中 0、描画中 489,200 |
| $F91A (バンク 7) | b7_nmi | 毎フレーム(NMI) | 91,492 | バンク切り替え: 書き込み 2,053,599、ブランク中 1,710,668、描画中 342,931 パレットの書き手: 走ったフレーム 91,762、書き込み 518,962 スクロールの書き手: 走ったフレーム 91,762、ブランク中の書き込み 182,961 画面メモリへの書き手: 走ったフレーム 91,762、書き込み 766,930、ブランク中 766,930、描画中 0 |
| $823B (バンク 4) | b4_wait_823B | 呼び出し | 47,404 | フレーム待ち: 待つ相手のバイト $001F、入った回数 47,402、周回 78,034,703、フレーム割り込みの下での書き込み 91,358、全フレーム 92,742 |
| $8181 (バンク 4) | b4_sprites_8181 | 呼び出し | 47,382 | スプライトの書き手: 走ったフレーム 47,382、スプライトのページへの書き込み 2,772,141 |
| $F104 (バンク 7) | b7_wait_F104 | 呼び出し | 42,884 | フレーム待ち: 待つ相手のバイト $001F、入った回数 42,971、周回 123,471,937、フレーム割り込みの下での書き込み 91,358、全フレーム 92,742 |
| $F5A2 (バンク 7) | b7_split_F5A2 | 呼び出し | 42,291 | バンク切り替え: 書き込み 422,419、ブランク中 0、描画中 422,419 画面の分割: 走ったフレーム 42,289、描画中のスクロール書き込み 84,544、描画中のステータス読み 30,007,392 |
| $F77C (バンク 7) | b7_sprites_F77C | 呼び出し | 28,346 | スプライトの書き手: 走ったフレーム 15,396、スプライトのページへの書き込み 441,661 |
| $837A (バンク 3) | b3_handlers_837A | 呼び出し | 27,258 | メモリに置かれたハンドラ: 跳躍 27,258、着地した場所 15、アドレスの写し元 $0627 |
| $8013 (バンク 5) | b5_sprites_8013 | 呼び出し | 26,117 | スプライトの書き手: 走ったフレーム 22,355、スプライトのページへの書き込み 846,976 |
| $F768 (バンク 7) | b7_sprites_F768 | 呼び出し | 25,850 | スプライトの書き手: 走ったフレーム 25,850、スプライトのページへの書き込み 1,627,170 |
| $F0A7 (バンク 7) | b7_sprites_F0A7 | 呼び出し | 25,730 | スプライトの書き手: 走ったフレーム 25,730、スプライトのページへの書き込み 418,394 |
| $D8D5 (バンク 7) | b7_bank_D8D5 | 呼び出し | 25,337 | バンク切り替え: 書き込み 126,639、ブランク中 0、描画中 126,639 |
| $EB7B (バンク 7) | b7_handlers_EB7B | 呼び出し | 25,337 | メモリに置かれたハンドラ: 跳躍 18,804、着地した場所 5、アドレスの写し元 $0000,$006F,$0438 |
| $F1AC (バンク 7) | b7_bank_F1AC | 呼び出し | 25,337 | バンク切り替え: 書き込み 940、ブランク中 0、描画中 940 |
| $F7E4 (バンク 7) | b7_handlers_F7E4 | 呼び出し | 24,985 | メモリに置かれたハンドラ: 跳躍 24,985、着地した場所 6、アドレスの写し元 $005F,$0086,$00A3 |
| $E243 (バンク 7) | b7_handlers_E243 | 呼び出し | 20,143 | メモリに置かれたハンドラ: 跳躍 20,143、着地した場所 11、アドレスの写し元 $0051,$0061 |
| $E144 (バンク 7) | b7_compare_E144 | 呼び出し | 12,873 | 二つのものを比べる所: 命令 2、バイトの組 14、バイトの総数 16、比べた回数 15,934、横の位置のバイト $0086,$0454,$0457,$0462,$0463,$0464,$0465,$0466,$0467、縦の位置のバイト $008A,$0474,$0477,$0482,$0485,$0486,$0487 |
| $DAA2 (バンク 7) | b7_compare_DAA2 | 呼び出し | 7,763 | 二つのものを比べる所: 命令 2、バイトの組 1、バイトの総数 2、比べた回数 7、横の位置のバイト $0086,$04D9 |
| $C014 (バンク 7) | b7_bank_C014 | 呼び出し | 6,767 | バンク切り替え: 書き込み 33,824、ブランク中 0、描画中 33,824 |
| $F47E (バンク 7) | b7_bank_F47E | 呼び出し | 2,377 | バンク切り替え: 書き込み 23,770、ブランク中 0、描画中 23,770 |
| $F5EA (バンク 7) | b7_bank_F5EA | 呼び出し | 1,225 | バンク切り替え: 書き込み 6,125、ブランク中 0、描画中 6,125 |
| $8301 (バンク 4) | b4_wait_8301 | 呼び出し | 1,084 | フレーム待ち: 待つ相手のバイト $001F、入った回数 1,084、周回 3,018,154、フレーム割り込みの下での書き込み 91,358、全フレーム 92,742 |
| $818E (バンク 6) | b6_engine_818E | 呼び出し | 969 | ジャンプエンジン: テーブル 1、そこを通った跳躍 969 |
| $81E9 (バンク 4) | b4_bank_81E9 | 呼び出し | 795 | バンク切り替え: 書き込み 3,975、ブランク中 0、描画中 3,975 |
| $86D2 (バンク 4) | b4_sprites_86D2 | 呼び出し | 557 | スプライトの書き手: 走ったフレーム 557、スプライトのページへの書き込み 557 |
| $817D (バンク 4) | b4_sprites_817D | 呼び出し | 523 | スプライトの書き手: 走ったフレーム 523、スプライトのページへの書き込み 32,949 |
| $8328 (バンク 4) | b4_sprites_8328 | 呼び出し | 401 | スプライトの書き手: 走ったフレーム 401、スプライトのページへの書き込み 1,604 |
| $880F (バンク 4) | b4_random_880F | 呼び出し | 246 | 乱数のバイト: 走ったフレーム 246、バイト $001D、回転 2、排他的論理和 1 |
| $FFDA (バンク 7) | b7_reset | 電源投入 | 142 | バンク切り替え: 書き込み 994、ブランク中 994、描画中 0 スプライトの書き手: 走ったフレーム 426、スプライトのページへの書き込み 36,352 |
| $DE2B (バンク 7) | b7_compare_DE2B | 呼び出し | 129 | 二つのものを比べる所: 命令 1、バイトの組 6、バイトの総数 7、比べた回数 129、横の位置のバイト $0086,$0462,$0463,$0464,$0465,$0466,$0467 |
| $DE5A (バンク 7) | b7_compare_DE5A | 呼び出し | 129 | 二つのものを比べる所: 命令 1、バイトの組 6、バイトの総数 7、比べた回数 129、横の位置のバイト $0086,$0462,$0463,$0464,$0465,$0466,$0467 |
| $E902 (バンク 7) | b7_bank_E902 | 呼び出し | 120 | バンク切り替え: 書き込み 1,150、ブランク中 0、描画中 1,150 |
| $EAC1 (バンク 7) | b7_split_EAC1 | 呼び出し | 120 | バンク切り替え: 書き込み 1,200、ブランク中 0、描画中 1,200 画面の分割: 走ったフレーム 480、描画中のスクロール書き込み 240、描画中のステータス読み 88,080 スプライトの書き手: 走ったフレーム 480、スプライトのページへの書き込み 480 |
| $F8F0 (バンク 7) | b7_split_F8F0 | 呼び出し | 120 | バンク切り替え: 書き込み 1,200、ブランク中 0、描画中 1,200 画面の分割: 走ったフレーム 240、描画中のスクロール書き込み 240、描画中のステータス読み 82,440 |
| $DE40 (バンク 7) | b7_compare_DE40 | 呼び出し | 21 | 二つのものを比べる所: 命令 1、バイトの組 2、バイトの総数 3、比べた回数 21、横の位置のバイト $0086,$0465,$0466 |
| $DECF (バンク 7) | b7_compare_DECF | 呼び出し | 21 | 二つのものを比べる所: 命令 3、バイトの組 5、バイトの総数 7、比べた回数 25、横の位置のバイト $0086,$0465,$0466,$0467、縦の位置のバイト $008A,$0486,$0487 |
| $8161 (バンク 3) | 呼び出し | 282,760 | ||
| $E792 (バンク 7) | 呼び出し | 184,855 | ||
| $BF98 (バンク 4) | 呼び出し | 97,872 | ||
| $BFB3 (バンク 5) | 呼び出し | 96,903 | ||
| $8000 (バンク 3) | 呼び出し | 91,483 | ||
| $82B9 (バンク 3) | 呼び出し | 55,371 | ||
| $8003 (バンク 5) | テーブル | 47,382 | ||
| $8006 (バンク 5) | テーブル | 47,382 | ||
| $83A9 (バンク 4) | 呼び出し | 47,382 | ||
| $83B5 (バンク 4) | 呼び出し | 47,382 | ||
| $DFD3 (バンク 7) | 呼び出し | 32,672 | ||
| $82E0 (バンク 4) | 呼び出し | 28,267 | ||
| $81D7 (バンク 6) | 呼び出し | 28,219 | ||
| $81C8 (バンク 6) | 呼び出し | 27,250 | ||
| $8193 (バンク 5) | 呼び出し | 26,117 | ||
| $80D6 (バンク 5) | 呼び出し | 25,986 | ||
| $D85D (バンク 7) | 呼び出し | 25,730 | ||
| $DC88 (バンク 7) | 呼び出し | 25,730 | ||
| $EB64 (バンク 7) | 呼び出し | 25,730 | ||
| $F10D (バンク 7) | 呼び出し | 25,730 | ||
| $D710 (バンク 7) | 呼び出し | 25,337 | ||
| $D9E4 (バンク 7) | 呼び出し | 25,337 | ||
| $E625 (バンク 7) | 呼び出し | 25,337 | ||
| $E677 (バンク 7) | 呼び出し | 25,337 | ||
| $EFF1 (バンク 7) | 呼び出し | 25,337 | ||
| $DD32 (バンク 7) | 呼び出し | 24,985 | ||
| $E560 (バンク 7) | 呼び出し | 24,985 | ||
| $81A4 (バンク 6) | 呼び出し | 23,210 | ||
| $81B5 (バンク 6) | 呼び出し | 23,210 | ||
| $81E5 (バンク 6) | 呼び出し | 23,210 | ||
| $DD6C (バンク 7) | 呼び出し | 20,173 | ||
| $DFE9 (バンク 7) | 呼び出し | 20,143 | ||
| $E024 (バンク 7) | 呼び出し | 20,143 | ||
| $E054 (バンク 7) | 呼び出し | 19,545 | ||
| $E07B (バンク 7) | 呼び出し | 18,353 | ||
| $F53E (バンク 7) | 呼び出し | 14,826 | ||
| $F568 (バンク 7) | 呼び出し | 14,826 | ||
| $C3E1 (バンク 7) | テーブル | 14,580 | ||
| $DF87 (バンク 7) | 呼び出し | 14,580 | ||
| $867F (バンク 4) | 呼び出し | 14,256 | ||
| $EC7B (バンク 7) | テーブル | 9,980 | ||
| $ED0D (バンク 7) | テーブル | 7,431 | ||
| $87A0 (バンク 4) | 呼び出し | 7,276 | ||
| $84F2 (バンク 3) | テーブル | 6,188 | ||
| $84D7 (バンク 3) | テーブル | 5,282 | ||
| $8535 (バンク 3) | テーブル | 4,910 | ||
| $8225 (バンク 3) | テーブル | 4,730 | ||
| $820A (バンク 3) | テーブル | 4,700 | ||
| $EEE7 (バンク 7) | 呼び出し | 4,634 | ||
| $81F0 (バンク 3) | テーブル | 4,530 | ||
| $F85D (バンク 7) | テーブル | 4,217 | ||
| $F86F (バンク 7) | テーブル | 4,188 | ||
| $F850 (バンク 7) | テーブル | 4,171 | ||
| $F86A (バンク 7) | テーブル | 4,148 | ||
| $F83E (バンク 7) | テーブル | 4,140 | ||
| $F831 (バンク 7) | テーブル | 4,121 | ||
| $8471 (バンク 3) | テーブル | 3,713 | ||
| $822F (バンク 4) | 呼び出し | 2,632 | ||
| $F62D (バンク 7) | 呼び出し | 2,421 | ||
| $83E6 (バンク 3) | テーブル | 2,374 | ||
| $823A (バンク 3) | テーブル | 2,301 | ||
| $8205 (バンク 3) | テーブル | 2,265 | ||
| $83CB (バンク 3) | テーブル | 2,192 | ||
| $8009 (バンク 5) | テーブル | 2,131 | ||
| $F2DD (バンク 7) | 呼び出し | 2,119 | ||
| $81AA (バンク 4) | 呼び出し | 1,888 | ||
| $D5B2 (バンク 7) | テーブル | 1,790 | ||
| $815D (バンク 5) | 呼び出し | 1,688 | ||
| $C431 (バンク 7) | テーブル | 1,515 | ||
| $C487 (バンク 7) | テーブル | 1,286 | ||
| $EDB1 (バンク 7) | テーブル | 1,269 | ||
| $8340 (バンク 4) | 呼び出し | 1,191 | ||
| $8398 (バンク 4) | 呼び出し | 1,191 | ||
| $8243 (バンク 3) | 呼び出し | 1,128 | ||
| $E5B3 (バンク 7) | 呼び出し | 1,024 | ||
| $8000 (バンク 6) | テーブル | 969 | ||
| $8157 (バンク 6) | 呼び出し | 969 | ||
| $8166 (バンク 6) | 呼び出し | 969 | ||
| $BFB3 (バンク 6) | 呼び出し | 969 | ||
| $83A3 (バンク 5) | 呼び出し | 965 | ||
| $8192 (バンク 4) | 呼び出し | 944 | ||
| $81CF (バンク 4) | 呼び出し | 944 | ||
| $81DE (バンク 4) | 呼び出し | 944 | ||
| $E2C3 (バンク 7) | 呼び出し | 923 | ||
| $F745 (バンク 7) | 呼び出し | 920 | ||
| $80DD (バンク 5) | 呼び出し | 844 | ||
| $8210 (バンク 5) | テーブル | 823 | ||
| $8448 (バンク 3) | テーブル | 817 | ||
| $81FD (バンク 4) | 呼び出し | 815 | ||
| $8396 (バンク 5) | 呼び出し | 809 | ||
| $84C3 (バンク 3) | テーブル | 631 | ||
| $85EB (バンク 4) | 呼び出し | 564 | ||
| $80BE (バンク 4) | 呼び出し | 401 | ||
| $860A (バンク 4) | 呼び出し | 347 | ||
| $8407 (バンク 3) | テーブル | 346 | ||
| $C6B3 (バンク 7) | テーブル | 308 | ||
| $C466 (バンク 7) | テーブル | 297 | ||
| $E132 (バンク 7) | 呼び出し | 293 | ||
| $868D (バンク 4) | 呼び出し | 289 | ||
| $C4BE (バンク 7) | テーブル | 270 | ||
| $8500 (バンク 3) | テーブル | 176 | ||
| $850D (バンク 3) | テーブル | 165 | ||
| $8327 (バンク 5) | テーブル | 156 | ||
| $E254 (バンク 7) | 呼び出し | 151 | ||
| $8000 (バンク 4) | 呼び出し | 142 | ||
| $E526 (バンク 7) | 呼び出し | 142 | ||
| $8431 (バンク 3) | テーブル | 133 | ||
| $83FA (バンク 3) | テーブル | 125 | ||
| $E7DC (バンク 7) | 呼び出し | 120 | ||
| $E7E7 (バンク 7) | 呼び出し | 120 | ||
| $F0F3 (バンク 7) | 呼び出し | 120 | ||
| $E233 (バンク 7) | 呼び出し | 116 | ||
| $D97C (バンク 7) | 呼び出し | 115 | ||
| $E30A (バンク 7) | 呼び出し | 115 | ||
| $F653 (バンク 7) | 呼び出し | 115 | ||
| $F6B5 (バンク 7) | 呼び出し | 115 | ||
| $851C (バンク 3) | テーブル | 109 | ||
| $E2AF (バンク 7) | 呼び出し | 106 | ||
| $8516 (バンク 3) | テーブル | 97 | ||
| $E285 (バンク 7) | 呼び出し | 85 | ||
| $C3BD (バンク 7) | テーブル | 81 | ||
| $EE55 (バンク 7) | テーブル | 62 | ||
| $EE99 (バンク 7) | テーブル | 62 | ||
| $8296 (バンク 5) | テーブル | 22 | ||
| $CB37 (バンク 7) | 呼び出し | 21 | ||
| $E28F (バンク 7) | 呼び出し | 17 | ||
| $C41B (バンク 7) | テーブル | 12 | ||
| $800C (バンク 5) | テーブル | 8 | ||
| $8270 (バンク 5) | テーブル | 8 | ||
| $82B0 (バンク 5) | テーブル | 6 | ||
| $830D (バンク 5) | テーブル | 6 | ||
| $D98E (バンク 7) | 呼び出し | 5 | ||
| $D989 (バンク 7) | 呼び出し | 4 | ||
| $E1BD (バンク 7) | 呼び出し | 3 | ||
| $86C1 (バンク 4) | 呼び出し | 2 | ||
| $C402 (バンク 7) | テーブル | 2 | ||
| $C67F (バンク 7) | テーブル | 2 |
ジャンプに使うテーブル
ゲームがその中から一つを選ぶ、アドレスのテーブル。ジャンプエンジンへの呼び出しの直後にあるものもあれば、カートリッジのどこかにあるものもある。後者は、ゲームが通って跳んだアドレスがどこから読み込まれたかで見つける。アドレスを積んでそこへ戻ることで跳ぶゲームもあれば、テーブルを二つに分けて、アドレスの下位バイトをある場所に、上位バイトを別の場所に置くゲームもある。どちらも同じやり方で見つける。項目は、走行が選ぶのを見た所までを数える。本当のテーブルはもっと長いかもしれない。最後の列は、その値が項目を選んだメモリのバイトで、追えた場合だけ書いてある: ゲームのモードか、物体の一つが今していることだ。
| 場所 | 届き方 | 項目 | 選ばれた数 | 選んだバイト |
|---|---|---|---|---|
| $81E0 (バンク 3) | ポインタ経由 | 8 | 5 | $00F8 |
| $838B (バンク 3) | ポインタ経由 | 32 | 15 | $066C, $067C |
| $820C (バンク 5) | 呼び出しの直後 | 2 | 2 | $0319 |
| $8221 (バンク 5) | 呼び出しの直後 | 8 | 4 | |
| $BFB6 (バンク 5) | 呼び出しの直後 | 5 | 4 | |
| $BFB6 (バンク 6) | 呼び出しの直後 | 1 | 1 | |
| $F087 (バンク 7) | ポインタ経由 | 9 | 5 | $0028, $0094, $043F, $006F |
| $F8E4 (バンク 7) | ポインタ経由 | 6 | 6 | $003E, $0086, $00A3, $005F |
ルーチンが共有するメモリ
あるルーチンが書き、別のルーチンが読んだメモリは 599 バイト。添字を通して届いた場所は 83 か所で、メモリの中のテーブルや、物体の枠の並びはそう見える。
添字で届いた範囲: 位置を含むもの、次いで最も長いもの
| 起点 | 届いたバイト | 命令 | 含まれる位置 |
|---|---|---|---|
| $0460 | 8 | 17 | 横 6 |
| $0450 | 8 | 13 | 横 2 |
| $0480 | 8 | 13 | 縦 4 |
| $0470 | 8 | 6 | 縦 2 |
| $04D9 | 4 | 6 | 横 1 |
| $0300 | 256 | 2 | |
| $0200 | 253 | 4 | |
| $0203 | 253 | 3 | |
| $0201 | 253 | 2 | |
| $0202 | 253 | 2 | |
| $0627 | 113 | 1 | |
| $0628 | 113 | 1 |
位置と一緒に動くもの
少なくとも二つのルーチンが、位置の配列と一緒に、同じ範囲をたどった配列。画面上のものの表は、メモリの中ではこう見える: 性質ごとに配列が一つ、ものごとに枠が一つ。どの配列が位置を持つかは言える。ほかの配列のうち、どれが位置に足し込まれるか (速度がすること) と、どれがジャンプのテーブルの行き先を選ぶか (状態や種類がすること)、どれが減らされる一方か (タイマーがすること) も言える。残りが何を持つかは、まだ名付けていない。
| 枠 | 配列 | ルーチン | 横の位置 | 縦の位置 | 位置に足し込まれる配列 | ジャンプを選ぶ配列 | 減らされる一方の配列 | 一緒に動く配列 |
|---|---|---|---|---|---|---|---|---|
| 8 | 15 | 24 | $0450, $0460 | $0470, $0480 | $0468 | $0410, $0438 | $0400, $0410, $0438, $0440, $0448, $0458, $0468, $0488, $0490, $0498, $04B0 | |
| 4 | 4 | 3 | $04D9 | $04D1, $04D5, $04E1 |
最も忙しい共有バイト 24 個
| バイト | 読み書き | 書くルーチン | 読むルーチン |
|---|---|---|---|
| $00F0 | 4,924,733 | 3 | 6 |
| $0028 | 4,816,640 | 4 | 6 |
| $00F3 | 4,420,211 | 2 | 6 |
| $00F2 | 4,111,340 | 2 | 5 |
| $0000 | 3,631,052 | 6 | 6 |
| $00F1 | 3,494,079 | 3 | 6 |
| $0001 | 2,904,631 | 6 | 6 |
| $0002 | 1,509,708 | 6 | 6 |
| $0031 | 688,895 | 4 | 4 |
| $0030 | 688,891 | 4 | 4 |
| $00F4 | 479,803 | 6 | 6 |
| $0073 | 469,217 | 6 | 6 |
| $00F5 | 453,191 | 6 | 6 |
| $0034 | 448,103 | 4 | 3 |
| $033F | 434,803 | 5 | 6 |
| $0003 | 415,527 | 4 | 5 |
| $0380 | 408,553 | 4 | 5 |
| $004E | 393,403 | 2 | 4 |
| $005C | 386,135 | 3 | 3 |
| $001C | 284,594 | 6 | 6 |
| $008C | 282,229 | 4 | 5 |
| $0004 | 268,967 | 6 | 6 |
| $0033 | 264,296 | 4 | 4 |
| $0032 | 264,276 | 4 | 4 |
このページはゲームのバイトを一つも見せない。これらの数を読み取ったリスティングは、カートリッジと一緒に留まる。