Index: boot/freeldr/freeldr/freeldr.c =================================================================== --- boot/freeldr/freeldr/freeldr.c (revision 56647) +++ boot/freeldr/freeldr/freeldr.c (working copy) @@ -52,6 +52,9 @@ #ifdef _M_IX86 HalpInitializePciStubs(); HalpInitBusHandler(); + + /* check if we're running on a 486. */ + FrCheck486Compatiblity(); #endif RunLoader(); } Index: boot/freeldr/freeldr/arch/i386/hardware.c =================================================================== --- boot/freeldr/freeldr/arch/i386/hardware.c (revision 56647) +++ boot/freeldr/freeldr/arch/i386/hardware.c (working copy) @@ -1755,4 +1755,56 @@ */ } +VOID +FrCheck486Compatiblity(VOID) { + INT CpuInformation[4] = {-1}; + ULONG NumberOfIds; + + /* + * Note: the use of printf(x) in this function is used + * due to the User Interface not being initialized. + */ + + /* Check if the processor first supports ID 1 */ + __cpuid(CpuInformation, 0); + + NumberOfIds = CpuInformation[0]; + + /* + * Nids will be greater than 1 if the running processor is + * new enough. + */ + + if(NumberOfIds <= 1) + { + INT ProcessorFamily; + + /* Get information. */ + __cpuid(CpuInformation, 1); + + ProcessorFamily = (CpuInformation[0] >> 8) & 0xF; + + /* If it's Family 4 or lower, spin. */ + + if(ProcessorFamily < 5) + { + printf("ReactOS requires a Pentium-level processor or newer.\n\n"); + + printf("System halted.\n"); + while(1); + } + } + else if(NumberOfIds == 0) + { + printf("ReactOS requires the CPUID instruction to return " + "more than one supported ID.\n\n"); + + printf("System halted.\n"); + while(1); + } + + return; +} + + /* EOF */ Index: boot/freeldr/freeldr/include/arch/i386/i386.h =================================================================== --- boot/freeldr/freeldr/include/arch/i386/i386.h (revision 56647) +++ boot/freeldr/freeldr/include/arch/i386/i386.h (working copy) @@ -69,4 +69,6 @@ void i386AlignmentCheck(void); void i386MachineCheck(void); +VOID FrCheck486Compatiblity(VOID); + /* EOF */