Metroid (USA)

Metroid (USA) is on a MMC1 board with 131,072 bytes of program. A crawl of 6,400 steps from power-on kept 103 paths that found new code. Played back over 253,223 frames, they executed 15,464 bytes of it, 12 percent.

What the rules named

The 459 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
$C27C (bank 7)b7_engine_C27Ca call288,568
The jump engine: tables 12, jumps through them 288,568
$C1E0 (bank 7)b7_drain_C1E0a call82,808
The palette writers: frames it ran in 82,911, writes 34,072
The picture writer: frames it ran in 82,911, writes 106,172, in the blank 41,900, while drawing 64,272
$C215 (bank 7)b7_poll_C215a call82,808
The poll: port $4017, reads a frame 8, strobes a frame 2
$C21F (bank 7)b7_poll_C21Fa call82,808
The poll: port $4016, reads a frame 8, strobes a frame 2
$C29A (bank 7)b7_scroll_C29Aa call82,808
The scroll writer: frames it ran in 82,736, writes in the blank 165,266
$C4D9 (bank 7)b7_bank_C4D9a call82,808
The bank switch: writes 414,040, in the blank 413,165, while drawing 875
$BA41 (bank 1)b1_sound_BA41a call80,964
The sound driver: frames it ran in 40,411, writes 54,027
$DCC3 (bank 7)b7_random_DCC3a call51,038
The random byte: frames it ran in 24,564, bytes $006B, rotates 1, exclusive-ors 1
$C1A3 (bank 7)b7_sprites_C1A3a call30,106
The sprite writers: frames it ran in 30,106, writes to the sprite page 7,708,176
$C9D7 (bank 7)b7_dispatch_C9D7a table29,192
The sprite writers: frames it ran in 29,192, writes to the sprite page 484,800
$E173 (bank 7)b7_sprites_E173a call28,844
The sprite writers: frames it ran in 14,422, writes to the sprite page 28,844
$DD8B (bank 7)b7_sprites_DD8Ba call26,617
The sprite writers: frames it ran in 14,414, writes to the sprite page 627,222
$8024 (bank 1)b1_engine_8024a call25,892
The jump engine: tables 1, jumps through them 25,892
$C1BC (bank 7)b7_sprites_C1BCa call19,036
The sprite writers: frames it ran in 19,054, writes to the sprite page 1,827,456
$CB29 (bank 7)b7_sprites_CB29a call14,422
The sprite writers: frames it ran in 14,506, writes to the sprite page 564,261
$E0C1 (bank 7)b7_sprites_E0C1a call14,422
The sprite writers: frames it ran in 14,424, writes to the sprite page 605,724
$90D7 (bank 0)b0_dispatch_90D7a table14,313
The sprite writers: frames it ran in 14,313, writes to the sprite page 56,968
$F6B9 (bank 7)b7_compare_F6B9a call12,945
Where two things are compared: instructions 2, pairs of bytes 4, bytes in all 6, times compared 834, X positions at $030E,$0421, Y positions at $030D,$0420,$0440,$0450
$F75B (bank 7)b7_compare_F75Ba call12,945
Where two things are compared: instructions 1, pairs of bytes 1, bytes in all 2, times compared 345, X positions at $030E,$0421
$CD6D (bank 7)b7_random_CD6Da call12,117
The random byte: frames it ran in 12,145, bytes $006B, rotates 2, exclusive-ors 1
The sprite writers: frames it ran in 12,145, writes to the sprite page 549,984
$F140 (bank 7)b7_compare_F140a call11,600
Where two things are compared: instructions 2, pairs of bytes 11, bytes in all 11, times compared 12,592, X positions at $030E,$03D9,$03E9,$0421,$0441,$0451, Y positions at $030D,$03D8,$0420,$0440,$0450
$8963 (bank 0)b0_sprites_8963a call2,738
The sprite writers: frames it ran in 558, writes to the sprite page 7,272
$C30C (bank 7)b7_palette_C30Ca call2,366
The palette writers: frames it ran in 2,438, writes 7,074
$87D9 (bank 0)b0_sprites_87D9a call1,920
The sprite writers: frames it ran in 960, writes to the sprite page 7,488
$CCC2 (bank 7)b7_dispatch_CCC2a table1,523
The sprite writers: frames it ran in 1,538, writes to the sprite page 69,426
$C4EF (bank 7)b7_bank_C4EFa call1,257
The bank switch: writes 6,285, in the blank 1,105, while drawing 5,180
$C7AB (bank 7)b7_bank_C7ABa call996
The bank switch: writes 4,980, in the blank 70, while drawing 4,910
$87CF (bank 0)b0_sprites_87CFa call960
The sprite writers: frames it ran in 960, writes to the sprite page 3,648
$87D6 (bank 0)b0_sprites_87D6a call960
The sprite writers: frames it ran in 960, writes to the sprite page 3,792
$D002 (bank 7)b7_dispatch_D002a table782
The sprite writers: frames it ran in 786, writes to the sprite page 35,340
$8976 (bank 0)b0_sprites_8976a call646
The sprite writers: frames it ran in 646, writes to the sprite page 3,072
$9147 (bank 0)b0_dispatch_9147a table567
The sprite writers: frames it ran in 571, writes to the sprite page 2,112
$88FE (bank 0)b0_sprites_88FEa call558
The sprite writers: frames it ran in 558, writes to the sprite page 2,232
$DE47 (bank 7)b7_sprites_DE47a call499
The sprite writers: frames it ran in 495, writes to the sprite page 2,910
$DE4A (bank 7)b7_sprites_DE4Aa call392
The sprite writers: frames it ran in 368, writes to the sprite page 192
$C4E8 (bank 7)b7_bank_C4E8a call175
The bank switch: writes 875, in the blank 0, while drawing 875
$C4B2 (bank 7)b7_bank_C4B2a call103
The bank switch: writes 515, in the blank 0, while drawing 515
$C4FA (bank 7)b7_bank_C4FAa call103
The bank switch: writes 515, in the blank 515, while drawing 0
$C5D7 (bank 7)b7_bank_C5D7a call103
The bank switch: writes 515, in the blank 515, while drawing 0
$FFB0 (bank 7)b7_irqan interrupt (IRQ)103
The bank switch: writes 1,442, in the blank 1,442, while drawing 0
The sprite writers: frames it ran in 83,203, writes to the sprite page 26,368
$FAB4 (bank 7)b7_sprites_FAB4a call74
The sprite writers: frames it ran in 74, writes to the sprite page 2,088
$C604 (bank 7)b7_bank_C604a call72
The bank switch: writes 360, in the blank 0, while drawing 360
$8071 (bank 0)b0_dispatch_8071a table18
The sprite writers: frames it ran in 36, writes to the sprite page 2,880
$C20E (bank 7)b7_split_C20Ea call18
The split: frames it ran in 36, scroll writes while drawing 36, status reads while drawing 666
$C6D6 (bank 7)b7_bank_C6D6a call13
The bank switch: writes 65, in the blank 0, while drawing 65
$98AE (bank 0)b0_sprites_98AEa call8
The sprite writers: frames it ran in 8, writes to the sprite page 1,280
$C5DC (bank 7)b7_bank_C5DCa call1
The bank switch: writes 5, in the blank 0, while drawing 5
$E193 (bank 7)a call564,380
$F1F4 (bank 7)a call530,826
$B4BD (bank 1)a call441,989
$B4BD (bank 0)a call345,582
$DF6B (bank 7)a call295,327
$DFA3 (bank 7)a call295,327
$F1EE (bank 7)a call184,732
$FE27 (bank 7)a call173,064
$C45C (bank 7)a table172,221
$C2BF (bank 7)a call158,392
$BC53 (bank 1)a call132,865
$B4EE (bank 1)a table130,466
$BC53 (bank 0)a call103,707
$B4EE (bank 0)a table103,516
$FA18 (bank 7)a call86,542
$C0D9 (bank 7)each frame (NMI)83,335
$C97E (bank 7)a call83,234
$C2CA (bank 7)a call82,808
$C44D (bank 7)a call82,808
$C4DE (bank 7)a call82,257
$C000 (bank 7)a call82,154
$C114 (bank 7)a call82,154
$C266 (bank 7)a call82,154
$F3AA (bank 7)a call79,981
$F351 (bank 7)a call72,110
$F949 (bank 7)a call72,110
$DFDF (bank 7)a call57,734
$8B87 (bank 1)a call57,688
$FE05 (bank 7)a call57,688
$BA08 (bank 1)a call55,008
$DE3D (bank 7)a call51,038
$B3B4 (bank 1)a call48,734
$BA08 (bank 0)a call48,586
$BA41 (bank 0)a call48,586
$B31B (bank 1)a call44,356
$B34B (bank 1)a call44,348
$BC64 (bank 1)a call44,289
$B33D (bank 1)a call44,286
$BC36 (bank 1)a call44,286
$BC3D (bank 1)a table44,286
$BC4B (bank 1)a table44,220
$B35C (bank 1)a table44,166
$B322 (bank 1)a table44,162
$B344 (bank 1)a table44,116
$B329 (bank 1)a call44,050
$B364 (bank 1)a table44,050
$B330 (bank 1)a table43,933
$FAFF (bank 7)a call43,266
$FBEC (bank 7)a call43,266
$C36B (bank 7)a call42,169
$CE84 (bank 7)a call41,468
$B9F3 (bank 1)a call40,549
$BA37 (bank 1)a call40,482
$C2A8 (bank 7)a call38,469
$9AE2 (bank 1)a call37,500
$95C0 (bank 1)a call35,516
$D651 (bank 7)a call35,516
$E96A (bank 7)a call35,515
$B3B4 (bank 0)a call34,599
$B31B (bank 0)a call34,598
$B322 (bank 0)a table34,598
$B34B (bank 0)a call34,586
$B33D (bank 0)a call34,569
$BC36 (bank 0)a call34,569
$BC3D (bank 0)a table34,569
$BC4B (bank 0)a table34,569
$BC64 (bank 0)a call34,569
$B35C (bank 0)a table34,549
$B344 (bank 0)a table34,540
$B329 (bank 0)a call34,502
$B330 (bank 0)a table34,502
$B364 (bank 0)a table34,502
$9A07 (bank 0)a call34,456
$F152 (bank 7)a call33,204
$F37F (bank 7)a call32,443
$D4CB (bank 7)a call28,844
$E1F1 (bank 7)a call28,844
$F186 (bank 7)a call25,982
$E8CE (bank 7)a call25,955
$E90F (bank 7)a call25,955
$E95F (bank 7)a call25,955
$F536 (bank 7)a call25,892
$F3E6 (bank 7)a table25,418
$8009 (bank 1)a call25,186
$9A4C (bank 1)a table25,186
$DC8F (bank 7)a call25,135
$800C (bank 1)a call25,118
$B9F3 (bank 0)a call24,293
$BA37 (bank 0)a call24,293
$C2C5 (bank 7)a call21,042
$E792 (bank 7)a call21,012
$9ADA (bank 1)a call19,054
$9AA8 (bank 1)a call18,750
$9AC6 (bank 1)a call18,750
$844B (bank 1)a call15,546
$F172 (bank 7)a call14,564
$84A7 (bank 1)a call14,515
$CD9C (bank 7)a call14,477
$8B13 (bank 1)a call14,422
$8B79 (bank 1)a call14,422
$95C3 (bank 1)a call14,422
$C92B (bank 7)a table14,422
$CC0D (bank 7)a call14,422
$CC1A (bank 7)a call14,422
$CD92 (bank 7)a call14,422
$CDFA (bank 7)a call14,422
$D4BF (bank 7)a call14,422
$D7B3 (bank 7)a call14,422
$D9D4 (bank 7)a call14,422
$DB17 (bank 7)a call14,422
$DB37 (bank 7)a call14,422
$DB42 (bank 7)a call14,422
$E269 (bank 7)a call14,422
$F034 (bank 7)a call14,422
$F345 (bank 7)a call14,422
$F93B (bank 7)a call14,422
$FA9D (bank 7)a call14,422
$FAF2 (bank 7)a call14,422
$FBDD (bank 7)a call14,422
$FC65 (bank 7)a call14,422
$FDE3 (bank 7)a call14,422
$FE1B (bank 7)a call14,422
$F744 (bank 7)a call13,781
$F266 (bank 7)a call13,576
$F74B (bank 7)a call13,351
$F51E (bank 7)a call12,672
$E449 (bank 7)a call12,480
$E8F1 (bank 7)a call12,390
$F1E0 (bank 7)a call11,742
$F1BF (bank 7)a call11,600
$EF9E (bank 7)a call11,242
$F282 (bank 7)a call10,552
$CF6B (bank 7)a call10,144
$E98E (bank 7)a call9,558
$D976 (bank 7)a call7,955
$C318 (bank 7)a call7,098
$E25D (bank 7)a call6,285
$E37A (bank 7)a call6,285
$E3E5 (bank 7)a call6,285
$E8BE (bank 7)a call5,469
$9871 (bank 0)a call4,696
$8142 (bank 0)a table4,421
$84FE (bank 1)a call4,408
$C9B1 (bank 7)a table4,380
$E77B (bank 7)a call4,308
$E365 (bank 7)a call3,917
$E7AD (bank 7)a call3,915
$814D (bank 0)a table3,883
$812C (bank 0)a table3,876
$83F5 (bank 1)a call3,847
$CC36 (bank 7)a table3,797
$E668 (bank 7)a call3,333
$EA2B (bank 7)a call3,192
$C376 (bank 7)a call2,955
$C3C6 (bank 7)a call2,793
$E54A (bank 7)a call2,760
$E6D2 (bank 7)a call2,550
$E457 (bank 7)a call2,479
$8263 (bank 0)a table2,438
$E770 (bank 7)a call2,390
$981E (bank 0)a call2,376
$C3D4 (bank 7)a call2,300
$CF2E (bank 7)a call2,284
$CF4E (bank 7)a call2,071
$E8FC (bank 7)a call1,916
$B4A9 (bank 1)a call1,861
$E4A3 (bank 7)a call1,816
$8871 (bank 0)a call1,728
$80B0 (bank 1)a call1,487
$E519 (bank 7)a call1,416
$E038 (bank 7)a call1,386
$D09C (bank 7)a call1,367
$C2C0 (bank 7)a call1,349
$EB85 (bank 7)a call1,338
$E1E1 (bank 7)a call1,333
$CCB7 (bank 7)a call1,274
$8182 (bank 0)a table1,266
$8109 (bank 0)a table1,261
$C7D5 (bank 7)a call1,185
$C2B3 (bank 7)a call1,179
$C37E (bank 7)a call1,179
$F2CA (bank 7)a call1,048
$EAC0 (bank 7)a call1,043
$CDBF (bank 7)a call938
$EF8C (bank 7)a call924
$881A (bank 0)a call912
$CF4C (bank 7)a call872
$E094 (bank 7)a call848
$F7B3 (bank 7)a call836
$D79F (bank 7)a call831
$CFB7 (bank 7)a call822
$8243 (bank 0)a table818
$CF81 (bank 7)a call801
$D055 (bank 7)a call782
$CF5D (bank 7)a call778
$99FA (bank 1)a table698
$E564 (bank 7)a call664
$C434 (bank 7)a call656
$B6ED (bank 1)a table641
$CF88 (bank 7)a call585
$E626 (bank 7)a call584
$E88B (bank 7)a call579
$80FB (bank 1)a call576
$FD8F (bank 7)a call558
$EF09 (bank 7)a call523
$B493 (bank 1)a call521
$B58A (bank 1)a table520
$B7E7 (bank 1)a table510
$82A3 (bank 0)a table482
$8A8C (bank 0)a call478
$B4A2 (bank 1)a call474
$F3BE (bank 7)a table474
$D4EB (bank 7)a table471
$D5DA (bank 7)a call471
$D5FC (bank 7)a call471
$D609 (bank 7)a call471
$F483 (bank 7)a table468
$8058 (bank 1)a call430
$F844 (bank 7)a call426
$8163 (bank 0)a table414
$C158 (bank 7)a call396
$C16D (bank 7)a call396
$E7A2 (bank 7)a call366
$81F6 (bank 1)a call363
$ED7A (bank 7)a call357
$F752 (bank 7)a call352
$9A8F (bank 1)a call304
$F676 (bank 7)a call273
$F682 (bank 7)a call273
$F7BA (bank 7)a call273
$F4EE (bank 7)a table264
$EB06 (bank 7)a table263
$EB0C (bank 7)a call263
$EB7A (bank 7)a call263
$81DA (bank 1)a call259
$B368 (bank 1)a call247
$ED51 (bank 7)a call238
$ED8C (bank 7)a call238
$E5E2 (bank 7)a table229
$E6A7 (bank 7)a call210
$822B (bank 1)a call209
$8244 (bank 1)a call209
$8318 (bank 1)a call209
$C2BE (bank 7)a call209
$B43E (bank 1)a call208
$B40E (bank 1)a call204
$B41D (bank 1)a call204
$C439 (bank 7)a call190
$B370 (bank 1)a call184
$B598 (bank 1)a table184
$CB96 (bank 7)a call184
$EB28 (bank 7)a call184
$EB4D (bank 7)a call184
$FB7B (bank 7)a call184
$C43D (bank 7)a call176
$C45D (bank 7)a call176
$816E (bank 1)a call174
$CBF3 (bank 7)a call173
$B36C (bank 1)a call170
$B7D9 (bank 1)a table170
$8AA7 (bank 0)a call160
$B4A9 (bank 0)a call159
$F262 (bank 7)a call156
$DC7F (bank 7)a call142
$F1A7 (bank 7)a call142
$B3FC (bank 1)a call138
$B9E4 (bank 1)a call138
$BC80 (bank 1)a table138
$BF19 (bank 1)a call138
$F699 (bank 7)a call137
$D198 (bank 7)a table121
$E720 (bank 7)a call119
$EA05 (bank 7)a call119
$EC93 (bank 7)a call119
$EC9B (bank 7)a call119
$ED5B (bank 7)a call119
$ED65 (bank 7)a call119
$ED98 (bank 7)a call119
$EFF8 (bank 7)a call119
$F01C (bank 7)a call119
$D147 (bank 7)a call118
$B374 (bank 1)a call115
$B650 (bank 1)a table114
$F277 (bank 7)a call114
$8BD5 (bank 1)a table112
$EA26 (bank 7)a table111
$C41D (bank 7)a call110
$EF00 (bank 7)a call109
$C3FB (bank 7)a call106
$A93E (bank 0)a call103
$C531 (bank 7)a table103
$8B5F (bank 0)a call102
$C487 (bank 7)a call101
$909F (bank 0)a call100
$9449 (bank 0)a call100
$C42C (bank 7)a call100
$E880 (bank 7)a call91
$F340 (bank 7)a call89
$81D1 (bank 0)a table88
$90BA (bank 0)a table87
$C1D4 (bank 7)a call73
$C578 (bank 7)a call73
$B7E7 (bank 0)a table72
$C552 (bank 7)a table72
$C801 (bank 7)a table72
$C8B0 (bank 7)a call72
$C8BB (bank 7)a call72
$C8D1 (bank 7)a table72
$CA18 (bank 7)a call72
$CBFD (bank 7)a call72
$B3F0 (bank 1)a call67
$8134 (bank 1)a call66
$CB73 (bank 7)a call66
$D92C (bank 7)a call66
$D0B5 (bank 7)a table57
$B74F (bank 1)a table54
$F2E8 (bank 7)a call54
$CBDE (bank 7)a call53
$F338 (bank 7)a call53
$B5A5 (bank 1)a call51
$B673 (bank 1)a table51
$CBB4 (bank 7)a call50
$D1F7 (bank 7)a call50
$D2EB (bank 7)a call50
$D306 (bank 7)a call50
$D38E (bank 7)a call50
$B716 (bank 1)a table49
$B6A1 (bank 0)a table47
$D315 (bank 7)a call45
$D359 (bank 7)a call45
$B87F (bank 0)a table40
$D2FA (bank 7)a call40
$D1EE (bank 7)a call39
$B710 (bank 1)a table35
$CBB0 (bank 7)a call35
$CC98 (bank 7)a call35
$F279 (bank 7)a call35
$F332 (bank 7)a call35
$B493 (bank 0)a call31
$B703 (bank 1)a table31
$CBAC (bank 7)a call31
$B4A2 (bank 0)a call30
$CFC3 (bank 7)a call30
$B36C (bank 0)a call29
$D5C8 (bank 7)a table28
$B7D9 (bank 0)a table24
$B6D3 (bank 1)a table22
$80F9 (bank 0)a table21
$CF55 (bank 7)a call21
$B40E (bank 0)a call19
$B41D (bank 0)a call19
$B43E (bank 0)a call19
$80D0 (bank 0)a table18
$8FF1 (bank 0)a call18
$9001 (bank 0)a call18
$9011 (bank 0)a call18
$B3FC (bank 0)a call18
$B9E4 (bank 0)a call18
$BC7A (bank 0)a table18
$BF19 (bank 0)a call18
$E4F1 (bank 7)a call18
$806E (bank 0)a table16
$F68D (bank 7)a call16
$87AB (bank 0)a call13
$911A (bank 0)a table13
$940B (bank 0)a call13
$E9B7 (bank 7)a call13
$E249 (bank 7)a call11
$8897 (bank 0)a call10
$C2C4 (bank 7)a call10
$EDFE (bank 7)a table10
$EE3D (bank 7)a call10
$EE4A (bank 7)a call10
$CF77 (bank 7)a table9
$801B (bank 1)a call8
$822E (bank 0)a table8
$99B8 (bank 1)a table8
$DCFC (bank 7)a call8
$FA41 (bank 7)a call8
$CB92 (bank 7)a call6
$D210 (bank 7)a call6
$9450 (bank 0)a call5
$B878 (bank 0)a table5
$D340 (bank 7)a call5
$D38A (bank 7)a call5
$8068 (bank 0)a table4
$8283 (bank 0)a table4
$C3DA (bank 7)a call4
$8DDE (bank 0)a call3
$8E21 (bank 0)a call3
$8E4E (bank 0)a call3
$8F60 (bank 0)a call3
$CDD7 (bank 7)a call3
$D5E4 (bank 7)a call3
$8B9D (bank 1)a table2
$8CFB (bank 1)a call2
$B368 (bank 0)a call2
$B374 (bank 0)a call2
$B695 (bank 0)a table2
$B6E7 (bank 1)a table2
$CEF9 (bank 7)a call2
$CF6E (bank 7)a call2
$EB8C (bank 7)a table2
$EB92 (bank 7)a call2
$8BD4 (bank 0)a call1
$8D12 (bank 0)a call1
$8D3D (bank 0)a call1
$B404 (bank 0)a call1
$CB8E (bank 7)a call1
$CE92 (bank 7)a call1
$CFBE (bank 7)a table1
$F311 (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
$C42F (bank 7)b7_wait_C42F
The wait for the frame: waits on the byte at $001A, times entered 100, turns 61,193, writes of it under the frame interrupt 83,234, frames in all 84,803
$C442 (bank 7)b7_wait_C442
The wait for the frame: waits on the byte at $001A, times entered 556, turns 1,871,573, writes of it under the frame interrupt 83,234, frames in all 84,803

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
$802A (bank 0)after a call2821$001F
$8048 (bank 1)by a return74$044A, $045A
$95EB (bank 1)after a call63
$C141 (bank 7)after a call95$001E
$C51F (bank 7)through a pointer22$0024
$CC22 (bank 7)after a call74$0300
$CC7D (bank 7)after a call55$0300
$D1D7 (bank 7)after a call105$0300
$D4D3 (bank 7)after a call123$03E0, $03F0, $03D0, $03D3
$D7BD (bank 7)after a call11$0049, $00FF, $032C
$EA1C (bank 7)after a call53$005A
$EAE4 (bank 7)after a call32
$EDE2 (bank 7)after a call32
$F36E (bank 7)after a call75

The memory its routines share

1,248 bytes of memory were written by one routine and read by another, and 96 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$07002,3→XY↓
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. 1 label is 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
$030122541 across, 1 down
$030922531 across
$030716141 across, 1 down
$04028132 across, 2 down
$04033331 across, 1 down
$030025524
$02002535
$030C2258
$030A2257
$030D2257
$030E2257
$03022254

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.

0481216202428$0301XY+193$0302+193$0303+193$030B+193$030C+193$030D+193$030E+193
Table 1: 7 arrays of up to 225 slots that 11 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. The first 32 of 225 slots are drawn. 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.
0481216202428$0300→+223$0307XY+129$030A+193
Table 2: 3 arrays of up to 161 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. The first 32 of 161 slots are drawn. 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.
0481216202428$0300→+223$0308+193$0309X+193$030B+193$030F↓+193
Table 3: 5 arrays of up to 225 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. The first 32 of 225 slots are drawn. 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.
slotsarraysroutinespositions acrosspositions downadded into themchoosing a jumpcounted downtravelling with them
225711$0301$0301$0302, $0303, $030B, $030C, $030D, $030E
16133$0307$0307$0300$0300, $030A
22554$0309$0300$030F$0300, $0308, $030B, $030F

The 24 busiest shared bytes

bytereads and writesroutines writingroutines reading
$001A171,705,34236
$064D21,481,67956
$000016,192,65166
$000113,818,60866
$00E44,725,50923
$00E54,725,50923
$00052,920,54866
$00E22,369,22766
$00E32,369,20066
$00021,786,95866
$00E01,584,49166
$00E11,584,49166
$004B1,581,86466
$00041,117,17266
$00031,030,34566
$006B1,026,95766
$00141,014,02026
$002E904,32626
$00EB896,54923
$002F821,74622
$0069629,09636
$006A629,09636
$065C501,72536
$001D462,25236

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

All the games