void I_Init() { CheckCPUID(&CPU); CalculateCPUSpeed(); DumpCPUInfo(&CPU); I_GetTime = I_GetTimeSelect; I_WaitForTic = I_WaitForTicSelect; atterm (I_ShutdownSound); I_InitSound (); }
// // I_Init // void I_Init (void) { #ifndef USEASM memset (&CPU, 0, sizeof(CPU)); #else CheckMMX (&CPU); CalculateCPUSpeed (); // Why does Intel right-justify this string? char *f = CPU.CPUString, *t = f; while (*f == ' ') { ++f; } if (f != t) { while (*f != 0) { *t++ = *f++; } } #endif if (CPU.VendorID[0]) { Printf ("CPU Vendor ID: %s\n", CPU.VendorID); if (CPU.CPUString[0]) { Printf (" Name: %s\n", CPU.CPUString); } if (CPU.bIsAMD) { Printf (" Family %d (%d), Model %d, Stepping %d\n", CPU.Family, CPU.AMDFamily, CPU.AMDModel, CPU.AMDStepping); } else { Printf (" Family %d, Model %d, Stepping %d\n", CPU.Family, CPU.Model, CPU.Stepping); } Printf (" Features:"); if (CPU.bMMX) Printf (" MMX"); if (CPU.bMMXPlus) Printf (" MMX+"); if (CPU.bSSE) Printf (" SSE"); if (CPU.bSSE2) Printf (" SSE2"); if (CPU.bSSE3) Printf (" SSE3"); if (CPU.b3DNow) Printf (" 3DNow!"); if (CPU.b3DNowPlus) Printf (" 3DNow!+"); Printf ("\n"); } // Use a timer event if possible NewTicArrived = CreateEvent (NULL, FALSE, FALSE, NULL); if (NewTicArrived) { UINT delay; char *cmdDelay; cmdDelay = Args.CheckValue ("-timerdelay"); delay = 0; if (cmdDelay != 0) { delay = atoi (cmdDelay); } if (delay == 0) { delay = 1000/TICRATE; } TimerEventID = timeSetEvent ( delay, 0, TimerTicked, 0, TIME_PERIODIC ); MillisecondsPerTic = delay; } if (TimerEventID != 0) { I_GetTime = I_GetTimeEventDriven; I_WaitForTic = I_WaitForTicEvent; } else { // If no timer event, busy-loop with timeGetTime I_GetTime = I_GetTimePolled; I_WaitForTic = I_WaitForTicPolled; } atterm (I_ShutdownSound); I_InitSound (); I_InitInput (Window); I_InitHardware (); }