2009-05-12 20:05:00 +02:00

35 lines
712 B
C++
Executable File

template<uint8 cycle_frequency>
class sSMPTimer {
public:
uint8 target;
uint8 stage1_ticks, stage2_ticks, stage3_ticks;
bool enabled;
void tick() {
//stage 1 increment
stage1_ticks++;
if(stage1_ticks < cycle_frequency) return;
stage1_ticks -= cycle_frequency;
if(enabled == false) return;
//stage 2 increment
stage2_ticks++;
if(stage2_ticks != target) return;
//stage 3 increment
stage2_ticks = 0;
stage3_ticks++;
stage3_ticks &= 15;
}
};
sSMPTimer<128> t0;
sSMPTimer<128> t1;
sSMPTimer< 16> t2;
alwaysinline void add_clocks(unsigned clocks);
alwaysinline void tick_timers();
uint32 clocks_executed();