From: disean Date: Tue, 14 Jan 2020 17:47:36 +0000 (+0600) Subject: [HAL][FREELDR] Fix system timer oscillator frequency on a Xbox (#2245) X-Git-Tag: 0.4.14-RC~755 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=e5c00524662f1396a889411fd7dfa81403121de7 [HAL][FREELDR] Fix system timer oscillator frequency on a Xbox (#2245) See https://xboxdevwiki.net/Porting_an_Operating_System_to_the_Xbox_HOWTO#Timer_Frequency --- diff --git a/boot/freeldr/freeldr/arch/i386/hardware.c b/boot/freeldr/freeldr/arch/i386/hardware.c index 0cac33d4986..67074c0fd30 100644 --- a/boot/freeldr/freeldr/arch/i386/hardware.c +++ b/boot/freeldr/freeldr/arch/i386/hardware.c @@ -27,8 +27,13 @@ DBG_DEFAULT_CHANNEL(HWDETECT); #define MILLISEC (10) #define PRECISION (8) +#if defined(SARCH_XBOX) +#define CLOCK_TICK_RATE 1125000 +#else +#define CLOCK_TICK_RATE 1193182 +#endif + #define HZ (100) -#define CLOCK_TICK_RATE (1193182) #define LATCH (CLOCK_TICK_RATE / HZ) static unsigned int delay_count = 1; diff --git a/hal/halx86/include/halp.h b/hal/halx86/include/halp.h index 9c03a96f43d..0ef52df2a93 100644 --- a/hal/halx86/include/halp.h +++ b/hal/halx86/include/halp.h @@ -86,11 +86,18 @@ VOID // #define GRAPHICS_MODE_12 0x12 /* 80x30 8x16 640x480 16/256K */ +#if defined(SARCH_XBOX) +// +// For some unknown reason the PIT of the Xbox is fixed at 1.125000 MHz, +// which is ~5.7% lower than on the PC. +// +#define PIT_FREQUENCY 1125000 +#else // // Commonly stated as being 1.19318MHz // // See ISA System Architecture 3rd Edition (Tom Shanley, Don Anderson, John Swindle) -// P. 471 +// p. 471 // // However, the true value is closer to 1.19318181[...]81MHz since this is 1/3rd // of the NTSC color subcarrier frequency which runs at 3.57954545[...]45MHz. @@ -104,6 +111,7 @@ VOID // number is quite long. // #define PIT_FREQUENCY 1193182 +#endif // // These ports are controlled by the i8254 Programmable Interrupt Timer (PIT)