You can hook in to a 1KHz interrupt under Windows but it is not exactly fast enough which is why my current mill driver runs DOS. I get the whole computer not just a share of it...

oldhandler=getvect(INTR); // hook in to the interrupt
setvect(INTR,service);
outportb(0x43,0x3c); // set speed
outportb(0x40,timeset&0xff); // low byte
outportb(0x40,timeset>>8); // high byte

... and the timer interrupt is all mine :naughty:

Doesn't half boot quick to when you load DOS on to a GHz machine