Mike Tyson's Punch-Out!! (Japan, USA) (En)

Mike Tyson's Punch-Out!! (Japan, USA) (En) is on a MMC2 board with 131,072 bytes of program. A crawl of 6,400 steps from power-on kept 161 paths that found new code. Played back over 549,601 frames, they executed 25,519 bytes of it, 19 percent.

What the rules named

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

atits name in the listingentered bytimeswhat it is, and the evidence
$AFA4 (bank 13)b13_poll_AFA4a call2,242,811
The poll: port $4016, reads a frame 31, strobes a frame 0
The poll: port $4017, reads a frame 31, strobes a frame 0
$AA48 (bank 13)b13_bank_AA48a call618,189
The bank switch: writes 617,910, in the blank 0, while drawing 617,910
$AA3C (bank 13)b13_bank_AA3Ca call553,496
The bank switch: writes 553,288, in the blank 347,985, while drawing 205,303
$A008 (bank 13)b13_nmieach frame (NMI)380,698
The bank switch: writes 44,988, in the blank 44,988, while drawing 0
$AA40 (bank 13)b13_bank_AA40a call348,463
The bank switch: writes 348,444, in the blank 143,039, while drawing 205,405
$A9DF (bank 13)b13_scroll_A9DFa call348,308
The bank switch: writes 348,000, in the blank 348,000, while drawing 0
The scroll writer: frames it ran in 348,308, writes in the blank 696,544
$AED4 (bank 13)b13_engine_AED4a call277,916
The jump engine: tables 6, jumps through them 277,916
$F40B (bank 13)b13_sound_F40Ba call251,130
The sound driver: frames it ran in 249,994, writes 502,016
$AA44 (bank 13)b13_bank_AA44a call219,449
The bank switch: writes 219,437, in the blank 14,005, while drawing 205,432
$A09A (bank 13)b13_split_A09Aa call205,576
The split: frames it ran in 205,576, scroll writes while drawing 239,418, status reads while drawing 114,316,716
$8000 (bank 7)b7_sprites_8000a call205,421
The sprite writers: frames it ran in 205,421, writes to the sprite page 104
$AA87 (bank 13)b13_bank_AA87a call205,421
The bank switch: writes 205,246, in the blank 0, while drawing 205,246
$9134 (bank 7)b7_engine_9134a call162,307
The jump engine: tables 1, jumps through them 162,307
$AA6A (bank 13)b13_bank_AA6Aa call143,038
The bank switch: writes 142,877, in the blank 139,573, while drawing 3,304
$A7A6 (bank 13)b13_sprites_A7A6a call142,498
The sprite writers: frames it ran in 137,482, writes to the sprite page 16
$C24A (bank 13)b13_drain_C24Aa call75,414
The picture writer: frames it ran in 75,414, writes 105,618, in the blank 105,618, while drawing 0
$860F (bank 11)b11_engine_860Fa call73,884
The jump engine: tables 3, jumps through them 73,884
$D34F (bank 13)b13_sprites_D34Fa call24,048
The sprite writers: frames it ran in 15,163, writes to the sprite page 192,182
$D043 (bank 13)b13_sprites_D043a call23,449
The sprite writers: frames it ran in 23,449, writes to the sprite page 200,235
$D305 (bank 13)b13_sprites_D305a call21,357
The sprite writers: frames it ran in 16,290, writes to the sprite page 170,742
$D3FE (bank 13)b13_sprites_D3FEa call19,499
The sprite writers: frames it ran in 19,427, writes to the sprite page 1,644,923
$D134 (bank 13)b13_sprites_D134a call18,447
The sprite writers: frames it ran in 7,948, writes to the sprite page 147,389
$AA9F (bank 13)b13_bank_AA9Fa call14,005
The bank switch: writes 14,004, in the blank 14,004, while drawing 0
$D16E (bank 13)b13_sprites_D16Ea call11,908
The sprite writers: frames it ran in 11,836, writes to the sprite page 49,994
$CC8B (bank 13)b13_sprites_CC8Ba call10,006
The sprite writers: frames it ran in 9,144, writes to the sprite page 273,975
$D176 (bank 13)b13_sprites_D176a call9,201
The sprite writers: frames it ran in 8,184, writes to the sprite page 198,840
$AF0B (bank 13)b13_palette_AF0Ba call8,207
The palette writers: frames it ran in 8,207, writes 262,161
$BDB5 (bank 13)b13_sprites_BDB5a call7,246
The sprite writers: frames it ran in 7,246, writes to the sprite page 228,501
$C976 (bank 13)b13_sprites_C976a call7,192
The sprite writers: frames it ran in 7,192, writes to the sprite page 743,071
$BE1A (bank 13)b13_sprites_BE1Aa call4,811
The sprite writers: frames it ran in 4,811, writes to the sprite page 30,390
$D3DB (bank 13)b13_sprites_D3DBa call4,755
The sprite writers: frames it ran in 4,755, writes to the sprite page 477,608
$AA60 (bank 13)b13_bank_AA60a call3,058
The bank switch: writes 3,058, in the blank 0, while drawing 3,058
$C978 (bank 13)b13_sprites_C978a call2,009
The sprite writers: frames it ran in 1,147, writes to the sprite page 92,100
$CB81 (bank 13)b13_sprites_CB81a call1,096
The sprite writers: frames it ran in 1,034, writes to the sprite page 17,536
$D070 (bank 13)b13_sprites_D070a call644
The sprite writers: frames it ran in 616, writes to the sprite page 5,152
$AF38 (bank 13)b13_sprites_AF38a call558
The sprite writers: frames it ran in 948, writes to the sprite page 142,847
$BEFF (bank 13)b13_sprites_BEFFa call532
The sprite writers: frames it ran in 266, writes to the sprite page 3,591
$8051 (bank 7)b7_bank_8051a call440
The bank switch: writes 440, in the blank 0, while drawing 440
$AA5C (bank 13)b13_bank_AA5Ca call427
The bank switch: writes 427, in the blank 0, while drawing 427
$BF55 (bank 13)b13_bank_BF55a call425
The bank switch: writes 1,700, in the blank 392, while drawing 1,308
$BF3C (bank 13)b13_bank_BF3Ca call414
The bank switch: writes 414, in the blank 0, while drawing 414
$AA54 (bank 13)b13_bank_AA54a call295
The bank switch: writes 295, in the blank 259, while drawing 36
$AA64 (bank 13)b13_bank_AA64a call295
The bank switch: writes 295, in the blank 0, while drawing 295
$A000 (bank 13)b13_irqan interrupt (IRQ)161
The sprite writers: frames it ran in 245,923, writes to the sprite page 75,008
$AA50 (bank 13)b13_bank_AA50a call161
The bank switch: writes 161, in the blank 0, while drawing 161
$B666 (bank 13)b13_sprites_B666a call161
The bank switch: writes 161, in the blank 0, while drawing 161
The sprite writers: frames it ran in 324, writes to the sprite page 644
$B6A1 (bank 13)b13_bank_B6A1a call161
The bank switch: writes 161, in the blank 0, while drawing 161
$BF36 (bank 13)b13_bank_BF36a call144
The bank switch: writes 144, in the blank 0, while drawing 144
$D0D2 (bank 13)b13_sprites_D0D2a call139
The sprite writers: frames it ran in 115, writes to the sprite page 1,112
$AF3A (bank 13)b13_sprites_AF3Aa call133
The sprite writers: frames it ran in 133, writes to the sprite page 12,768
$BBAA (bank 13)b13_bank_BBAAa call133
The bank switch: writes 133, in the blank 0, while drawing 133
$BCBE (bank 13)b13_bank_BCBEa call133
The bank switch: writes 665, in the blank 0, while drawing 665
$AF43 (bank 13)b13_sprites_AF43a call98
The sprite writers: frames it ran in 98, writes to the sprite page 1,176
$AA96 (bank 13)b13_bank_AA96a call23
The bank switch: writes 23, in the blank 0, while drawing 23
$8054 (bank 7)b7_bank_8054a call10
The bank switch: writes 20, in the blank 0, while drawing 20
$A800 (bank 13)b13_bank_A800a call8
The bank switch: writes 8, in the blank 0, while drawing 8
$ADC5 (bank 13)b13_wait_ADC5a call4
The wait for the frame: waits on the byte at $00D9, times entered 4, turns 630, calls on each turn 1, writes of it under the frame interrupt 275,110, frames in all 381,181
$B001 (bank 13)a call1,401,310
$B021 (bank 13)a call485,683
$8000 (bank 8)a call348,463
$8025 (bank 8)a call348,463
$80CA (bank 8)a call348,463
$84B1 (bank 8)a call348,463
$88E2 (bank 8)a call348,463
$8012 (bank 7)a call348,075
$AF73 (bank 13)a call348,075
$A774 (bank 13)a call347,919
$AF8D (bank 13)a call280,413
$AFBD (bank 13)a call280,262
$BF99 (bank 13)a call277,376
$AF02 (bank 13)a call259,716
$F412 (bank 13)a call246,245
$8006 (bank 7)a call214,927
$C890 (bank 13)a call206,002
$8009 (bank 11)a call205,444
$8003 (bank 7)a call205,421
$8003 (bank 11)a call205,421
$8006 (bank 11)a call205,421
$8009 (bank 7)a call205,421
$800C (bank 7)a call205,421
$800F (bank 7)a call205,421
$8015 (bank 7)a call205,421
$A7C4 (bank 13)a call205,421
$B034 (bank 13)a call205,421
$B049 (bank 13)a call205,421
$B069 (bank 13)a call205,421
$B10A (bank 13)a call205,421
$B196 (bank 13)a call205,421
$B457 (bank 13)a call205,421
$B530 (bank 13)a call205,421
$C291 (bank 13)a call205,421
$C3D9 (bank 13)a call205,421
$C440 (bank 13)a call205,421
$C4E7 (bank 13)a call205,421
$B549 (bank 13)a table205,083
$F472 (bank 13)a call184,638
$81EF (bank 11)a call183,390
$F463 (bank 13)a call181,731
$9158 (bank 7)a call167,850
$9151 (bank 7)a call84,785
$8B54 (bank 7)a call74,778
$C3CA (bank 13)a call67,309
$C041 (bank 13)a call60,298
$C0BB (bank 13)a call50,658
$C0E0 (bank 13)a call50,453
$C079 (bank 13)a call50,438
$C09D (bank 13)a call50,438
$8B19 (bank 7)a table42,468
$8B50 (bank 7)a table42,442
$8B39 (bank 7)a table32,336
$8AF0 (bank 7)a table31,693
$F400 (bank 13)a call22,484
$F422 (bank 13)a call20,863
$F429 (bank 13)a call18,545
$C830 (bank 13)a call16,246
$C83E (bank 13)a call16,246
$C844 (bank 13)a call16,246
$C847 (bank 13)a call16,246
$8000 (bank 11)a call14,005
$910B (bank 7)a call13,368
$F41E (bank 13)a call13,096
$C5D4 (bank 13)a table12,838
$C720 (bank 13)a table12,330
$83AE (bank 11)a table12,117
$C58D (bank 13)a table11,525
$8B1E (bank 7)a table10,642
$A75B (bank 13)a call10,618
$83A7 (bank 11)a table10,580
$BC1F (bank 13)a call10,525
$AF2E (bank 13)a call8,998
$84EC (bank 11)a table8,558
$F44F (bank 13)a call7,541
$8371 (bank 11)a table7,304
$BF9E (bank 13)a call7,248
$C59B (bank 13)a table6,847
$838B (bank 11)a table6,378
$85E2 (bank 11)a call6,378
$A750 (bank 13)a call5,978
$837F (bank 11)a table5,351
$83F4 (bank 11)a table5,300
$C670 (bank 13)a table4,688
$C5F9 (bank 13)a table3,707
$85CA (bank 11)a table3,660
$85DB (bank 11)a call3,573
$C113 (bank 13)a call3,512
$C784 (bank 13)a table3,309
$BE09 (bank 13)a call3,058
$F4CD (bank 13)a call2,827
$F4DD (bank 13)a call2,827
$8ADD (bank 7)a table2,726
$AEF8 (bank 13)a call2,708
$848F (bank 11)a table2,552
$8363 (bank 11)a table2,333
$C7F1 (bank 13)a table2,131
$C7A7 (bank 13)a table2,065
$8556 (bank 11)a table1,954
$C850 (bank 13)a call1,743
$AEAB (bank 13)a call1,662
$C70C (bank 13)a table1,615
$AF04 (bank 13)a call1,608
$F414 (bank 13)a call1,491
$C5B7 (bank 13)a table1,357
$C68E (bank 13)a table1,301
$C6AA (bank 13)a table1,281
$C7BB (bank 13)a table1,281
$90FF (bank 6)a call1,274
$8482 (bank 11)a table1,205
$85D1 (bank 11)a call1,147
$C5E6 (bank 13)a table1,083
$84CD (bank 11)a table955
$C7D1 (bank 13)a table887
$AE9B (bank 13)a call713
$8493 (bank 11)a table696
$F4EF (bank 13)a call690
$84AF (bank 11)a table676
$F41B (bank 13)a call663
$8596 (bank 11)a table646
$C821 (bank 13)a table597
$8466 (bank 8)a call594
$839C (bank 11)a table588
$C744 (bank 13)a table586
$BEB3 (bank 13)a call532
$854D (bank 11)a table531
$F450 (bank 13)a call528
$AA1D (bank 13)a call527
$C80C (bank 13)a table487
$8906 (bank 8)a call471
$B65A (bank 13)a call471
$B651 (bank 13)a call463
$BF21 (bank 13)a call460
$F426 (bank 13)a call441
$8550 (bank 7)a call440
$B2EB (bank 13)a call440
$8540 (bank 7)a call430
$AA6E (bank 13)a call419
$AA0A (bank 13)a call414
$B016 (bank 13)a call412
$BF7E (bank 13)a call411
$8510 (bank 11)a table402
$C105 (bank 13)a call399
$B1C1 (bank 13)a table380
$AEA5 (bank 13)a call372
$C7EA (bank 13)a table368
$C649 (bank 13)a call362
$F518 (bank 13)a call358
$85A8 (bank 11)a table337
$85C1 (bank 11)a table336
$843E (bank 7)a call330
$F494 (bank 13)a call330
$AEF1 (bank 13)a call327
$BF0D (bank 13)a call327
$BC5F (bank 13)a call322
$BD9B (bank 13)a call320
$B1CE (bank 13)a table305
$BEE1 (bank 13)a call305
$C7C2 (bank 13)a table293
$8503 (bank 7)a call278
$849F (bank 7)a call268
$852B (bank 7)a call267
$BEC9 (bank 13)a call266
$C85C (bank 13)a call266
$C6BD (bank 13)a table261
$A9D1 (bank 13)a call233
$8459 (bank 11)a table203
$8574 (bank 11)a table202
$856D (bank 11)a table196
$C118 (bank 13)a call196
$84BE (bank 11)a table192
$8562 (bank 7)a call191
$C7E1 (bank 13)a table188
$C61E (bank 13)a table181
$B250 (bank 13)a table166
$BFAE (bank 13)a call166
$800E (bank 9)a call161
$801E (bank 7)a call161
$9000 (bank 6)a call161
$9030 (bank 6)a call161
$8465 (bank 11)a table160
$B6CB (bank 13)a call155
$BFB2 (bank 13)a call155
$AA06 (bank 13)a call144
$BFAA (bank 13)a call144
$AAE5 (bank 13)a call135
$AB4E (bank 13)a call135
$AE89 (bank 13)a call135
$BAE3 (bank 13)a call133
$BE96 (bank 13)a call133
$BEA1 (bank 13)a call133
$BEED (bank 13)a call133
$BFF2 (bank 13)a call133
$C6EA (bank 13)a table131
$84FF (bank 7)a call130
$C5CE (bank 13)a table123
$858C (bank 11)a table121
$C600 (bank 13)a table109
$8525 (bank 7)a call98
$AB58 (bank 13)a call98
$AE5F (bank 13)a call98
$AF5B (bank 13)a call98
$B5A9 (bank 13)a table98
$BED9 (bank 13)a call98
$83CE (bank 11)a table78
$857E (bank 11)a table77
$C3C1 (bank 13)a call72
$C770 (bank 13)a table71
$C6D7 (bank 13)a table70
$8417 (bank 11)a table62
$B24A (bank 13)a table54
$8565 (bank 11)a table50
$84B9 (bank 7)a call48
$C7B6 (bank 13)a table46
$842A (bank 7)a call44
$83D2 (bank 11)a table38
$AEC8 (bank 13)a call35
$802D (bank 7)a call34
$8421 (bank 7)a call33
$8DF4 (bank 7)a call31
$8435 (bank 7)a call30
$A4C6 (bank 13)a call29
$85A4 (bank 11)a table24
$C5C8 (bank 13)a table24
$8027 (bank 7)a call22
$8539 (bank 11)a table22
$8E3D (bank 7)a call22
$C6DF (bank 13)a table19
$83EB (bank 7)a call18
$BFF6 (bank 13)a call16
$8404 (bank 7)a call15
$AECE (bank 13)a call15
$B439 (bank 13)a call15
$C806 (bank 13)a table13
$B3A3 (bank 13)a call10
$BDA2 (bank 13)a call10
$C6CA (bank 13)a table10
$8021 (bank 7)a call9
$8024 (bank 7)a call9
$802A (bank 7)a call9
$C81D (bank 13)a table8
$B70B (bank 13)a call7
$8D8D (bank 7)a call4
$8E8E (bank 7)a call4
$8E94 (bank 7)a call4
$AAAB (bank 13)a call4
$AAB4 (bank 13)a call4
$ACB1 (bank 13)a call4
$ADD1 (bank 13)a call4
$AE28 (bank 13)a call4
$B957 (bank 13)a call4
$BFD1 (bank 13)a call4
$801B (bank 7)a call3
$8E15 (bank 7)a call3
$8EA9 (bank 7)a call2
$8030 (bank 7)a call1
$8033 (bank 7)a call1
$803F (bank 7)a call1
$8042 (bank 7)a call1
$8045 (bank 7)a call1
$8048 (bank 7)a call1
$804E (bank 7)a call1

Where it waits

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

atits name in the listingwhat it is, and the evidence
$A4F1 (bank 13)b13_wait_A4F1
The wait for the frame: waits on the byte at $0015, times entered 4, turns 384, calls on each turn 2, writes of it under the frame interrupt 13,243, frames in all 381,181
$A590 (bank 13)b13_wait_A590
The wait for the frame: waits on the byte at $0000, times entered 2, turns 5,972, calls on each turn 1, writes of it under the frame interrupt 103, frames in all 381,181
$A8A9 (bank 13)b13_wait_A8A9
The wait for the frame: waits on the byte at $00D9, times entered 133, turns 4,678, calls on each turn 2, writes of it under the frame interrupt 275,110, frames in all 381,181
$A8CE (bank 13)b13_wait_A8CE
The wait for the frame: waits on the byte at $0015, times entered 129, turns 6,729, calls on each turn 2, writes of it under the frame interrupt 13,243, frames in all 381,181
$A90B (bank 13)b13_wait_A90B
The wait for the frame: waits on the byte at $0000, times entered 96, turns 198,915, calls on each turn 1, writes of it under the frame interrupt 103, frames in all 381,181
$ABF1 (bank 13)b13_wait_ABF1
The wait for the frame: waits on the byte at $0392, times entered 98, turns 9,310, calls on each turn 2, writes of it under the frame interrupt 476, frames in all 381,181
$AF06 (bank 13)b13_wait_AF06
The wait for the frame: waits on the byte at $001F, times entered 261,998, turns 1,263,345,632, writes of it under the frame interrupt 696,069, frames in all 381,181
$BF83 (bank 13)b13_wait_BF83
The wait for the frame: waits on the byte at $04C8, times entered 411, turns 11,786, calls on each turn 1, writes of it under the frame interrupt 1,634, frames in all 381,181

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.

atreachedentriestakenchosen by the byte at
$8AC2 (bank 7)after a call16
$8338 (bank 11)after a call168$00C0, $00C2, $00C4, $00C7
$83B2 (bank 11)after a call1312$00C4, $00C2, $00CA, $00C6
$84F0 (bank 11)after a call914$00C7
$B1BB (bank 13)after a call22
$B240 (bank 13)after a call22
$B53F (bank 13)after a call42$0000
$C562 (bank 13)after a call1612
$C674 (bank 13)after a call28
$C724 (bank 13)after a call1615

The memory its routines share

498 bytes of memory were written by one routine and read by another, and 72 places were reached through an index, which is what a table or a set of object slots in memory looks like.

004080C0$0000$0100$0200$0300$0400$0500$0600$0700
The console's 2,048 bytes of memory, one row for each 256. A tick under a row is one of the 24 busiest shared bytes. The second row is the page the processor keeps its stack in. Reaches through an index that belong to no table are not drawn: the loops that clear memory reach nearly every byte.

Reaches through an index: those that hold positions, then the longest

frombytes reachedinstructionspositions it holds
$02002568
$020E24166
$020D24149
$020C24145
$020F24119
$020B24118
$02082418
$00002406
$02011253
$02021214
$05001092
$05071041

The 24 busiest shared bytes

bytereads and writesroutines writingroutines reading
$00E157,883,29666
$00E038,739,97766
$00D03,212,35936
$00D33,062,50046
$001E1,958,41636
$00101,947,62966
$00D21,711,52235
$00E21,574,43866
$00DD1,232,61634
$00181,194,44556
$00F51,190,38424
$00F41,189,29164
$00A61,177,05166
$00A71,176,94166
$04101,129,05866
$07001,118,20224
$07011,092,72523
$00F21,046,05362
$00901,033,07266
$04C91,028,13446
$0725881,74636
$06A4841,51423
$06A6841,37623
$0002838,04125

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

All the games