Track times (gain over previous run)
0 ― 37.50 (1.42)
1 ― 39.21 (4.53)
2 ― 40.43 (4.78)
3 ― 42.00 (2.59)
4 ― 41.04 (3.69)
5 ― 31.76 (4.75)
I figured out some of the programming for this game, which allowed me to discover various tricks to preserve speed.
First, I found out where your speed is kept in memory, so I could watch my speed while I played. This was very useful, obviously. For example, in level 2, I found out it is just barely worth it to slow down so you can hit the 2nd ramp (about .24 pixels per frame speed is gained).
The most important thing I noticed is that input affecting your speed is only checked every four frames. So, you only have to push B every 4th frame, which prevents engine overheating. When you're in the air, you only need to press Right every 4th frame to maintain your speed.
Now, input affecting the slant of your bike is also only checked once in a while. In the air, it's every 4 frames since you last inputted something changing the slant of your bike. On the ground, it's every 6 frames (or 13 if you're doing a big wheelie). In this run, I tried to keep this slant-timer out of synch with the speed-timer, so that I could slant my bike however I wanted without losing speed. Sometimes when you see me doing a wheelie before going over a ramp, it's to keep the slant-timer and speed-timer out of synch.
Besides simply avoiding speed loss, knowing these input timers also allows for some nice tricks. Left and Right affect your bike's arc while in the air, so I was able to greatly lengthen or shorten my jumps. If you jump too high, you'll wrap around to the bottom of the screen, and then eventually end up back on the track. I use this to my advantage to hit some ramps I wouldn't have been able to hit otherwise (for example, hitting all three ramps on the second lap of tracks 0 and 1).
Fun facts: Your usual max speed is 3.25 pixels per frame. Going over a ramp increases your speed by 1 pixel per frame. If your speed exceeds about 8 pixels per frame, there will be some graphical glitches eventually--this happens a couple times in my run. I get up to 9.25 pixels per frame in the final race.
For reference, here's the memory addresses I used:
0094 (high byte) and 0090 (low byte) are your speed
00B0 is whether you are in the air
0026 is the slant-timer. When this is 0 or 1, your input will be accepted for changing the slant of your bike.
004C is the speed-timer. When this is 3, your input will be accepted for affecting your speed.
0098 is whether you are crashing :)