Fester's Quest (USA)
Fester's Quest (USA) is on a MMC1 board with 131,072 bytes of program. A crawl of 400 steps from power-on kept 29 paths that found new code. Played back over 24,629 frames, they executed 5,843 bytes of it, 4 percent.
What the rules named
- The poll: 2
- The wait for the frame: 2
- The bank switch: 4
- The picture writer: 1
- The palette writers: 1
- The sprite writers: 4
- The scroll writer: 1
- The sound driver: 1
The 36 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 |
|---|---|---|---|
| $8605 (bank 3) | a call | 53,515 | The sound driver: frames it ran in 13,736, writes 25,288 |
| $C024 (bank 7) | a call | 28,249 | The poll: port $4016, reads a frame 16, strobes a frame 4 The poll: port $4017, reads a frame 16, strobes a frame 4 |
| $C9D2 (bank 7) | a call | 28,057 | The bank switch: writes 140,222, in the blank 71,047, while drawing 69,175 |
| $C364 (bank 7) | each frame (NMI) | 14,042 | The scroll writer: frames it ran in 14,042, writes in the blank 27,914 |
| $C3FC (bank 7) | a call | 14,013 | The palette writers: frames it ran in 14,013, writes 418,208 The picture writer: frames it ran in 14,013, writes 418,208, in the blank 418,208, while drawing 0 |
| $C968 (bank 7) | a call | 14,013 | The bank switch: writes 139,840, in the blank 139,840, while drawing 0 |
| $CA0F (bank 7) | a call | 117 | The sprite writers: frames it ran in 106, writes to the sprite page 1,480 |
| $C0CC (bank 7) | a call | 106 | The sprite writers: frames it ran in 106, writes to the sprite page 6,689 |
| $C0C7 (bank 7) | a call | 84 | The sprite writers: frames it ran in 84, writes to the sprite page 5,376 |
| $C9BE (bank 7) | a call | 84 | The bank switch: writes 420, in the blank 145, while drawing 275 |
| $FFF3 (bank 7) | an interrupt (IRQ) | 29 | The bank switch: writes 58, in the blank 58, while drawing 0 The sprite writers: frames it ran in 118, writes to the sprite page 7,424 |
| $81A3 (bank 3) | a call | 111,679 | |
| $856F (bank 3) | a call | 53,518 | |
| $C046 (bank 7) | a call | 28,249 | |
| $8000 (bank 3) | a call | 14,013 | |
| $C053 (bank 7) | a call | 14,013 | |
| $C9E8 (bank 7) | a call | 14,013 | |
| $E0A8 (bank 7) | a call | 14,013 | |
| $C000 (bank 7) | a call | 13,884 | |
| $A857 (bank 5) | a call | 772 | |
| $8891 (bank 3) | a call | 241 | |
| $80C8 (bank 3) | a call | 89 | |
| $C088 (bank 7) | a call | 67 | |
| $C091 (bank 7) | a call | 62 | |
| $C144 (bank 7) | a call | 57 | |
| $80F3 (bank 3) | a call | 55 | |
| $C3C5 (bank 7) | a call | 55 | |
| $C379 (bank 7) | a call | 47 | |
| $8009 (bank 5) | a call | 29 | |
| $C13F (bank 7) | a call | 29 | |
| $B63A (bank 6) | a call | 26 | |
| $A8E8 (bank 5) | a call | 11 | |
| $A974 (bank 5) | a call | 11 | |
| $8003 (bank 4) | a call | 5 | |
| $C09A (bank 7) | a call | 5 | |
| $C106 (bank 7) | a call | 5 |
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 |
|---|---|
| $B6B2 (bank 6) | The wait for the frame: waits on the byte at $0080, times entered 2, turns 22, calls on each turn 1, writes of it under the frame interrupt 303, frames in all 14,129 |
| $C004 (bank 7) | The wait for the frame: waits on the byte at $00F0, times entered 14,003, turns 61,079,258, writes of it under the frame interrupt 13,984, frames in all 14,129 |
The memory its routines share
96 bytes of memory were written by one routine and read by another, and 31 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 |
|---|---|---|---|
| $0200 | 256 | 6 | |
| $0700 | 255 | 16 | |
| $0000 | 240 | 1 | |
| $0080 | 15 | 1 | |
| $0724 | 9 | 4 | |
| $0748 | 9 | 3 | |
| $0011 | 5 | 1 | |
| $0787 | 4 | 14 | |
| $0763 | 4 | 11 | |
| $0775 | 4 | 9 | |
| $0709 | 4 | 8 | |
| $0736 | 4 | 4 |
The 24 busiest shared bytes
| byte | reads and writes | routines writing | routines reading |
|---|---|---|---|
| $00F5 | 902,727 | 3 | 6 |
| $0020 | 706,066 | 2 | 2 |
| $0021 | 705,941 | 2 | 2 |
| $0000 | 95,424 | 6 | 6 |
| $0089 | 95,068 | 3 | 2 |
| $0084 | 89,052 | 4 | 3 |
| $0700 | 46,925 | 4 | 6 |
| $0788 | 45,436 | 4 | 5 |
| $00ED | 43,147 | 3 | 6 |
| $00C8 | 42,097 | 2 | 2 |
| $0701 | 35,498 | 4 | 5 |
| $07FA | 33,493 | 3 | 6 |
| $0087 | 32,838 | 3 | 3 |
| $00FB | 28,278 | 1 | 1 |
| $0749 | 28,041 | 3 | 5 |
| $074A | 27,329 | 3 | 5 |
| $074B | 27,329 | 3 | 5 |
| $0789 | 25,097 | 4 | 5 |
| $078A | 22,031 | 4 | 5 |
| $0001 | 15,630 | 6 | 4 |
| $06BD | 14,633 | 2 | 3 |
| $00FE | 14,368 | 5 | 6 |
| $07EF | 14,337 | 2 | 3 |
| $0728 | 14,196 | 2 | 3 |
This page shows none of the game's bytes. The listing these figures were read from stays with the cartridge.