Protracker Tempo

Explains the details of tempo, song speed, and BPM in Protracker.

The F command

Fxx values < $20 and >=$20 are essentially two different commands that work together. An F-command with a low value sets the speed, and another with a high value sets the tempo. Let's call the commands F-speed and F-tempo.
Speed is the # of times the mainloop gets called per notestep. If only F-speeds are used throughout the module, it can be played using Vblank (or CIA, in which the tracker and playroutine use a timer value close to 1/50 second). It defaults to F06.
Tempo sets the CIA timer interrupt frequency when the playroutine is not called from Vblank. It's only valid in CIA mode. It defaults to F7D.
These defaults mean that even a module with no F-commands is valid and will play. But perhaps at the wrong speed?

My module plays at the wrong speed!

The common reason for this is that the composer tried out some F-Speed and F-tempo values (or adjusted the BPM setting) temporarily in Protracker - or he had a habit of setting it manually for each module back when the song was composed - and he didn't add the F-commands to the module before saving it.
To be sure that a module is always played at the correct speed, the composer must always put both an F-speed and an F-tempo command on the first notestep of the first pattern played in the song.

This is because F-tempo is used together with F-speed to set the general song speed as described above. For each notestep, the playroutine will be called F-speed times at the interrupt rate calculated from the F-tempo value.
This information should also be valid for Soundtracker, Noisetracker and later trackers, tracker players, and playroutines that are Protracker compatible.