Teenage Mutant Ninja Turtles (USA)
Teenage Mutant Ninja Turtles (USA) is on a MMC1 board with 131,072 bytes of program. A crawl of 6,400 steps from power-on kept 109 paths that found new code. Played back over 247,209 frames, they executed 17,970 bytes of it, 14 percent.
What the rules named
- The poll: 2
- The counting spin: 1
- The game inside the interrupt: 1
- The jump engine: 1
- The handler kept in memory: 1
- The bank switch: 37
- The picture writer: 1
- The palette writers: 1
- The sprite writers: 7
- The scroll writer: 1
- The split: 1
- The sound driver: 1
- Where two things are compared: 3
The 372 routines the runs entered
Every place the game's code was entered, by a call, an interrupt or a jump through a table. The ones a rule named come first, with what the rule saw, and their names in the listing say what they are: a poll, an engine, a drain.
| at | its name in the listing | entered by | times | what it is, and the evidence |
|---|---|---|---|---|
| $C0C3 (bank 7) | b7_sprites_C0C3 | a call | 952,578 | The sprite writers: frames it ran in 59,636, writes to the sprite page 2,358,572 |
| $CEA7 (bank 7) | b7_bank_CEA7 | a call | 241,745 | The bank switch: writes 1,208,270, in the blank 630,725, while drawing 577,545 |
| $C702 (bank 7) | b7_engine_C702 | a call | 222,858 | The jump engine: tables 12, jumps through them 222,858 |
| $CEA5 (bank 7) | b7_bank_CEA5 | a call | 157,235 | The bank switch: writes 786,019, in the blank 600, while drawing 785,419 |
| $C50D (bank 7) | b7_poll_C50D | a call | 155,558 | The poll: port $4016, reads a frame 16, strobes a frame 3 The poll: port $4017, reads a frame 16, strobes a frame 3 |
| $8BDA (bank 0) | b0_sound_8BDA | a call | 84,040 | The sound driver: frames it ran in 55,587, writes 146,096 |
| $C3A3 (bank 7) | b7_nmi | each frame (NMI) | 77,988 | The game inside the interrupt: frames it ran in 78,243, frames in all 78,789, the spin is at $C395 |
| $C460 (bank 7) | b7_scroll_C460 | a call | 77,988 | The scroll writer: frames it ran in 77,988, writes in the blank 153,915 |
| $CED5 (bank 7) | b7_bank_CED5 | a call | 77,988 | The bank switch: writes 389,726, in the blank 262,621, while drawing 127,105 |
| $C26C (bank 7) | b7_drain_C26C | a call | 77,888 | The palette writers: frames it ran in 77,888, writes 30,144 The picture writer: frames it ran in 77,888, writes 412,419, in the blank 412,419, while drawing 0 |
| $C001 (bank 7) | b7_sprites_C001 | a call | 77,850 | The sprite writers: frames it ran in 77,997, writes to the sprite page 3,384,671 |
| $C190 (bank 7) | b7_sprites_C190 | a call | 72,913 | The sprite writers: frames it ran in 67,496, writes to the sprite page 1,838,803 |
| $C1C6 (bank 7) | b7_sprites_C1C6 | a call | 59,533 | The sprite writers: frames it ran in 59,527, writes to the sprite page 111,744 |
| $9AD3 (bank 6) | b6_compare_9AD3 | a call | 28,781 | Where two things are compared: instructions 6, pairs of bytes 17, bytes in all 19, times compared 45,602, X positions at $004F,$0480,$0485,$0486,$0487,$0488,$04E5, Y positions at $0051,$0460,$0465,$0466,$0467,$0468,$04B5,$04B6,$04B7,$04B8,$04B9,$04BA |
| $8001 (bank 0) | b0_split_8001 | a call | 26,675 | The split: frames it ran in 26,720, scroll writes while drawing 22,001, status reads while drawing 10,196,853 |
| $CC18 (bank 7) | b7_dispatch_CC18 | a table | 26,675 | The bank switch: writes 9,944, in the blank 0, while drawing 9,944 |
| $D042 (bank 7) | b7_bank_D042 | a call | 24,686 | The bank switch: writes 123,400, in the blank 195, while drawing 123,205 |
| $D23D (bank 7) | b7_bank_D23D | a call | 22,804 | The bank switch: writes 113,989, in the blank 0, while drawing 113,989 |
| $8032 (bank 5) | b5_handlers_8032 | a call | 21,990 | The handler kept in memory: jumps 20,509, places it landed 2, address copied from $0480 |
| $D04D (bank 7) | b7_bank_D04D | a call | 12,308 | The bank switch: writes 61,530, in the blank 0, while drawing 61,530 |
| $C1FA (bank 7) | b7_sprites_C1FA | a call | 7,283 | The sprite writers: frames it ran in 7,283, writes to the sprite page 232,967 |
| $AA25 (bank 4) | b4_dispatch_AA25 | a table | 7,156 | The bank switch: writes 31,696, in the blank 0, while drawing 31,696 |
| $9D0C (bank 4) | b4_dispatch_9D0C | a table | 6,632 | The bank switch: writes 50, in the blank 0, while drawing 50 |
| $BDE2 (bank 3) | b3_dispatch_BDE2 | a table | 6,152 | The bank switch: writes 30,530, in the blank 0, while drawing 30,530 |
| $A634 (bank 4) | b4_bank_A634 | a call | 6,097 | The bank switch: writes 1,654, in the blank 0, while drawing 1,654 |
| $B8C9 (bank 3) | b3_sprites_B8C9 | a call | 4,779 | The sprite writers: frames it ran in 4,779, writes to the sprite page 19,112 |
| $CE56 (bank 7) | b7_bank_CE56 | a call | 3,965 | The bank switch: writes 19,749, in the blank 545, while drawing 19,204 |
| $A24D (bank 4) | b4_dispatch_A24D | a table | 3,745 | The bank switch: writes 5, in the blank 0, while drawing 5 |
| $D104 (bank 7) | b7_bank_D104 | a call | 3,592 | The bank switch: writes 17,958, in the blank 0, while drawing 17,958 |
| $BDB2 (bank 3) | b3_dispatch_BDB2 | a table | 1,734 | The bank switch: writes 8,414, in the blank 0, while drawing 8,414 |
| $8381 (bank 5) | b5_compare_8381 | a call | 1,213 | Where two things are compared: instructions 5, pairs of bytes 9, bytes in all 11, times compared 4,848, X positions at $004F,$0480,$04E5, Y positions at $0051,$0460,$04B5,$04B6,$04B7,$04B8,$04B9,$04BA |
| $DB71 (bank 7) | b7_bank_DB71 | a call | 1,200 | The bank switch: writes 6,000, in the blank 0, while drawing 6,000 |
| $CEF0 (bank 7) | b7_bank_CEF0 | a call | 1,171 | The bank switch: writes 5,854, in the blank 0, while drawing 5,854 |
| $9FB0 (bank 4) | b4_dispatch_9FB0 | a table | 677 | The bank switch: writes 150, in the blank 0, while drawing 150 |
| $CE8A (bank 7) | b7_bank_CE8A | a call | 534 | The bank switch: writes 2,670, in the blank 550, while drawing 2,120 |
| $CEC0 (bank 7) | b7_bank_CEC0 | a call | 497 | The bank switch: writes 2,485, in the blank 0, while drawing 2,485 |
| $CE6F (bank 7) | b7_bank_CE6F | a call | 456 | The bank switch: writes 2,279, in the blank 550, while drawing 1,729 |
| $9784 (bank 6) | b6_compare_9784 | a call | 265 | Where two things are compared: instructions 1, pairs of bytes 3, bytes in all 4, times compared 20, X positions at $0480,$0485,$0486,$0487 |
| $A0A3 (bank 4) | b4_dispatch_A0A3 | a table | 176 | The bank switch: writes 90, in the blank 0, while drawing 90 |
| $9F5C (bank 4) | b4_bank_9F5C | a call | 150 | The bank switch: writes 750, in the blank 0, while drawing 750 |
| $CBBF (bank 7) | b7_dispatch_CBBF | a table | 126 | The bank switch: writes 610, in the blank 0, while drawing 610 |
| $D22C (bank 7) | b7_bank_D22C | a call | 109 | The bank switch: writes 545, in the blank 0, while drawing 545 |
| $FFD8 (bank 7) | b7_reset | power-on | 109 | The bank switch: writes 1,308, in the blank 1,308, while drawing 0 The sprite writers: frames it ran in 78,232, writes to the sprite page 27,904 |
| $D0D1 (bank 7) | b7_bank_D0D1 | a call | 80 | The bank switch: writes 400, in the blank 0, while drawing 400 |
| $D21B (bank 7) | b7_bank_D21B | a call | 68 | The bank switch: writes 340, in the blank 0, while drawing 340 |
| $D255 (bank 7) | b7_bank_D255 | a call | 51 | The bank switch: writes 255, in the blank 0, while drawing 255 |
| $D0B0 (bank 7) | b7_bank_D0B0 | a call | 48 | The bank switch: writes 240, in the blank 0, while drawing 240 |
| $D0C6 (bank 7) | b7_bank_D0C6 | a call | 48 | The bank switch: writes 240, in the blank 0, while drawing 240 |
| $D27C (bank 7) | b7_bank_D27C | a call | 28 | The bank switch: writes 140, in the blank 0, while drawing 140 |
| $D0BB (bank 7) | b7_bank_D0BB | a call | 20 | The bank switch: writes 100, in the blank 0, while drawing 100 |
| $CE8C (bank 7) | b7_bank_CE8C | a call | 16 | The bank switch: writes 80, in the blank 0, while drawing 80 |
| $D262 (bank 7) | b7_bank_D262 | a call | 16 | The bank switch: writes 80, in the blank 0, while drawing 80 |
| $D26F (bank 7) | b7_bank_D26F | a call | 12 | The bank switch: writes 60, in the blank 0, while drawing 60 |
| $CED0 (bank 7) | b7_bank_CED0 | a call | 1 | The bank switch: writes 5, in the blank 0, while drawing 5 |
| $8F96 (bank 0) | a call | 374,665 | ||
| $8671 (bank 0) | a call | 371,438 | ||
| $CA94 (bank 7) | a call | 339,662 | ||
| $8010 (bank 6) | a call | 313,137 | ||
| $8CE8 (bank 0) | a call | 274,129 | ||
| $CA92 (bank 7) | a call | 203,164 | ||
| $9617 (bank 6) | a call | 134,225 | ||
| $F072 (bank 7) | a call | 84,032 | ||
| $87B0 (bank 0) | a call | 83,489 | ||
| $C48E (bank 7) | a call | 78,881 | ||
| $C4B3 (bank 7) | a call | 78,881 | ||
| $8612 (bank 0) | a call | 77,982 | ||
| $8644 (bank 0) | a call | 77,982 | ||
| $C532 (bank 7) | a call | 77,851 | ||
| $F481 (bank 7) | a call | 77,850 | ||
| $C413 (bank 7) | a call | 77,779 | ||
| $C4C6 (bank 7) | a call | 77,779 | ||
| $C4D6 (bank 7) | a call | 77,779 | ||
| $C551 (bank 7) | a call | 77,779 | ||
| $ACBE (bank 4) | a call | 77,764 | ||
| $C4F2 (bank 7) | a call | 76,884 | ||
| $DE24 (bank 7) | a call | 62,416 | ||
| $DD8B (bank 7) | a call | 61,216 | ||
| $DDC3 (bank 7) | a call | 61,216 | ||
| $DE02 (bank 7) | a call | 61,216 | ||
| $DE1A (bank 7) | a call | 61,216 | ||
| $DE3A (bank 7) | a call | 61,216 | ||
| $844E (bank 5) | a call | 60,635 | ||
| $808C (bank 6) | a call | 49,759 | ||
| $F089 (bank 7) | a call | 40,080 | ||
| $CB07 (bank 7) | a table | 35,889 | ||
| $9B11 (bank 6) | a call | 33,895 | ||
| $EF21 (bank 7) | a call | 32,970 | ||
| $CDB9 (bank 7) | a call | 31,619 | ||
| $87FA (bank 0) | a table | 31,344 | ||
| $DEA5 (bank 7) | a call | 31,269 | ||
| $C6A8 (bank 7) | a call | 31,179 | ||
| $8C71 (bank 0) | a call | 27,066 | ||
| $AC05 (bank 4) | a call | 26,574 | ||
| $DEFC (bank 7) | a call | 25,226 | ||
| $996F (bank 4) | a call | 24,815 | ||
| $8795 (bank 0) | a table | 24,461 | ||
| $C627 (bank 7) | a table | 22,825 | ||
| $BCFB (bank 3) | a call | 22,804 | ||
| $C71B (bank 7) | a call | 22,605 | ||
| $8049 (bank 5) | a call | 21,990 | ||
| $8077 (bank 5) | a call | 21,990 | ||
| $EF03 (bank 7) | a call | 21,990 | ||
| $F161 (bank 7) | a call | 21,990 | ||
| $83D6 (bank 5) | a call | 20,216 | ||
| $9851 (bank 5) | a table | 20,216 | ||
| $8466 (bank 5) | a call | 20,204 | ||
| $EF9D (bank 7) | a call | 19,680 | ||
| $EFA3 (bank 7) | a call | 19,271 | ||
| $8CBD (bank 0) | a call | 18,935 | ||
| $C564 (bank 7) | a table | 18,905 | ||
| $CFCD (bank 7) | a call | 18,414 | ||
| $E145 (bank 7) | a call | 18,414 | ||
| $9989 (bank 4) | a call | 18,183 | ||
| $8B27 (bank 0) | a call | 18,108 | ||
| $87A9 (bank 0) | a table | 17,973 | ||
| $C792 (bank 7) | a call | 17,894 | ||
| $A6AF (bank 4) | a call | 17,189 | ||
| $871E (bank 0) | a call | 15,540 | ||
| $DEE0 (bank 7) | a call | 14,430 | ||
| $CA9F (bank 7) | a call | 13,787 | ||
| $EF93 (bank 7) | a call | 12,757 | ||
| $F18D (bank 7) | a call | 12,398 | ||
| $CFF3 (bank 7) | a call | 12,378 | ||
| $D000 (bank 7) | a call | 12,378 | ||
| $D02A (bank 7) | a call | 12,378 | ||
| $DEBB (bank 7) | a call | 12,378 | ||
| $E3F6 (bank 7) | a call | 12,378 | ||
| $8055 (bank 0) | a call | 12,308 | ||
| $CF10 (bank 7) | a call | 12,308 | ||
| $CF18 (bank 7) | a call | 12,308 | ||
| $CF42 (bank 7) | a call | 12,308 | ||
| $CF4A (bank 7) | a call | 12,308 | ||
| $CFC5 (bank 7) | a call | 12,308 | ||
| $86F3 (bank 0) | a call | 12,277 | ||
| $80CC (bank 6) | a call | 11,449 | ||
| $E152 (bank 7) | a call | 11,281 | ||
| $9C69 (bank 4) | a call | 11,280 | ||
| $8F86 (bank 0) | a call | 11,269 | ||
| $9BE4 (bank 4) | a call | 10,993 | ||
| $EF0D (bank 7) | a call | 10,993 | ||
| $8081 (bank 6) | a call | 10,451 | ||
| $8672 (bank 6) | a call | 10,392 | ||
| $864A (bank 6) | a call | 10,350 | ||
| $CA58 (bank 7) | a call | 10,320 | ||
| $C60F (bank 7) | a table | 10,314 | ||
| $B91E (bank 3) | a call | 9,558 | ||
| $8D70 (bank 0) | a table | 9,130 | ||
| $DF23 (bank 7) | a call | 8,802 | ||
| $E218 (bank 7) | a call | 8,677 | ||
| $BE68 (bank 3) | a table | 8,204 | ||
| $D9E3 (bank 7) | a table | 7,882 | ||
| $D9F2 (bank 7) | a table | 7,875 | ||
| $D9D1 (bank 7) | a table | 7,760 | ||
| $D9D8 (bank 7) | a table | 7,752 | ||
| $DFDB (bank 7) | a call | 7,652 | ||
| $C5E1 (bank 7) | a table | 7,299 | ||
| $CBA7 (bank 7) | a call | 7,278 | ||
| $A8B5 (bank 6) | a call | 7,190 | ||
| $AB30 (bank 6) | a call | 7,190 | ||
| $8E66 (bank 0) | a table | 7,185 | ||
| $AEAA (bank 3) | a table | 7,176 | ||
| $EF89 (bank 7) | a call | 6,548 | ||
| $CAA4 (bank 7) | a call | 6,515 | ||
| $A8C7 (bank 6) | a call | 6,495 | ||
| $9745 (bank 4) | a call | 6,106 | ||
| $9C1D (bank 6) | a call | 5,175 | ||
| $9C2A (bank 6) | a table | 5,175 | ||
| $8C24 (bank 0) | a call | 5,161 | ||
| $DA35 (bank 7) | a call | 5,056 | ||
| $AC77 (bank 3) | a call | 4,939 | ||
| $ADD1 (bank 3) | a call | 4,824 | ||
| $AA5C (bank 3) | a table | 4,779 | ||
| $8857 (bank 0) | a call | 4,372 | ||
| $889D (bank 0) | a call | 4,298 | ||
| $842B (bank 0) | a call | 3,892 | ||
| $DF53 (bank 7) | a call | 3,826 | ||
| $DF8D (bank 7) | a call | 3,826 | ||
| $E019 (bank 7) | a call | 3,826 | ||
| $D4C8 (bank 7) | a table | 3,776 | ||
| $DD08 (bank 7) | a call | 3,776 | ||
| $BD69 (bank 3) | a table | 3,707 | ||
| $8F37 (bank 0) | a table | 2,858 | ||
| $88B2 (bank 0) | a call | 2,724 | ||
| $81AC (bank 0) | a call | 2,589 | ||
| $841D (bank 0) | a call | 2,566 | ||
| $8450 (bank 0) | a call | 2,566 | ||
| $846E (bank 0) | a call | 2,566 | ||
| $8D22 (bank 0) | a table | 2,396 | ||
| $EF48 (bank 7) | a call | 2,320 | ||
| $88F8 (bank 5) | a call | 2,218 | ||
| $F062 (bank 7) | a call | 1,838 | ||
| $8BEA (bank 0) | a call | 1,746 | ||
| $8001 (bank 6) | a call | 1,683 | ||
| $8C75 (bank 0) | a call | 1,662 | ||
| $8CFB (bank 0) | a table | 1,662 | ||
| $88C8 (bank 0) | a call | 1,574 | ||
| $8F45 (bank 0) | a call | 1,563 | ||
| $9057 (bank 0) | a call | 1,501 | ||
| $EFC7 (bank 7) | a call | 1,408 | ||
| $811F (bank 0) | a table | 1,326 | ||
| $817A (bank 0) | a table | 1,303 | ||
| $82E8 (bank 0) | a call | 1,303 | ||
| $8409 (bank 0) | a call | 1,303 | ||
| $8413 (bank 0) | a call | 1,303 | ||
| $8084 (bank 0) | a table | 1,283 | ||
| $80CC (bank 0) | a table | 1,263 | ||
| $8FA3 (bank 0) | a call | 1,248 | ||
| $8907 (bank 5) | a table | 1,213 | ||
| $DC17 (bank 7) | a call | 1,200 | ||
| $DC58 (bank 7) | a call | 1,200 | ||
| $DE46 (bank 7) | a call | 1,200 | ||
| $C59C (bank 7) | a table | 1,183 | ||
| $84FC (bank 6) | a call | 1,108 | ||
| $CAAC (bank 7) | a call | 1,032 | ||
| $F1D4 (bank 7) | a call | 944 | ||
| $F1EF (bank 7) | a call | 944 | ||
| $8DB8 (bank 0) | a table | 905 | ||
| $BF17 (bank 3) | a table | 890 | ||
| $BE3C (bank 3) | a table | 872 | ||
| $C982 (bank 7) | a call | 868 | ||
| $A5F0 (bank 4) | a call | 853 | ||
| $9016 (bank 0) | a call | 728 | ||
| $A8BE (bank 6) | a call | 695 | ||
| $CAAA (bank 7) | a call | 688 | ||
| $D992 (bank 7) | a call | 645 | ||
| $A0EA (bank 4) | a call | 642 | ||
| $896B (bank 5) | a call | 641 | ||
| $C962 (bank 7) | a call | 581 | ||
| $845E (bank 6) | a call | 554 | ||
| $8469 (bank 6) | a call | 554 | ||
| $8950 (bank 5) | a call | 551 | ||
| $F72E (bank 7) | a call | 520 | ||
| $89AD (bank 5) | a call | 483 | ||
| $BEDA (bank 3) | a table | 441 | ||
| $BEA5 (bank 3) | a table | 440 | ||
| $A764 (bank 4) | a call | 423 | ||
| $F17A (bank 7) | a call | 420 | ||
| $85F3 (bank 0) | a call | 415 | ||
| $8F55 (bank 0) | a table | 415 | ||
| $8994 (bank 5) | a call | 380 | ||
| $8DA0 (bank 0) | a table | 376 | ||
| $F784 (bank 7) | a call | 357 | ||
| $84AD (bank 6) | a call | 341 | ||
| $F06A (bank 7) | a call | 337 | ||
| $8721 (bank 0) | a call | 334 | ||
| $F77E (bank 7) | a call | 323 | ||
| $C6D2 (bank 7) | a call | 319 | ||
| $AAD9 (bank 6) | a call | 301 | ||
| $9870 (bank 5) | a table | 293 | ||
| $EFF4 (bank 7) | a call | 293 | ||
| $8DB4 (bank 0) | a table | 290 | ||
| $A618 (bank 4) | a call | 280 | ||
| $A106 (bank 4) | a call | 240 | ||
| $BF41 (bank 3) | a table | 234 | ||
| $C6B9 (bank 7) | a call | 219 | ||
| $8570 (bank 6) | a call | 213 | ||
| $8DE5 (bank 0) | a table | 209 | ||
| $8E43 (bank 0) | a table | 201 | ||
| $8146 (bank 6) | a call | 188 | ||
| $EED3 (bank 7) | a call | 188 | ||
| $8DF8 (bank 0) | a table | 187 | ||
| $EFBC (bank 7) | a call | 176 | ||
| $8593 (bank 5) | a call | 175 | ||
| $978E (bank 5) | a table | 175 | ||
| $8634 (bank 6) | a call | 168 | ||
| $8642 (bank 6) | a call | 168 | ||
| $9F22 (bank 4) | a call | 150 | ||
| $E127 (bank 7) | a call | 150 | ||
| $F718 (bank 7) | a call | 149 | ||
| $F740 (bank 7) | a call | 149 | ||
| $9E7E (bank 4) | a call | 146 | ||
| $9BAD (bank 4) | a call | 136 | ||
| $AAFA (bank 6) | a call | 134 | ||
| $CB5C (bank 7) | a table | 133 | ||
| $D34B (bank 7) | a call | 133 | ||
| $D536 (bank 7) | a call | 133 | ||
| $9662 (bank 4) | a call | 131 | ||
| $C93C (bank 7) | a call | 110 | ||
| $C498 (bank 7) | a call | 109 | ||
| $C4A3 (bank 7) | a call | 109 | ||
| $C571 (bank 7) | a table | 109 | ||
| $FFDD (bank 7) | an interrupt (IRQ) | 109 | ||
| $EF8C (bank 7) | a call | 98 | ||
| $D548 (bank 7) | a call | 96 | ||
| $E838 (bank 7) | a call | 96 | ||
| $C6C7 (bank 7) | a call | 88 | ||
| $CA5E (bank 7) | a call | 88 | ||
| $AFA2 (bank 3) | a table | 86 | ||
| $AB0D (bank 6) | a call | 83 | ||
| $877E (bank 5) | a table | 80 | ||
| $C65C (bank 7) | a table | 80 | ||
| $C669 (bank 7) | a table | 80 | ||
| $C6C2 (bank 7) | a call | 80 | ||
| $C6D6 (bank 7) | a call | 80 | ||
| $CB3E (bank 7) | a table | 80 | ||
| $CB54 (bank 7) | a table | 80 | ||
| $D2D0 (bank 7) | a table | 80 | ||
| $EF3D (bank 7) | a call | 80 | ||
| $AB03 (bank 3) | a call | 64 | ||
| $AB5B (bank 3) | a call | 64 | ||
| $AB75 (bank 3) | a call | 64 | ||
| $A69F (bank 4) | a call | 63 | ||
| $BF06 (bank 1) | a call | 56 | ||
| $C930 (bank 7) | a call | 56 | ||
| $BD20 (bank 3) | a table | 53 | ||
| $95C9 (bank 6) | a call | 52 | ||
| $9F35 (bank 4) | a call | 49 | ||
| $AA4A (bank 3) | a table | 48 | ||
| $B695 (bank 3) | a call | 48 | ||
| $EF3F (bank 7) | a call | 48 | ||
| $AAEC (bank 6) | a call | 45 | ||
| $AE8F (bank 3) | a table | 45 | ||
| $D551 (bank 7) | a call | 45 | ||
| $D574 (bank 7) | a call | 45 | ||
| $F75E (bank 7) | a call | 45 | ||
| $A23C (bank 4) | a table | 44 | ||
| $AF86 (bank 3) | a table | 43 | ||
| $B005 (bank 3) | a table | 43 | ||
| $DBE4 (bank 7) | a call | 43 | ||
| $CF20 (bank 7) | a call | 42 | ||
| $889B (bank 5) | a call | 37 | ||
| $A612 (bank 4) | a call | 36 | ||
| $BF67 (bank 3) | a table | 32 | ||
| $BE1E (bank 3) | a table | 30 | ||
| $C90B (bank 7) | a call | 30 | ||
| $BEB7 (bank 1) | a call | 28 | ||
| $BF16 (bank 1) | a call | 28 | ||
| $C920 (bank 7) | a call | 28 | ||
| $C92E (bank 7) | a call | 28 | ||
| $A3DC (bank 4) | a call | 26 | ||
| $882D (bank 5) | a call | 25 | ||
| $8DAA (bank 0) | a table | 22 | ||
| $A3B4 (bank 4) | a call | 21 | ||
| $88C4 (bank 5) | a call | 20 | ||
| $A62D (bank 4) | a call | 20 | ||
| $A649 (bank 4) | a call | 20 | ||
| $A657 (bank 4) | a call | 20 | ||
| $C6BD (bank 7) | a call | 20 | ||
| $A936 (bank 3) | a table | 16 | ||
| $A99A (bank 3) | a table | 16 | ||
| $A9AB (bank 3) | a table | 16 | ||
| $A9B0 (bank 3) | a table | 16 | ||
| $A9B3 (bank 3) | a table | 16 | ||
| $AA1C (bank 3) | a table | 16 | ||
| $AA2A (bank 3) | a table | 16 | ||
| $AAC2 (bank 3) | a call | 16 | ||
| $ABC6 (bank 3) | a call | 16 | ||
| $ADF4 (bank 3) | a table | 16 | ||
| $BE7A (bank 1) | a call | 16 | ||
| $C975 (bank 7) | a call | 16 | ||
| $8733 (bank 5) | a table | 13 | ||
| $BEE2 (bank 1) | a call | 12 | ||
| $BE8B (bank 3) | a table | 9 | ||
| $A0D3 (bank 4) | a call | 8 | ||
| $A1B8 (bank 4) | a call | 7 | ||
| $9BF4 (bank 6) | a call | 6 | ||
| $AA5B (bank 4) | a table | 6 | ||
| $AFB3 (bank 3) | a table | 6 | ||
| $BEFD (bank 3) | a table | 6 | ||
| $AFBA (bank 3) | a table | 4 | ||
| $9913 (bank 6) | a call | 3 | ||
| $9BDF (bank 6) | a call | 3 | ||
| $9EEE (bank 4) | a call | 3 | ||
| $A404 (bank 4) | a table | 3 | ||
| $C889 (bank 7) | a call | 3 | ||
| $C8A9 (bank 7) | a call | 3 | ||
| $E68A (bank 7) | a table | 3 | ||
| $885D (bank 5) | a call | 2 | ||
| $A0DA (bank 4) | a call | 2 | ||
| $C3D5 (bank 7) | a call | 2 | ||
| $AF8B (bank 3) | a table | 1 | ||
| $D0F2 (bank 7) | a call | 1 |
Where it waits
Loops a rule named that sit inside a routine and are not themselves a place the code is entered.
| at | its name in the listing | what it is, and the evidence |
|---|---|---|
| $C395 (bank 7) | b7_spin_C395 | The counting spin: counts in the byte at $0045, turns 63,807,674, turns a frame 809, reads of it from outside the loop 80 |
The tables it jumps through
A table of addresses the game picks one from. Some sit right after a call to a jump engine; others are anywhere in the cartridge, and we find them by where the address the game jumped through was loaded from. Some games jump by pushing an address and returning to it, and some keep a table as two, the low bytes of its addresses in one place and the high bytes in another; both are found the same way. An entry is counted as far as the runs saw one taken; the true table may be longer. The last column is the byte of memory whose value picked the entry, where we could follow it: the game's mode, or what one of its objects is doing.
| at | reached | entries | taken | chosen by the byte at |
|---|---|---|---|---|
| $807C (bank 0) | after a call | 4 | 4 | $001E |
| $8D92 (bank 0) | through a pointer | 7 | 7 | |
| $8FB0 (bank 0) | through a pointer | 4 | 4 | |
| $8FC0 (bank 0) | through a pointer | 2 | 2 | |
| $8FC4 (bank 0) | through a pointer | 4 | 4 | |
| $A924 (bank 3) | after a call | 9 | 9 | $00D0 |
| $ADEC (bank 3) | after a call | 4 | 3 | $008E |
| $AF46 (bank 3) | after a call | 9 | 6 | |
| $BD04 (bank 3) | after a call | 14 | 14 | $03C2 |
| $9CB3 (bank 4) | after a call | 13 | 7 | $0510 |
| $AA1F (bank 4) | after a call | 2 | 2 | $0510 |
| $8245 (bank 5) | through a pointer | 44 | 2 | $0445, $0446, $0447, $0449 |
| $9424 (bank 5) | through a pointer | 14 | 2 | $0445, $0447, $0446, $0448 |
| $9491 (bank 5) | through a pointer | 2 | 2 | $0445, $0448, $0446, $0447 |
| $9C22 (bank 6) | after a call | 2 | 1 | $005E |
| $C558 (bank 7) | after a call | 5 | 5 | $001B |
| $C569 (bank 7) | after a call | 4 | 4 | $001C |
| $CB26 (bank 7) | after a call | 7 | 7 | $0034, $0617 |
| $D9C9 (bank 7) | after a call | 4 | 4 | $004F, $0051, $00A4 |
The memory its routines share
785 bytes of memory were written by one routine and read by another, and 75 places were reached through an index, which is what a table or a set of object slots in memory looks like.
Reaches through an index: those that hold positions, then the longest
| from | bytes reached | instructions | positions it holds |
|---|---|---|---|
| $0460 | 16 | 20 | 5 down |
| $0480 | 16 | 19 | 5 across |
| $04B0 | 16 | 8 | 6 down |
| $04E0 | 16 | 7 | 1 across |
| $004F | 4 | 1 | 1 across, 1 down |
| $0300 | 256 | 9 | |
| $0400 | 256 | 4 | |
| $0500 | 256 | 3 | |
| $0700 | 256 | 2 | |
| $0600 | 256 | 1 | |
| $0200 | 253 | 6 | |
| $0201 | 253 | 3 |
What travels with a position
Arrays that at least two routines step through together with an array of positions, across the same range. That is what a table of the things on the screen looks like in memory: one array for each property, one slot for each thing. We can say which arrays hold positions, which of the others get added into them, which is what a speed does, which pick the way through a jump table, which is what a state or a kind does, and which are only ever counted down, which is what a timer does. What the rest hold is not named yet.
| slots | arrays | routines | positions across | positions down | added into them | choosing a jump | counted down | travelling with them |
|---|---|---|---|---|---|---|---|---|
| 16 | 25 | 33 | $0480, $04E0 | $0460, $04B0 | $0470, $0490, $04C0 | $0440, $0510 | $0420, $0500 | $0400, $0410, $0420, $0430, $0440, $0450, $0470, $0490, $04C0, $04F0, $0500, $0510, $0520, $0530, $0540, $0550, $0560, $0570, $0580, $0630, $0640 |
The 24 busiest shared bytes
| byte | reads and writes | routines writing | routines reading |
|---|---|---|---|
| $0045 | 177,302,747 | 2 | 2 |
| $001E | 128,033,299 | 2 | 6 |
| $0000 | 9,582,225 | 6 | 6 |
| $0001 | 8,658,024 | 6 | 6 |
| $0008 | 7,457,559 | 6 | 6 |
| $0003 | 4,925,034 | 6 | 6 |
| $0009 | 4,270,814 | 6 | 6 |
| $000C | 3,774,850 | 3 | 4 |
| $0002 | 3,755,437 | 6 | 6 |
| $0005 | 2,260,787 | 6 | 6 |
| $0004 | 1,921,273 | 6 | 6 |
| $0016 | 1,538,398 | 5 | 6 |
| $00F0 | 1,397,694 | 6 | 6 |
| $0022 | 1,270,501 | 6 | 6 |
| $000A | 880,124 | 6 | 6 |
| $0013 | 876,130 | 6 | 6 |
| $00E2 | 852,879 | 6 | 6 |
| $00E1 | 848,417 | 4 | 6 |
| $00E0 | 848,329 | 4 | 6 |
| $00FF | 663,900 | 6 | 6 |
| $001A | 571,756 | 6 | 6 |
| $0011 | 484,180 | 6 | 6 |
| $00F7 | 461,501 | 2 | 3 |
| $0010 | 449,874 | 6 | 6 |
This page shows none of the game's bytes. The listing these figures were read from stays with the cartridge.