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 poll: 1
- The idle spin: 1
- The game inside the interrupt: 1
- The jump engine: 5
- The bank switch: 1
- The picture writer: 1
- The palette writers: 1
- The sprite writers: 1
- The scroll writer: 1
- The sound driver: 1
- The random byte: 1
- Where two things are compared: 1
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.
| at | entered by | times | what it is, and the evidence |
|---|---|---|---|
| $80EA | a call | 12,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 |
| $8006 | each 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 |
| $853E | a call | 6,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 |
| $839E | a call | 6,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 |
| $9C26 | a call | 2,457 | The jump engine: tables 1, jumps through them 1,221 |
| $98C8 | a call | 1,632 | The jump engine: tables 4, jumps through them 485 |
| $8706 | a call | 681 | The jump engine: tables 11, jumps through them 279 |
| $8722 | a call | 554 | The jump engine: tables 8, jumps through them 475 |
| $80A4 | a call | 58 | The bank switch: writes 116, in the blank 0, while drawing 116 |
| $8048 | power-on | 17 | The sound driver: frames it ran in 6,594, writes 51 |
| $80B3 | a call | 6 | The jump engine: tables 1, jumps through them 6 |
| $81F0 | a call | 74,532 | |
| $86BE | a call | 27,311 | |
| $94FC | a table | 15,284 | |
| $81B6 | a call | 9,098 | |
| $867E | a call | 6,551 | |
| $8151 | a call | 6,203 | |
| $85C4 | a call | 3,600 | |
| $834D | a call | 2,845 | |
| $A4CD | a call | 2,487 | |
| $84F3 | a call | 2,469 | |
| $8044 | a call | 2,465 | |
| $8DB6 | a table | 2,465 | |
| $8F86 | a call | 2,457 | |
| $9B65 | a table | 2,457 | |
| $9F44 | a table | 2,457 | |
| $9FA4 | a call | 2,457 | |
| $9FB6 | a call | 2,457 | |
| $A462 | a call | 2,457 | |
| $9BE0 | a call | 2,456 | |
| $88A4 | a table | 2,414 | |
| $832B | a call | 2,308 | |
| $8DC8 | a call | 2,239 | |
| $8FD6 | a call | 2,081 | |
| $861A | a call | 1,617 | |
| $A4E2 | a call | 1,276 | |
| $9C1C | a call | 1,228 | |
| $908B | a table | 1,084 | |
| $872F | a call | 794 | |
| $817A | a call | 780 | |
| $818B | a call | 780 | |
| $865E | a call | 720 | |
| $8618 | a call | 690 | |
| $A69B | a table | 582 | |
| $862B | a call | 563 | |
| $864F | a call | 562 | |
| $84EA | a call | 524 | |
| $9698 | a call | 476 | |
| $81AA | a call | 457 | |
| $9899 | a table | 431 | |
| $8E3C | a call | 418 | |
| $98A4 | a table | 412 | |
| $98B2 | a table | 407 | |
| $98BD | a table | 382 | |
| $86CC | a call | 244 | |
| $A61D | a table | 189 | |
| $A993 | a table | 177 | |
| $8290 | a call | 163 | |
| $8505 | a call | 162 | |
| $8530 | a call | 162 | |
| $8883 | a table | 161 | |
| $A87C | a table | 132 | |
| $A90E | a table | 130 | |
| $9AB2 | a table | 126 | |
| $82D9 | a call | 120 | |
| $8678 | a call | 112 | |
| $863A | a call | 109 | |
| $860F | a call | 102 | |
| $8643 | a call | 90 | |
| $8261 | a call | 88 | |
| $82B8 | a call | 88 | |
| $8244 | a call | 76 | |
| $A683 | a table | 67 | |
| $8A0A | a call | 66 | |
| $8A59 | a call | 66 | |
| $8A70 | a call | 66 | |
| $8A76 | a call | 66 | |
| $8A80 | a call | 66 | |
| $9E98 | a call | 66 | |
| $A512 | a call | 66 | |
| $A522 | a call | 66 | |
| $9494 | a table | 62 | |
| $94F0 | a table | 54 | |
| $9E50 | a table | 48 | |
| $825C | a call | 40 | |
| $811A | a call | 39 | |
| $86C1 | a call | 36 | |
| $866F | a call | 34 | |
| $8790 | a table | 30 | |
| $9652 | a call | 28 | |
| $8716 | a call | 26 | |
| $A5E1 | a table | 24 | |
| $A7BA | a table | 24 | |
| $A605 | a table | 21 | |
| $986E | a table | 19 | |
| $8629 | a call | 18 | |
| $864D | a call | 18 | |
| $9E62 | a table | 18 | |
| $813E | a call | 17 | |
| $8754 | a table | 17 | |
| $8785 | a table | 17 | |
| $8868 | a table | 17 | |
| $A4ED | a call | 17 | |
| $A50B | a call | 17 | |
| $95CB | a call | 14 | |
| $821D | a call | 10 | |
| $8928 | a table | 10 | |
| $89DC | a call | 10 | |
| $9D37 | a call | 10 | |
| $9EF8 | a call | 10 | |
| $9B50 | a table | 8 | |
| $9BDE | a call | 8 | |
| $9F31 | a table | 8 | |
| $A7C9 | a call | 8 | |
| $A805 | a table | 8 | |
| $A897 | a table | 8 | |
| $A929 | a table | 8 | |
| $86D5 | a call | 5 | |
| $9159 | a call | 5 | |
| $91B1 | a call | 5 | |
| $9235 | a call | 5 | |
| $9486 | a call | 5 | |
| $A7B0 | a table | 4 | |
| $88FB | a table | 3 | |
| $9481 | a call | 3 | |
| $9A84 | a table | 3 | |
| $9F24 | a call | 3 | |
| $A58D | a table | 3 | |
| $A5B2 | a table | 3 | |
| $8917 | a table | 2 | |
| $9AC4 | a table | 2 | |
| $852A | a call | 1 | |
| $879B | a table | 1 | |
| $891C | a table | 1 | |
| $8A8B | a call | 1 | |
| $9AA1 | a table | 1 | |
| $9E43 | a table | 1 | |
| $A40A | a call | 1 |
Where it waits
Loops a rule named that sit inside a routine and are not themselves a place the code is entered.
| at | what 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
| from | bytes reached | instructions | positions it holds |
|---|---|---|---|
| $000D | 25 | 12 | 13 across |
| $0200 | 253 | 2 | |
| $0300 | 180 | 8 | |
| $0301 | 179 | 4 | |
| $0201 | 157 | 1 | |
| $0202 | 157 | 1 | |
| $0203 | 157 | 1 | |
| $0302 | 153 | 2 | |
| $0773 | 80 | 1 | |
| $0535 | 62 | 3 | |
| $05CD | 44 | 6 | |
| $058B | 44 | 1 |
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.
| slots | arrays | routines | positions across | positions down | added into them | choosing a jump | travelling with them |
|---|---|---|---|---|---|---|---|
| 25 | 4 | 11 | $000D | $0026, $003F, $0058 |
The 24 busiest shared bytes
| byte | reads and writes | routines writing | routines reading |
|---|---|---|---|
| $0000 | 574,733 | 6 | 6 |
| $0094 | 243,237 | 3 | 3 |
| $009D | 227,463 | 3 | 6 |
| $009E | 227,463 | 6 | 6 |
| $0095 | 168,705 | 3 | 3 |
| $0450 | 154,956 | 2 | 3 |
| $0002 | 148,618 | 6 | 6 |
| $0001 | 136,277 | 6 | 6 |
| $0097 | 110,421 | 2 | 1 |
| $0451 | 67,071 | 4 | 5 |
| $0098 | 63,949 | 1 | 6 |
| $0005 | 52,218 | 2 | 6 |
| $0006 | 31,399 | 4 | 6 |
| $00B1 | 24,654 | 2 | 2 |
| $0007 | 21,897 | 4 | 6 |
| $0090 | 20,280 | 1 | 2 |
| $0400 | 18,814 | 2 | 6 |
| $0500 | 18,463 | 6 | 6 |
| $04FF | 18,229 | 6 | 6 |
| $04FB | 17,599 | 6 | 6 |
| $0519 | 17,388 | 5 | 6 |
| $04FA | 16,889 | 6 | 6 |
| $0300 | 16,788 | 5 | 6 |
| $041F | 16,656 | 6 | 6 |
This page shows none of the game's bytes. The listing these figures were read from stays with the cartridge.