template void SMP::Timer::tick() { if(++stage1_ticks < cycle_frequency) return; stage1_ticks = 0; if(enable == false) return; if(++stage2_ticks != target) return; stage2_ticks = 0; stage3_ticks = (stage3_ticks + 1) & 15; } template void SMP::Timer::tick(unsigned clocks) { stage1_ticks += clocks; if(stage1_ticks < cycle_frequency) return; stage1_ticks -= cycle_frequency; if(enable == false) return; if(++stage2_ticks != target) return; stage2_ticks = 0; stage3_ticks = (stage3_ticks + 1) & 15; }