Teenage Mutant Ninja Turtles (USA)

Teenage Mutant Ninja Turtles (USA) is on a MMC1 board with 131,072 bytes of program. A crawl of 400 steps from power-on kept 40 paths that found new code. Played back over 23,980 frames, they executed 14,264 bytes of it, 11 percent.

What the rules named

The 293 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.

atentered bytimeswhat it is, and the evidence
$C0C3 (bank 7)a call162,202
The sprite writers: frames it ran in 10,174, writes to the sprite page 101,040
$C702 (bank 7)a call41,796
The jump engine: tables 11, jumps through them 41,796
$CEA7 (bank 7)a call41,026
The bank switch: writes 205,084, in the blank 112,989, while drawing 92,095
$C50D (bank 7)a call26,312
The poll: port $4016, reads a frame 16, strobes a frame 3
The poll: port $4017, reads a frame 16, strobes a frame 3
$CEA5 (bank 7)a call25,605
The bank switch: writes 127,978, in the blank 200, while drawing 127,778
$C3A3 (bank 7)each frame (NMI)13,200
The game inside the interrupt: frames it ran in 13,281, frames in all 13,480, the spin is at $C395
$C460 (bank 7)a call13,200
The scroll writer: frames it ran in 13,200, writes in the blank 25,848
$CED5 (bank 7)a call13,200
The bank switch: writes 65,950, in the blank 49,876, while drawing 16,074
$C26C (bank 7)a call13,196
The palette writers: frames it ran in 13,196, writes 4,736
The picture writer: frames it ran in 13,196, writes 116,494, in the blank 116,494, while drawing 0
$C001 (bank 7)a call13,185
The sprite writers: frames it ran in 13,236, writes to the sprite page 565,317
$C190 (bank 7)a call12,854
The sprite writers: frames it ran in 11,935, writes to the sprite page 414,325
$8BDA (bank 0)a call11,245
The sound driver: frames it ran in 9,057, writes 21,910
$C1C6 (bank 7)a call10,136
The sprite writers: frames it ran in 10,134, writes to the sprite page 45,472
$8001 (bank 0)a call5,406
The split: frames it ran in 5,410, scroll writes while drawing 3,540, status reads while drawing 1,744,366
$CC18 (bank 7)a table5,406
The bank switch: writes 3,545, in the blank 0, while drawing 3,545
$D042 (bank 7)a call4,697
The bank switch: writes 23,484, in the blank 20, while drawing 23,464
$9AD3 (bank 6)a call4,644
Where two things are compared: instructions 6, pairs of bytes 7, bytes in all 9, times compared 6,154, X positions at $0480,$0485,$0486,$0487,$0488, Y positions at $0051,$0460,$0468,$04B5
$D04D (bank 7)a call2,334
The bank switch: writes 11,669, in the blank 0, while drawing 11,669
$C1FA (bank 7)a call1,585
The sprite writers: frames it ran in 1,585, writes to the sprite page 50,687
$AA25 (bank 4)a table1,544
The bank switch: writes 6,950, in the blank 0, while drawing 6,950
$CE56 (bank 7)a call1,499
The bank switch: writes 7,463, in the blank 200, while drawing 7,263
$D104 (bank 7)a call711
The bank switch: writes 3,554, in the blank 0, while drawing 3,554
$B8C9 (bank 3)a call260
The sprite writers: frames it ran in 260, writes to the sprite page 1,040
$CEC0 (bank 7)a call180
The bank switch: writes 900, in the blank 0, while drawing 900
$CE8A (bank 7)a call172
The bank switch: writes 860, in the blank 200, while drawing 660
$CEF0 (bank 7)a call134
The bank switch: writes 670, in the blank 0, while drawing 670
$CE6F (bank 7)a call132
The bank switch: writes 660, in the blank 200, while drawing 460
$DB71 (bank 7)a call120
The bank switch: writes 600, in the blank 0, while drawing 600
$8381 (bank 5)a call78
Where two things are compared: instructions 2, pairs of bytes 2, bytes in all 3, times compared 306, Y positions at $0051,$0460,$04B5
$A634 (bank 4)a call60
The bank switch: writes 20, in the blank 0, while drawing 20
$CBBF (bank 7)a table46
The bank switch: writes 225, in the blank 0, while drawing 225
$D22C (bank 7)a call40
The bank switch: writes 200, in the blank 0, while drawing 200
$FFD8 (bank 7)power-on40
The bank switch: writes 480, in the blank 480, while drawing 0
The sprite writers: frames it ran in 13,316, writes to the sprite page 10,240
$D0D1 (bank 7)a call33
The bank switch: writes 165, in the blank 0, while drawing 165
$D0B0 (bank 7)a call16
The bank switch: writes 80, in the blank 0, while drawing 80
$D0C6 (bank 7)a call16
The bank switch: writes 80, in the blank 0, while drawing 80
$CE8C (bank 7)a call7
The bank switch: writes 35, in the blank 0, while drawing 35
$9F5C (bank 4)a call3
The bank switch: writes 15, in the blank 0, while drawing 15
$CA94 (bank 7)a call84,923
$8F96 (bank 0)a call61,854
$8671 (bank 0)a call61,650
$CA92 (bank 7)a call56,710
$8010 (bank 6)a call37,344
$8CE8 (bank 0)a call37,332
$9617 (bank 6)a call25,296
$DE24 (bank 7)a call23,224
$DD8B (bank 7)a call23,104
$DDC3 (bank 7)a call23,104
$DE02 (bank 7)a call23,104
$DE1A (bank 7)a call23,104
$DE3A (bank 7)a call23,104
$ACBE (bank 4)a call15,516
$C48E (bank 7)a call13,493
$C4B3 (bank 7)a call13,493
$8612 (bank 0)a call13,196
$8644 (bank 0)a call13,196
$C532 (bank 7)a call13,186
$F481 (bank 7)a call13,185
$C413 (bank 7)a call13,156
$C4C6 (bank 7)a call13,156
$C4D6 (bank 7)a call13,156
$C551 (bank 7)a call13,156
$C4F2 (bank 7)a call13,074
$F072 (bank 7)a call12,594
$DEA5 (bank 7)a call11,612
$844E (bank 5)a call9,197
$F089 (bank 7)a call8,009
$CB07 (bank 7)a table7,358
$87B0 (bank 0)a call7,055
$C71B (bank 7)a call6,842
$DEFC (bank 7)a call6,814
$CDB9 (bank 7)a call5,738
$C564 (bank 7)a table5,732
$808C (bank 6)a call5,549
$AC05 (bank 4)a call5,424
$9B11 (bank 6)a call5,405
$CA58 (bank 7)a call4,284
$C60F (bank 7)a table4,280
$EF21 (bank 7)a call3,939
$87FA (bank 0)a table3,554
$8032 (bank 5)a call3,234
$8049 (bank 5)a call3,234
$8077 (bank 5)a call3,234
$EF03 (bank 7)a call3,234
$F161 (bank 7)a call3,234
$EF9D (bank 7)a call3,118
$DEE0 (bank 7)a call3,094
$EFA3 (bank 7)a call3,080
$83D6 (bank 5)a call3,074
$9851 (bank 5)a table3,074
$8466 (bank 5)a call3,072
$DF23 (bank 7)a call2,990
$D9F2 (bank 7)a table2,941
$D9E3 (bank 7)a table2,927
$DFDB (bank 7)a call2,888
$D9D8 (bank 7)a table2,880
$D9D1 (bank 7)a table2,864
$CFF3 (bank 7)a call2,363
$D000 (bank 7)a call2,363
$D02A (bank 7)a call2,363
$DEBB (bank 7)a call2,363
$E3F6 (bank 7)a call2,363
$F18D (bank 7)a call2,363
$8055 (bank 0)a call2,334
$CF10 (bank 7)a call2,334
$CF18 (bank 7)a call2,334
$CF42 (bank 7)a call2,334
$CF4A (bank 7)a call2,334
$CFC5 (bank 7)a call2,334
$CFCD (bank 7)a call2,334
$E145 (bank 7)a call2,334
$996F (bank 4)a call2,284
$8795 (bank 0)a table2,281
$9989 (bank 4)a call2,272
$8081 (bank 6)a call2,160
$8C71 (bank 0)a call2,014
$8F86 (bank 0)a call1,900
$EF93 (bank 7)a call1,633
$CBA7 (bank 7)a call1,604
$8672 (bank 6)a call1,591
$864A (bank 6)a call1,578
$A8B5 (bank 6)a call1,567
$AB30 (bank 6)a call1,567
$DA35 (bank 7)a call1,554
$E218 (bank 7)a call1,545
$A8C7 (bank 6)a call1,445
$DF53 (bank 7)a call1,444
$DF8D (bank 7)a call1,444
$E019 (bank 7)a call1,444
$D4C8 (bank 7)a table1,426
$DD08 (bank 7)a call1,426
$C6A8 (bank 7)a call1,373
$C5E1 (bank 7)a table1,344
$CA9F (bank 7)a call1,278
$8CBD (bank 0)a call1,153
$80CC (bank 6)a call1,080
$CAA4 (bank 7)a call1,030
$86F3 (bank 0)a call996
$8B27 (bank 0)a call903
$EF48 (bank 7)a call859
$9C1D (bank 6)a call789
$9C2A (bank 6)a table789
$9C69 (bank 4)a call789
$E152 (bank 7)a call789
$8D70 (bank 0)a table745
$A24D (bank 4)a table743
$871E (bank 0)a call722
$9BE4 (bank 4)a call705
$EF0D (bank 7)a call705
$842B (bank 0)a call591
$B91E (bank 3)a call520
$EFC7 (bank 7)a call520
$8F37 (bank 0)a table467
$8F45 (bank 0)a call455
$8C75 (bank 0)a call441
$8CFB (bank 0)a table441
$8D22 (bank 0)a table420
$87A9 (bank 0)a table405
$841D (bank 0)a call404
$8450 (bank 0)a call404
$846E (bank 0)a call404
$81AC (bank 0)a call381
$AC77 (bank 3)a call330
$9016 (bank 0)a call264
$AA5C (bank 3)a table260
$ADD1 (bank 3)a call260
$C982 (bank 7)a call250
$8E66 (bank 0)a table228
$84FC (bank 6)a call222
$C792 (bank 7)a call218
$F1D4 (bank 7)a call212
$F1EF (bank 7)a call212
$817A (bank 0)a table206
$82E8 (bank 0)a call206
$8409 (bank 0)a call206
$8413 (bank 0)a call206
$8084 (bank 0)a table202
$80CC (bank 0)a table194
$811F (bank 0)a table187
$9057 (bank 0)a call182
$F062 (bank 7)a call179
$C962 (bank 7)a call171
$8FA3 (bank 0)a call148
$A6AF (bank 4)a call148
$A8BE (bank 6)a call122
$DC17 (bank 7)a call120
$DC58 (bank 7)a call120
$DE46 (bank 7)a call120
$F72E (bank 7)a call118
$C6D2 (bank 7)a call112
$845E (bank 6)a call111
$8469 (bank 6)a call111
$88F8 (bank 5)a call108
$CAAC (bank 7)a call96
$F06A (bank 7)a call93
$C6B9 (bank 7)a call79
$F77E (bank 7)a call79
$8907 (bank 5)a table78
$8570 (bank 6)a call74
$8DA0 (bank 0)a table72
$C59C (bank 7)a table68
$EFBC (bank 7)a call65
$CAAA (bank 7)a call64
$8DB8 (bank 0)a table62
$D992 (bank 7)a call60
$F718 (bank 7)a call58
$F740 (bank 7)a call58
$8950 (bank 5)a call57
$8146 (bank 6)a call55
$EED3 (bank 7)a call55
$8634 (bank 6)a call52
$8642 (bank 6)a call52
$CB5C (bank 7)a table51
$D34B (bank 7)a call51
$D536 (bank 7)a call51
$8593 (bank 5)a call49
$978E (bank 5)a table49
$EF89 (bank 7)a call47
$AAFA (bank 6)a call45
$85F3 (bank 0)a call43
$8F55 (bank 0)a table43
$C498 (bank 7)a call40
$C4A3 (bank 7)a call40
$C571 (bank 7)a table40
$FFDD (bank 7)an interrupt (IRQ)40
$C93C (bank 7)a call39
$AAD9 (bank 6)a call38
$84AD (bank 6)a call37
$89AD (bank 5)a call37
$C6C7 (bank 7)a call37
$9662 (bank 4)a call33
$9870 (bank 5)a table33
$C65C (bank 7)a table33
$C669 (bank 7)a table33
$C6C2 (bank 7)a call33
$C6D6 (bank 7)a call33
$CB3E (bank 7)a table33
$CB54 (bank 7)a table33
$D2D0 (bank 7)a table33
$EF3D (bank 7)a call33
$EFF4 (bank 7)a call33
$AB0D (bank 6)a call32
$E838 (bank 7)a call32
$A618 (bank 4)a call30
$AB03 (bank 3)a call28
$AB5B (bank 3)a call28
$AB75 (bank 3)a call28
$8DE5 (bank 0)a table21
$AA4A (bank 3)a table21
$B695 (bank 3)a call21
$9F35 (bank 4)a call19
$95C9 (bank 6)a call18
$9FB0 (bank 4)a table18
$A5F0 (bank 4)a call18
$A764 (bank 4)a call18
$AA5B (bank 4)a table18
$A69F (bank 4)a call16
$EF3F (bank 7)a call16
$896B (bank 5)a call14
$D548 (bank 7)a call14
$D551 (bank 7)a call14
$D574 (bank 7)a call14
$F75E (bank 7)a call14
$CF20 (bank 7)a call13
$9D0C (bank 4)a table12
$A23C (bank 4)a table12
$A3B4 (bank 4)a call11
$A3DC (bank 4)a call11
$A0EA (bank 4)a call10
$8721 (bank 0)a call9
$9BAD (bank 4)a call8
$A106 (bank 4)a call8
$A612 (bank 4)a call8
$A936 (bank 3)a table7
$A99A (bank 3)a table7
$A9AB (bank 3)a table7
$A9B0 (bank 3)a table7
$A9B3 (bank 3)a table7
$AA1C (bank 3)a table7
$AA2A (bank 3)a table7
$AAC2 (bank 3)a call7
$ABC6 (bank 3)a call7
$ADF4 (bank 3)a table7
$C975 (bank 7)a call7
$8DB4 (bank 0)a table5
$DBE4 (bank 7)a call4
$EF8C (bank 7)a call4
$9F22 (bank 4)a call3
$E127 (bank 7)a call3
$A404 (bank 4)a table2
$E68A (bank 7)a table2
$AFB3 (bank 3)a table1
$AFBA (bank 3)a table1

Where it waits

Loops a rule named that sit inside a routine and are not themselves a place the code is entered.

atwhat it is, and the evidence
$C395 (bank 7)
The counting spin: counts in the byte at $0045, turns 10,812,522, turns a frame 802, reads of it from outside the loop 33

The jump engine's tables

Each table sits right after a call to the engine. 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.

atentriestakenchosen by the byte at
$807C (bank 0)44$001E
$A924 (bank 3)99$00D0
$ADEC (bank 3)11$008E
$AF46 (bank 3)22
$9CB3 (bank 4)136$0510
$AA1F (bank 4)22$0510
$9C22 (bank 6)21$005E
$C558 (bank 7)54$001B
$C569 (bank 7)44$001C
$CB26 (bank 7)77$0034, $0617
$D9C9 (bank 7)44$004F, $0051, $00A4

The memory its routines share

696 bytes of memory were written by one routine and read by another, and 73 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

frombytes reachedinstructionspositions it holds
$046016182 down
$048016175 across
$04B01661 down
$004F411 down
$03002569
$04002564
$05002562
$07002562
$06002561
$02002536
$02012533
$02022533

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, and which pick the way through a jump table, which is what a state or a kind does. What the rest hold is not named yet.

slotsarraysroutinespositions acrosspositions downadded into themchoosing a jumptravelling with them
162523$0480$0460, $04B0$0470, $0490, $04C0, $04E0$0510$0400, $0410, $0420, $0430, $0440, $0450, $0470, $0490, $04C0, $04E0, $04F0, $0500, $0510, $0520, $0530, $0540, $0550, $0560, $0570, $0580, $0630, $0640

The 24 busiest shared bytes

bytereads and writesroutines writingroutines reading
$004552,118,51322
$001E21,697,91226
$00082,315,62366
$00001,540,02066
$00011,306,14966
$0009758,98766
$0003685,61966
$0002662,55266
$000C642,67734
$0005616,59766
$0004482,43866
$0016365,55556
$0013298,86066
$0022286,79366
$0070151,18466
$000A145,45966
$001A140,76266
$00E1126,70246
$00E0126,66946
$00FF125,22266
$0011119,49766
$0010106,98966
$00F778,52423
$000B76,52166

This page shows none of the game's bytes. The listing these figures were read from stays with the cartridge.

All the games