Paperboy (USA)

Paperboy (USA) is on a CNROM board with 32,768 bytes of program. A crawl of 400 steps from power-on kept 17 paths that found new code. Played back over 17,317 frames, they executed 4,799 bytes of it, 15 percent.

What the rules named

The 138 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
$80EAa call12,444
The poll: port $4016, reads a frame 11, strobes a frame 4
The random byte: frames it ran in 5,062, bytes $0000, rotates 1, exclusive-ors 1
$8006each frame (NMI)6,766
The game inside the interrupt: frames it ran in 6,766, frames in all 6,817, the spin is at $80A1
The scroll writer: frames it ran in 6,766, writes in the blank 13,068
$853Ea call6,551
The palette writers: frames it ran in 6,551, writes 586
The picture writer: frames it ran in 6,551, writes 3,568, in the blank 2,836, while drawing 732
$839Ea call6,542
Where two things are compared: instructions 1, pairs of bytes 65, bytes in all 13, times compared 59,079, X positions at $0019,$001A,$001B,$001C,$001D,$001E,$001F,$0020,$0021,$0022,$0023,$0024
The sprite writers: frames it ran in 6,551, writes to the sprite page 720,675
$9C26a call2,457
The jump engine: tables 1, jumps through them 1,221
$98C8a call1,632
The jump engine: tables 4, jumps through them 485
$8706a call681
The jump engine: tables 11, jumps through them 279
$8722a call554
The jump engine: tables 8, jumps through them 475
$80A4a call58
The bank switch: writes 116, in the blank 0, while drawing 116
$8048power-on17
The sound driver: frames it ran in 6,594, writes 51
$80B3a call6
The jump engine: tables 1, jumps through them 6
$81F0a call74,532
$86BEa call27,311
$94FCa table15,284
$81B6a call9,098
$867Ea call6,551
$8151a call6,203
$85C4a call3,600
$834Da call2,845
$A4CDa call2,487
$84F3a call2,469
$8044a call2,465
$8DB6a table2,465
$8F86a call2,457
$9B65a table2,457
$9F44a table2,457
$9FA4a call2,457
$9FB6a call2,457
$A462a call2,457
$9BE0a call2,456
$88A4a table2,414
$832Ba call2,308
$8DC8a call2,239
$8FD6a call2,081
$861Aa call1,617
$A4E2a call1,276
$9C1Ca call1,228
$908Ba table1,084
$872Fa call794
$817Aa call780
$818Ba call780
$865Ea call720
$8618a call690
$A69Ba table582
$862Ba call563
$864Fa call562
$84EAa call524
$9698a call476
$81AAa call457
$9899a table431
$8E3Ca call418
$98A4a table412
$98B2a table407
$98BDa table382
$86CCa call244
$A61Da table189
$A993a table177
$8290a call163
$8505a call162
$8530a call162
$8883a table161
$A87Ca table132
$A90Ea table130
$9AB2a table126
$82D9a call120
$8678a call112
$863Aa call109
$860Fa call102
$8643a call90
$8261a call88
$82B8a call88
$8244a call76
$A683a table67
$8A0Aa call66
$8A59a call66
$8A70a call66
$8A76a call66
$8A80a call66
$9E98a call66
$A512a call66
$A522a call66
$9494a table62
$94F0a table54
$9E50a table48
$825Ca call40
$811Aa call39
$86C1a call36
$866Fa call34
$8790a table30
$9652a call28
$8716a call26
$A5E1a table24
$A7BAa table24
$A605a table21
$986Ea table19
$8629a call18
$864Da call18
$9E62a table18
$813Ea call17
$8754a table17
$8785a table17
$8868a table17
$A4EDa call17
$A50Ba call17
$95CBa call14
$821Da call10
$8928a table10
$89DCa call10
$9D37a call10
$9EF8a call10
$9B50a table8
$9BDEa call8
$9F31a table8
$A7C9a call8
$A805a table8
$A897a table8
$A929a table8
$86D5a call5
$9159a call5
$91B1a call5
$9235a call5
$9486a call5
$A7B0a table4
$88FBa table3
$9481a call3
$9A84a table3
$9F24a call3
$A58Da table3
$A5B2a table3
$8917a table2
$9AC4a table2
$852Aa call1
$879Ba table1
$891Ca table1
$8A8Ba call1
$9AA1a table1
$9E43a table1
$A40Aa call1

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
$80A1
The idle spin: turns 48,914,261, turns a frame 7,175

The memory its routines share

689 bytes of memory were written by one routine and read by another, and 51 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
$000D251213 across
$02002532
$03001808
$03011794
$02011571
$02021571
$02031571
$03021532
$0773801
$0535623
$05CD446
$058B441

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
25411$000D$0026, $003F, $0058

The 24 busiest shared bytes

bytereads and writesroutines writingroutines reading
$0000574,73366
$0094243,23733
$009D227,46336
$009E227,46366
$0095168,70533
$0450154,95623
$0002148,61866
$0001136,27766
$0097110,42121
$045167,07145
$009863,94916
$000552,21826
$000631,39946
$00B124,65422
$000721,89746
$009020,28012
$040018,81426
$050018,46366
$04FF18,22966
$04FB17,59966
$051917,38856
$04FA16,88966
$030016,78856
$041F16,65666

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

All the games