[HAL][FREELDR] Fix system timer oscillator frequency on a Xbox (#2245)
authordisean <di.sean@protonmail.com>
Tue, 14 Jan 2020 17:47:36 +0000 (23:47 +0600)
committerHermès BÉLUSCA - MAÏTO <hermes.belusca-maito@reactos.org>
Tue, 14 Jan 2020 17:47:36 +0000 (18:47 +0100)
See https://xboxdevwiki.net/Porting_an_Operating_System_to_the_Xbox_HOWTO#Timer_Frequency

boot/freeldr/freeldr/arch/i386/hardware.c
hal/halx86/include/halp.h

index 0cac33d..67074c0 100644 (file)
@@ -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;
index 9c03a96..0ef52df 100644 (file)
@@ -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)