Beispiel #1
0
static void
SDL_SetTimerSpeed(void)
{
	word	rate;
	//void interrupt	(*isr)(void); // PORT interrupts not available

	if ((DigiMode == sds_PC) && DigiPlaying)
	{
		rate = TickBase * 100;
		//isr = SDL_t0ExtremeAsmService; // PORT
	}
	else if
	(
		(MusicMode == smm_AdLib)
	||	((DigiMode == sds_SoundSource) && DigiPlaying)
	)
	{
		rate = TickBase * 10;
		//isr = SDL_t0FastAsmService; // PORT
	}
	else
	{
		rate = TickBase * 2;
		//isr = SDL_t0SlowAsmService; // PORT
	}

	if (rate != TimerRate)
	{
		//setvect(8,isr); // PORT
		SDL_SetIntsPerSec(rate);
		TimerRate = rate;
	}
}
Beispiel #2
0
///////////////////////////////////////////////////////////////////////////
//
//	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
}