/////////////////////////////////////////////////////////////////////////// // // SDL_InitDelay() - Sets up TimerDelay's for SDL_Delay() // /////////////////////////////////////////////////////////////////////////// static void SDL_InitDelay(void) { id0_int_t i; id0_word_t timer,speed; setvect(8,SDL_TimingService); // Set to my timer 0 ISR SDL_SetIntsPerSec(1000); // Time 1ms for (i = 0,timer = 0;i < 10;i++) // Do timing test 10 times { asm xor dx,dx // Zero DX asm mov cx,0xffff // Put starting value in CX asm mov [TimerDone],cx // TimerDone = false - 1 startloop: asm or [TimerDone],0 asm jnz startloop // Make sure we're at the start loop: asm test [TimerDone],1 // See if TimerDone flag got hit asm jnz done // Yep - drop out of the loop asm loop loop done: if (0xffff - TimerVal > timer) timer = 0xffff - TimerVal; } timer += timer / 2; // Use some slop TimerDelay10 = timer / (1000 / 10); TimerDelay25 = timer / (1000 / 25); TimerDelay100 = timer / (1000 / 100); SDL_SetTimer0(0); // Reset timer 0 setvect(8,t0OldService); // Set back to old ISR }
/////////////////////////////////////////////////////////////////////////// // // SDL_SetIntsPerSec() - Uses SDL_SetTimer0() to set the number of // interrupts generated by system timer 0 per second // /////////////////////////////////////////////////////////////////////////// static void SDL_SetIntsPerSec(word ints) { SDL_SetTimer0(1192030 / ints); }
/////////////////////////////////////////////////////////////////////////// // // SDL_SetIntsPerSec() - Uses SDL_SetTimer0() to set the number of // interrupts generated by system timer 0 per second // /////////////////////////////////////////////////////////////////////////// static void SDL_SetIntsPerSec(id0_word_t ints) { SDL_SetTimer0(1192755 / ints); }
/////////////////////////////////////////////////////////////////////////// // // SDL_SetIntsPerSec() - Uses SDL_SetTimer0() to set the number of // interrupts generated by system timer 0 per second // /////////////////////////////////////////////////////////////////////////// static void SDL_SetIntsPerSec(word ints) { TimerRate = ints; SDL_SetTimer0(1192030 / ints); }