getCPUid
4033 点击·0 回帖
![]() | ![]() | |
![]() | //This unit can be used to detect the cpu model. unit CpuId; interface uses Windows, Mmsystem, Sysutils, Math, Dialogs; type TCpuRec=record Nametring[128]; Vendortring[12]; Frequency:word; Family:integer; Model:integer; Stepping:integer; L1DCache:word; L1ICache:word; L2Cache:word; end; TCpuType = (cpu8086, cpu286, cpu386, cpu486, cpuPentium); TCpuData=object function GetCPUIDSupport:Boolean; function GetVendorStringtring; function GetCPUFrequency:word; procedure GetFMS(var Family,Model,Stepping:byte); function GetMaxCpuId:dword; function CheckFPU:Boolean; function CheckTSC:Boolean; function CheckMSR:Boolean; function CheckMPS:Boolean; function GetNoCpus:cardinal; function CheckPN:Boolean; function CheckCMPXCHG8B:Boolean; function CheckCMOVe:Boolean; function CheckSelfSnoop:Boolean; function CheckDebugTraceStore:Boolean; function CheckFXSAVEFXRSTOR:Boolean; function CheckMMX:Boolean; function CheckMMXplus:Boolean; function CheckSSE:Boolean; function CheckSSE2:Boolean; function Checkamd3DNow:Boolean; function CheckAMD3DNowPlus:Boolean; function GetMaxExtendedFunctions:dword; procedure GetExtendedFMS(var Family,Model,Stepping:byte); function GetExtendedCpuNametring; function GetExtendedL1DCache:word; function GetExtendedL1ICache:word; function GetExtendedL2Cache:word; function CheckCeleron:Boolean; function CheckPentiumIII:Boolean; function CheckXeon:Boolean; function CheckPentium4:Boolean; function CheckIthanium:Boolean; function intelP5Ntring; function IntelP6Ntring; function AMDK5Ntring; function Cyrix686Ntring; function GenericCpuNtring; function P5CacheL1DI:word; function P6CacheL1DI:word; function P6CacheL2:word; function AuthenticAMD:TCpuRec; function GenuineIntel:TCpuRec; function CyrixInstead:TCpuRec; function GenericCPU:TCpuRec; end; const Intel486:array[0..8] of string= (Intel 486 DX, Intel 486 DX, Intel 486 SX, Intel 486 DX2, Intel 486 SL, Intel 486 SX2, Intel 486 DX2, Intel 486 DX4, Intel 486 DX4); UMC486:array[0..1] of string= (UMC U5D, UMC U5S); AMD486:array[0..5] of string= (AMD 486 DX2, AMD 486 DX2, AMD 486 DX4, AMD 486 DX4, AMD 5x86, AMD 5x86); IntelP5:array[0..6] of string= (Intel Pentium P5 A-Step, Intel Pentium P5, Intel Pentium P54C, Intel Pentium P24T Overdrive, Intel Pentium MMX P55C, Intel Pentium P54C, Intel Pentium MMX P55C); NexGenNx586=NexGen Nx586; Cyrix4x86=VIA Cyrix 4x86; Cyrix5x86=VIA Cyrix 5x86; CyrixMediaGX=VIA Cyrix Media GX; CyrixM1=VIA Cyrix 6x86; CyrixM2=VIA Cyrix 6x86MX; CyrixIII=VIA Cyrix III; AMDK5:array[0..3] of string= (AMD SSA5 (PR75/PR90/PR100), AMD 5k86 (PR120/PR133), AMD 5k86 (PR166), AMD 5k86 (PR200)); AMDK6:array[0..4] of string= (AMD K6 (166~233), AMD K6 (266~300), AMD K6-2, AMD K6-III, AMD K6-2+ or K6-III+); Centaur:array[0..2] of string= (Centaur C6, Centaur C2, Centaur C3); Rise:array[0..1] of string= (Rise mP6, Rise mP6); IntelP6:array[0..7] of string= (Intel Pentium Pro A-Step, Intel Pentium Pro, Intel Pentium II, Intel Pentium II, Intel Pentium II, Intel Pentium III, Intel Pentium III, Intel Pentium III); AMDK7:array[0..3] of string= (AMD Athlon(tm) Processor, AMD Athlon(tm) Processor, AMD Duron(tm) Processor, AMD Thunderbird Processor); IntelP4=Intel Pentium 4; var CpuData:TCpuData; implementation function TCpuData.GetCPUIDSupport:Boolean; var TempDetect:dword; begin asm pushf pushfd push eax push ebx push ecx push edx pushfd pop eax mov ebx,eax xor eax,$00200000 push eax popfd pushfd pop eax push ebx popfd xor eax,ebx mov TempDetect,eax pop edx pop ecx pop ebx pop eax popfd popf end; GetCPUIDSupport:=(TempDetect=$00200000); end; function TCpuData.GetVendorStringtring; var s1,s2,s3:array[0..3] of char; TempVendortring; i:integer; begin asm push eax push ebx | |
![]() | ![]() |