Super Mario Bros. + Duck Hunt (USA)

Super Mario Bros. + Duck Hunt (USA) is on a GxROM board with 65,536 bytes of program. A crawl of 8,000 steps from power-on kept 188 paths that found new code. Played back over 317,948 frames, they executed 18,801 bytes of it, 29 percent.

What the rules named

The 360 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
$C588 (bank 1)b1_random_C588a call8,510,911
The random byte: frames it ran in 34,995, bytes $05EC,$05ED,$05EE,$05EF, rotates 4, exclusive-ors 1
$D10E (bank 1)b1_compare_D10Ea call636,885
Where two things are compared: instructions 1, pairs of bytes 1, bytes in all 2, times compared 319, X positions at $0032,$0033, Y positions at $0032,$0033
$8E04 (bank 0)b0_engine_8E04a call244,538
The jump engine: tables 12, jumps through them 244,538
$84C3 (bank 0)b0_sprites_84C3a call234,696
The sprite writers: frames it ran in 39,116, writes to the sprite page 6,672
$EBB2 (bank 0)b0_sprites_EBB2a call161,620
The sprite writers: frames it ran in 39,087, writes to the sprite page 1,292,960
$C35E (bank 1)b1_engine_C35Ea call82,521
The jump engine: tables 5, jumps through them 82,521
$8082 (bank 0)b0_nmieach frame (NMI)57,832
The game inside the interrupt: frames it ran in 58,008, frames in all 107,528, the spin is at $8057
The random byte: frames it ran in 58,008, bytes $07A7,$07A8,$07A9,$07AA, rotates 4, exclusive-ors 1
The split: frames it ran in 58,008, scroll writes while drawing 95,422, status reads while drawing 9,533,847
$8EDD (bank 0)b0_drain_8EDDa call57,832
The palette writers: frames it ran in 57,832, writes 29,344
The scroll writer: frames it ran in 57,832, writes in the blank 111,030
The picture writer: frames it ran in 57,832, writes 344,760, in the blank 248,703, while drawing 96,057
$8EE6 (bank 0)b0_scroll_8EE6a call57,832
The scroll writer: frames it ran in 57,832, writes in the blank 115,664
$8E5C (bank 0)b0_poll_8E5Ca call57,827
The poll: port $4017, reads a frame 8, strobes a frame 2
$8E6A (bank 0)b0_poll_8E6Aa call57,827
The poll: port $4016, reads a frame 8, strobes a frame 0
$F2D0 (bank 0)b0_sound_F2D0a call57,827
The sound driver: frames it ran in 57,384, writes 120,430
$EBAA (bank 0)b0_sprites_EBAAa call40,524
The sprite writers: frames it ran in 12,126, writes to the sprite page 324,192
$8222 (bank 0) (inside another instruction)b0_routine_8223a call39,273
The sprite writers: frames it ran in 39,370, writes to the sprite page 2,474,199
$F0E9 (bank 0)b0_sprites_F0E9a call39,010
The sprite writers: frames it ran in 39,010, writes to the sprite page 53,706
$C284 (bank 1)b1_poll_C284a call34,783
The poll: port $4017, reads a frame 8, strobes a frame 2
$C291 (bank 1)b1_poll_C291a call34,783
The poll: port $4016, reads a frame 8, strobes a frame 0
$CE4D (bank 1)b1_sprites_CE4Da call20,509
The sprite writers: frames it ran in 20,509, writes to the sprite page 3,801,664
$D853 (bank 0)b0_compare_D853a call15,456
Where two things are compared: instructions 1, pairs of bytes 3, bytes in all 4, times compared 8, X positions at $0057,$0059,$0086,$0087
$E87D (bank 0)b0_sprites_E87Da call13,508
The sprite writers: frames it ran in 12,126, writes to the sprite page 4,360
$8158 (bank 1)b1_poll_8158a call11,641
The poll: port $4016, reads a frame 8, strobes a frame 3
$CA19 (bank 1)b1_dispatch_CA19a table8,429
The sprite writers: frames it ran in 6,858, writes to the sprite page 490,094
$EBC1 (bank 0)b0_sprites_EBC1a call7,680
The sprite writers: frames it ran in 3,959, writes to the sprite page 7,680
$EC4A (bank 0)b0_sprites_EC4Aa call7,680
The sprite writers: frames it ran in 3,959, writes to the sprite page 15,360
$E325 (bank 0)b0_compare_E325a call5,502
Where two things are compared: instructions 5, pairs of bytes 12, bytes in all 9, times compared 15,260, X positions at $0057,$0058,$0059,$005A,$0086,$0087, Y positions at $00CE,$00CF,$00D4
$E5C1 (bank 0)b0_sprites_E5C1a call4,654
The sprite writers: frames it ran in 3,210, writes to the sprite page 9,308
$CD5C (bank 1)b1_dispatch_CD5Ca table2,196
The sprite writers: frames it ran in 2,196, writes to the sprite page 403,106
$E686 (bank 0)b0_sprites_E686a call1,862
The sprite writers: frames it ran in 1,852, writes to the sprite page 11,172
$CEF9 (bank 1)b1_dispatch_CEF9a table1,084
The sprite writers: frames it ran in 1,084, writes to the sprite page 125,748
$E5BB (bank 0)b0_sprites_E5BBa call834
The sprite writers: frames it ran in 734, writes to the sprite page 3,336
$82BC (bank 1)b1_sprites_82BCa call714
The sprite writers: frames it ran in 714, writes to the sprite page 34,272
$EBD1 (bank 0)b0_sprites_EBD1a call688
The sprite writers: frames it ran in 688, writes to the sprite page 2,536
$CD6C (bank 1)b1_dispatch_CD6Ca table512
The sprite writers: frames it ran in 512, writes to the sprite page 1,528
$90CC (bank 0)b0_sprites_90CCa call380
The sprite writers: frames it ran in 757, writes to the sprite page 97,280
$82B7 (bank 1)b1_sprites_82B7a call354
The sprite writers: frames it ran in 354, writes to the sprite page 16,992
$8220 (bank 0)b0_sprites_8220a call350
The sprite writers: frames it ran in 350, writes to the sprite page 22,400
$C23B (bank 1)b1_sprites_C23Ba call272
The sprite writers: frames it ran in 272, writes to the sprite page 17,408
$C3B8 (bank 1)b1_palette_C3B8a call270
The palette writers: frames it ran in 262, writes 7,664
$8000 (bank 0)b0_resetpower-on188
The bank switch: writes 188, in the blank 188, while drawing 0
The sprite writers: frames it ran in 105,723, writes to the sprite page 18,176
$80EF (bank 1)b1_sprites_80EFa call188
The sprite writers: frames it ran in 376, writes to the sprite page 48,128
$822C (bank 1)b1_palette_822Ca call188
The palette writers: frames it ran in 188, writes 6,016
$8268 (bank 1)b1_sprites_8268a call188
The sprite writers: frames it ran in 188, writes to the sprite page 752
$82B2 (bank 1)b1_sprites_82B2a call179
The sprite writers: frames it ran in 179, writes to the sprite page 8,592
$CD16 (bank 1)b1_dispatch_CD16a table168
The sprite writers: frames it ran in 168, writes to the sprite page 32,088
$C617 (bank 1)b1_split_C617a call136
The split: frames it ran in 272, scroll writes while drawing 272, status reads while drawing 7,532
$CD3C (bank 1)b1_dispatch_CD3Ca table111
The sprite writers: frames it ran in 111, writes to the sprite page 21,201
$EC53 (bank 0)b0_sprites_EC53a call100
The sprite writers: frames it ran in 100, writes to the sprite page 600
$9061 (bank 0)b0_dispatch_9061a table97
The sprite writers: frames it ran in 97, writes to the sprite page 388
$EFA4 (bank 0)b0_sprites_EFA4a call77
The sprite writers: frames it ran in 77, writes to the sprite page 77
$9071 (bank 0)b0_dispatch_9071a table70
The sprite writers: frames it ran in 70, writes to the sprite page 280
$CD4C (bank 1)b1_dispatch_CD4Ca table50
The sprite writers: frames it ran in 50, writes to the sprite page 9,550
$CD52 (bank 1)b1_dispatch_CD52a table48
The sprite writers: frames it ran in 48, writes to the sprite page 9,168
$CE40 (bank 1)b1_dispatch_CE40a table44
The sprite writers: frames it ran in 44, writes to the sprite page 8,404
$CF00 (bank 1)b1_dispatch_CF00a table44
The sprite writers: frames it ran in 44, writes to the sprite page 8,395
$CC8B (bank 1)b1_dispatch_CC8Ba table12
The sprite writers: frames it ran in 12, writes to the sprite page 756
$D12B (bank 1)a call676,358
$D114 (bank 1)a call636,885
$9BE1 (bank 0)a call293,155
$C047 (bank 0)a call234,696
$F26D (bank 0)a call224,498
$E3EB (bank 0) (inside another instruction)a call148,340
$F1F6 (bank 0)a call132,940
$F171 (bank 0)a call95,869
$F1D7 (bank 0)a call95,081
$BE70 (bank 0)a call78,232
$F12A (bank 0)a call76,975
$F180 (bank 0)a call76,975
$E3E8 (bank 0)a call74,270
$C426 (bank 1)a call58,623
$8182 (bank 0)a call57,827
$8F97 (bank 0)a call57,825
$8F9E (bank 0)a call57,825
$8212 (bank 0)a call52,939
$E29C (bank 0)a call51,646
$C086 (bank 1)each frame (NMI)47,850
$C5F7 (bank 1)a call46,552
$C607 (bank 1)a call46,496
$81C6 (bank 0)a call39,273
$AEEA (bank 0)a call39,118
$B04A (bank 0)a call39,118
$89E1 (bank 0)a call39,116
$B624 (bank 0)a call39,116
$B74F (bank 0)a call39,116
$B7B8 (bank 0)a call39,116
$B855 (bank 0)a call39,116
$B9BC (bank 0)a call39,116
$BB96 (bank 0)a call39,116
$BED4 (bank 0)a call39,116
$EEE9 (bank 0)a call39,116
$EFBE (bank 0)a call39,010
$B29A (bank 0)a call38,742
$AF93 (bank 0)a call37,859
$B329 (bank 0)a call37,859
$B450 (bank 0)a call37,859
$DC64 (bank 0)a call37,859
$BF09 (bank 0)a call37,820
$EFEC (bank 0)a call37,645
$F091 (bank 0)a call37,645
$DFA1 (bank 0)a call37,432
$8EED (bank 0)a call37,149
$E3E9 (bank 0)a call37,126
$B0E9 (bank 0)a table37,096
$C3C1 (bank 1)a call35,503
$C249 (bank 1)a call35,438
$C263 (bank 1)a call35,438
$C2BF (bank 1)a call35,438
$C61E (bank 1)a call35,375
$F56C (bank 1)a call34,804
$F591 (bank 1)a call34,804
$F621 (bank 1)a call34,804
$F6CF (bank 1)a call34,804
$F7CC (bank 1)a call34,804
$C348 (bank 1)a call34,783
$C0B3 (bank 1)a call34,781
$D131 (bank 1)a call34,266
$D160 (bank 1)a call34,266
$B5CC (bank 0)a call34,201
$C86E (bank 1)a table32,675
$CC94 (bank 1)a call32,674
$C6C4 (bank 1)a call32,618
$C6F5 (bank 1)a call32,618
$C7FB (bank 1)a call32,618
$C890 (bank 1)a call32,618
$CCA9 (bank 1)a call32,618
$CFBA (bank 1)a call32,618
$CFC5 (bank 1)a call32,618
$D3D2 (bank 1)a call32,618
$D428 (bank 1)a call32,618
$D3DF (bank 1)a call32,565
$DFB0 (bank 0)a call31,974
$DF9A (bank 0)a call31,917
$DEBD (bank 0)a call31,787
$DEDD (bank 0)a call31,780
$DEC4 (bank 0)a call31,641
$DEE8 (bank 0)a call31,641
$B35A (bank 0)a table31,477
$B58F (bank 0)a call31,477
$E3F0 (bank 0)a call28,764
$8231 (bank 0)a table26,524
$AEDC (bank 0)a table26,415
$F41B (bank 0)a call26,365
$F57C (bank 0)a call26,365
$F667 (bank 0)a call26,365
$F694 (bank 0)a call26,365
$F8F4 (bank 0)a call25,761
$8245 (bank 0)a table23,930
$92B0 (bank 0)a call18,615
$92C8 (bank 0)a call18,615
$E243 (bank 0)a call15,456
$F152 (bank 0)a call15,456
$F1AF (bank 0)a call15,456
$DFC1 (bank 0)a call14,610
$E15B (bank 0)a call14,610
$E1AE (bank 0)a call14,610
$E1B5 (bank 0)a call14,399
$E388 (bank 0)a call14,154
$9595 (bank 0)a call13,965
$C902 (bank 1)a call13,878
$C8E0 (bank 0)a table13,508
$DA33 (bank 0)a call13,508
$CD1D (bank 1)a table13,460
$CA77 (bank 0)a call13,428
$8567 (bank 0)a table13,395
$BF0F (bank 0)a call13,178
$BF02 (bank 0)a call12,978
$C5E0 (bank 1)a table12,520
$8129 (bank 1)a call12,412
$C905 (bank 0)a call12,326
$84F4 (bank 1)a call11,660
$827C (bank 1)a call10,868
$DC52 (bank 0)a call10,492
$889D (bank 0)a table9,416
$88AE (bank 0)a table9,308
$836B (bank 0)a call8,782
$D81B (bank 1)a call8,421
$F062 (bank 0)a call8,134
$DC41 (bank 0)a call7,738
$B038 (bank 0)a call7,728
$B376 (bank 0)a table5,952
$93FC (bank 0)a table4,655
$9508 (bank 0)a call4,655
$92DB (bank 0)a table4,652
$F1A8 (bank 0)a call3,724
$C932 (bank 1)a table3,309
$C71D (bank 1)a call3,055
$F564 (bank 1)a call3,020
$F544 (bank 1)a call2,769
$F42E (bank 1)a table2,654
$F550 (bank 1)a call2,654
$F4EE (bank 1)a table2,518
$F502 (bank 1)a call2,518
$F8C5 (bank 0)a call2,341
$896A (bank 0)a call2,325
$F49B (bank 1)a table2,309
$F568 (bank 1)a call2,309
$BC85 (bank 0)a table2,281
$86E6 (bank 0)a table2,041
$D67A (bank 0)a call1,948
$E6D2 (bank 0)a call1,948
$E236 (bank 0)a call1,862
$F148 (bank 0)a call1,862
$F19B (bank 0)a call1,862
$F8D8 (bank 0)a call1,555
$9BBB (bank 0)a call1,494
$F3A9 (bank 0)a call1,129
$F381 (bank 0)a call1,104
$D4EE (bank 1)a call1,052
$F39F (bank 0)a call1,050
$F3AD (bank 0)a call1,008
$8F11 (bank 0)a call969
$F8CB (bank 0)a call906
$9589 (bank 0)a call897
$BFA4 (bank 0)a call888
$F366 (bank 1)a call858
$B233 (bank 0)a table828
$BFD7 (bank 0)a call820
$B269 (bank 0)a table803
$F159 (bank 0)a call788
$F165 (bank 0)a call788
$F1B6 (bank 0)a call788
$F38B (bank 0)a call786
$8F5F (bank 0)a call720
$9A2E (bank 0)a table709
$9BAC (bank 0)a call709
$9B0E (bank 0)a table669
$9B36 (bank 0)a call669
$C5D9 (bank 1)a call655
$CF0B (bank 1)a call641
$810F (bank 1)a call606
$811C (bank 1)a call564
$F0B0 (bank 0)a call558
$E327 (bank 0)a call440
$F4E5 (bank 1)a table416
$B36D (bank 0)a table391
$81C5 (bank 1)a call376
$8218 (bank 1)a call376
$B288 (bank 0)a call374
$85F1 (bank 0)a call348
$8F06 (bank 0)a call334
$8E19 (bank 0)a call278
$8E2D (bank 0)a call278
$8808 (bank 0)a call256
$8407 (bank 1)a call246
$BF63 (bank 0)a call227
$BFAD (bank 0)a call227
$CEED (bank 1)a table196
$80A9 (bank 1)a call188
$80EE (bank 1)a table188
$8478 (bank 1)a call188
$84A1 (bank 1)a call188
$84F3 (bank 1)a table188
$8511 (bank 1)a call188
$858B (bank 0)a table180
$859B (bank 0)a table180
$9C03 (bank 0)a call180
$9C09 (bank 0)a call180
$9C13 (bank 0)a call180
$9C22 (bank 0)a call180
$8652 (bank 0)a table179
$865A (bank 0)a table179
$8693 (bank 0)a table179
$86A8 (bank 0)a table179
$BC30 (bank 0)a call179
$85BF (bank 0)a table167
$85E3 (bank 0)a table167
$8643 (bank 0)a table167
$86FF (bank 0)a table167
$90ED (bank 0)a call167
$9131 (bank 0)a table167
$92AA (bank 0)a call167
$92AF (bank 0)a call167
$B069 (bank 0)a table167
$F388 (bank 0)a call163
$F3A6 (bank 0)a call150
$F383 (bank 1)a call147
$F3D0 (bank 1)a call147
$D52C (bank 1)a call139
$DF4B (bank 0)a call139
$C22B (bank 1)a call136
$C232 (bank 1)a call136
$C5E1 (bank 1)a call136
$D528 (bank 1)a call134
$C64B (bank 1)a call130
$D4D9 (bank 1)a call130
$98E5 (bank 0)a table116
$9939 (bank 0)a call116
$9BAF (bank 0)a call116
$BDF6 (bank 0)a call103
$8A97 (bank 0)a call102
$8FCF (bank 0)a table102
$8325 (bank 0)a call101
$EC46 (bank 0)a call100
$8732 (bank 0)a table97
$8749 (bank 0)a table97
$BC36 (bank 0)a call97
$CF44 (bank 1)a call90
$8FE4 (bank 0)a table78
$88A5 (bank 0)a call77
$EFDC (bank 0)a call77
$D4E2 (bank 1)a call76
$C230 (bank 1)a call71
$C303 (bank 1)a call71
$C5AA (bank 1)a table71
$D509 (bank 1)a call71
$F581 (bank 1)a call71
$C4BF (bank 1)a call65
$C502 (bank 1)a call65
$C5EE (bank 1)a call65
$C641 (bank 1)a call65
$C793 (bank 1)a call65
$C7B3 (bank 1)a call65
$C81D (bank 1)a table65
$C839 (bank 1)a table65
$C854 (bank 1)a table65
$CCD4 (bank 1)a table65
$D2A4 (bank 1)a call65
$C919 (bank 1)a table62
$C271 (bank 1)a table60
$DF8F (bank 0)a call57
$C26C (bank 0)a call56
$C2F1 (bank 0)a table56
$C30E (bank 0)a call56
$B245 (bank 0)a table55
$8A6B (bank 0)a call53
$BCED (bank 0)a call53
$BD84 (bank 0)a call53
$BE1F (bank 0)a call53
$BD9B (bank 0)a call50
$8A61 (bank 0)a call49
$8A6D (bank 0)a call49
$C226 (bank 0)a call46
$CD9A (bank 1)a table45
$C998 (bank 0)a call42
$BC27 (bank 0)a call31
$F423 (bank 1)a table30
$DA11 (bank 0)a call29
$BB38 (bank 0)a table27
$BB84 (bank 0)a call27
$BBFE (bank 0)a call27
$C363 (bank 0)a call20
$E14F (bank 0)a call20
$BDD2 (bank 0)a table19
$D464 (bank 1)a call19
$D948 (bank 0)a call15
$B273 (bank 0)a call14
$CF39 (bank 1)a call8
$CF96 (bank 1)a call8
$D446 (bank 1)a call8
$D4FA (bank 1)a call8
$F362 (bank 1)a call8
$F4A7 (bank 0)a call6
$F571 (bank 0)a call6
$CE18 (bank 1)a table5
$DB1C (bank 0)a call5
$DAB4 (bank 0)a call4
$BE02 (bank 0)a call3
$BE41 (bank 0)a call3
$91CD (bank 0)a table2
$9282 (bank 0)a call2
$9B01 (bank 0)a table1

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
$8057 (bank 0)b0_spin_8057
The idle spin: turns 362,815,896, turns a frame 3,374
$F312 (bank 0)b0_wait_F312
The wait for the frame: waits on the byte at $07BB, times entered 11, turns 11, writes of it under the frame interrupt 6,162, frames in all 107,528
$813D (bank 1)b1_wait_813D
The wait for the frame: waits on the byte at $0020, times entered 12,412, turns 29,590,426, writes of it under the frame interrupt 48,232, frames in all 107,528
$C07C (bank 1)b1_wait_C07C
The wait for the frame: waits on the byte at $0020, times entered 34,791, turns 8,510,709, calls on each turn 1, writes of it under the frame interrupt 48,232, frames in all 107,528
$C5DC (bank 1)b1_wait_C5DC
The wait for the frame: waits on the byte at $0020, times entered 655, turns 2,443,491, writes of it under the frame interrupt 48,232, frames in all 107,528

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
$8218 (bank 0)after a call22$0770
$8237 (bank 0)after a call44$0772
$856D (bank 0)after a call1514$073C
$92CB (bank 0)after a call83$071F
$9667 (bank 0)after a call264
$AEE2 (bank 0)after a call44$0772
$B04F (bank 0)after a call127$000E
$B351 (bank 0)after a call33$001D
$BDC0 (bank 0)after a call82
$C282 (bank 0)after a call71$0016
$C892 (bank 0)after a call272$001B
$C90A (bank 0)after a call191$0016
$C128 (bank 1)after a call186$0025
$C227 (bank 1)after a call22$0026
$C907 (bank 1)after a call95$0031, $0301, $0351
$CCAE (bank 1)after a call1913$0031, $03A1
$CE66 (bank 1)after a call63

The memory its routines share

918 bytes of memory were written by one routine and read by another, and 136 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$07003,4,5→3,5↓2X212X12+↓12↓2Y1↓2+↓21
The console's 2,048 bytes of memory, one row for each 256. A numbered span is a column of one of the object tables drawn below, counted in the same order, as long as the table and filled as it is there. Where a table's columns overlap, its things lie one after another, each with all its properties, so the table is one outline with a mark where each property starts. A dark square is a position a rule saw compared. 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. 10 labels are left out where columns sit too close to name each one; the drawings below name them all.

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

frombytes reachedinstructionspositions it holds
$00308041 across, 1 down
$00862271 across
$00CE2261 down
$00571221 across
$002A9111 across, 1 down
$00CF6101 down
$0058673 across
$0087661 across
$00D4421 down
$020025614
$030025610
$04002564

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.

012345678$002AXY$007A$0093$00AC$00DB↓$0430
Table 1: 6 arrays of up to 9 slots that 6 routines step through together. Each column is an array at its address and each row a slot, so one thing on the screen is one row across all of them. X and Y are positions, and the darker squares are the slots a rule saw compared. + is added into a position, which is what a speed does. → chose a jump, which is what a state or a kind does. ↓ is only ever counted down, which is what a timer does. A plain outline travels with them and is not named yet.
048121620$0057X$006D$0086X$009F+↓$00B5↓$00CEY$0400+↓+234$0416$0433+
Table 2: 9 arrays of up to 22 slots that 16 routines step through together. Each column is an array at its address and each row a slot, so one thing on the screen is one row across all of them. A number under a column is how many more bytes that array was reached across than the table is long. X and Y are positions, and the darker squares are the slots a rule saw compared. + is added into a position, which is what a speed does. → chose a jump, which is what a state or a kind does. ↓ is only ever counted down, which is what a timer does. A plain outline travels with them and is not named yet.
012345$0016→$001E$0046↓$0058X
Table 3: 4 arrays of up to 6 slots that 6 routines step through together. Each column is an array at its address and each row a slot, so one thing on the screen is one row across all of them. X and Y are positions, and the darker squares are the slots a rule saw compared. + is added into a position, which is what a speed does. → chose a jump, which is what a state or a kind does. ↓ is only ever counted down, which is what a timer does. A plain outline travels with them and is not named yet.
012345$0016→$006E$0087X
Table 4: 3 arrays of up to 6 slots that 4 routines step through together. Each column is an array at its address and each row a slot, so one thing on the screen is one row across all of them. X and Y are positions, and the darker squares are the slots a rule saw compared. + is added into a position, which is what a speed does. → chose a jump, which is what a state or a kind does. ↓ is only ever counted down, which is what a timer does. A plain outline travels with them and is not named yet.
012345$0016→$001E$0046↓$00CFY
Table 5: 4 arrays of up to 6 slots that 7 routines step through together. Each column is an array at its address and each row a slot, so one thing on the screen is one row across all of them. X and Y are positions, and the darker squares are the slots a rule saw compared. + is added into a position, which is what a speed does. → chose a jump, which is what a state or a kind does. ↓ is only ever counted down, which is what a timer does. A plain outline travels with them and is not named yet.
0123$00D0$00D4Y$00E0↓
Table 6: 3 arrays of up to 4 slots that 3 routines step through together. Each column is an array at its address and each row a slot, so one thing on the screen is one row across all of them. X and Y are positions, and the darker squares are the slots a rule saw compared. + is added into a position, which is what a speed does. → chose a jump, which is what a state or a kind does. ↓ is only ever counted down, which is what a timer does. A plain outline travels with them and is not named yet.
slotsarraysroutinespositions acrosspositions downadded into themchoosing a jumpcounted downtravelling with them
966$002A$002A$00DB$007A, $0093, $00AC, $00DB, $0430
22916$0057, $0086$00CE$009F, $0400, $0433$009F, $00B5, $0400$006D, $009F, $00B5, $0400, $0416, $0433
646$0058$0016$0046$0016, $001E, $0046
634$0087$0016$0016, $006E
647$00CF$0016$0046$0016, $001E, $0046
433$00D4$00E0$00D0, $00E0

The 24 busiest shared bytes

bytereads and writesroutines writingroutines reading
$000720,830,61266
$002018,020,28666
$00008,476,94566
$00307,578,35166
$00043,208,57766
$00062,988,98866
$00372,489,46166
$00032,395,63066
$00051,985,87466
$00861,713,65266
$00CE1,702,34466
$00341,461,21666
$00081,328,05266
$006D1,323,35666
$0033963,56766
$0032917,72866
$0002885,35166
$00EA801,69765
$00E9800,80764
$006E719,43266
$071B518,68636
$071D518,68636
$00B5511,12966
$0087493,22246

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

All the games