Показать сообщение отдельно
  #4  
Старый 20.01.2008, 20:04
Аватар для The Shadow
The Shadow The Shadow вне форума
Продвинутый
 
Регистрация: 11.06.2007
Адрес: Уфа, Россия
Сообщения: 793
Репутация: 35
По умолчанию

Код:
function TCpuData.CheckMPS:Boolean; 
var SysInfo:TSystemInfo; 
begin 
GetSysTemInfo(SysInfo); 
CheckMPS:=(SysInfo.dwNumberOfProcessors>1); 
end; 
function TCpuData.GetNoCpus:cardinal; 
var SysInfo:TSystemInfo; 
begin 
GetSystemInfo(SysInfo); 
GetNoCpus:=SysInfo.dwNumberOfProcessors; 
end; 
function TCpuData.CheckPN:Boolean; 
label NoPN; 
var TempCheck:dword; 
begin 
TempCheck:=1; 
asm 
  push eax 
  push ebx 
  push ecx 
  push edx 
  mov eax,1 
  db $0F,$A2                /// cpuid 
  test edx,$40000 
  jz NoPN 
  mov edx,0 
  mov TempCheck,edx 
NoPN: 
  pop edx 
  pop ecx 
  pop ebx 
  pop eax 
  end; 
CheckPN:=(TempCheck=0); 
end; 
function TCpuData.CheckCMPXCHG8B:Boolean; 
label NoCMPXCHG8B; 
var TempCheck:dword; 
begin 
TempCheck:=1; 
asm 
  push eax 
  push ebx 
  push ecx 
  push edx 
  mov eax,1 
  db $0F,$A2                /// cpuid 
  test edx,$100 
  jz NoCMPXCHG8B 
  mov edx,0 
  mov TempCheck,edx 
NoCMPXCHG8B: 
  pop edx 
  pop ecx 
  pop ebx 
  pop eax 
  end; 
CheckCMPXCHG8B:=(TempCheck=0); 
end; 
function TCpuData.CheckCMOVe:Boolean; 
label NoCMOVe; 
var TempCheck:dword; 
begin 
TempCheck:=1; 
asm 
  push eax 
  push ebx 
  push ecx 
  push edx 
  mov eax,1 
  db $0F,$A2                /// cpuid 
  test edx,$8000 
  jz NoCMOVe 
  mov edx,0 
  mov TempCheck,edx 
NoCMOVe: 
  pop edx 
  pop ecx 
  pop ebx 
  pop eax 
  end; 
CheckCMOVe:=(TempCheck=0); 
end; 
function TCpuData.CheckSelfSnoop:Boolean; 
label NoSelfSnoop; 
var TempCheck:dword; 
begin 
TempCheck:=1; 
asm 
  push eax 
  push ebx 
  push ecx 
  push edx 
  mov eax,1 
  db $0F,$A2                /// cpuid 
  test edx,$8000000 
  jz NoSelfSnoop 
  mov edx,0 
  mov TempCheck,edx 
NoSelfSnoop: 
  pop edx 
  pop ecx 
  pop ebx 
  pop eax 
  end; 
CheckSelfSnoop:=(TempCheck=0); 
end; 
function TCpuData.CheckDebugTraceStore:Boolean; 
label NoDebugTraceStore; 
var TempCheck:dword; 
begin 
TempCheck:=1; 
asm 
  push eax 
  push ebx 
  push ecx 
  push edx 
  mov eax,1 
  db $0F,$A2                /// cpuid 
  test edx,$200000 
  jz NoDebugTraceStore 
  mov edx,0 
  mov TempCheck,edx 
NoDebugTraceStore: 
  pop edx 
  pop ecx 
  pop ebx 
  pop eax 
  end; 
CheckDebugTraceStore:=(TempCheck=0); 
end; 
function TCpuData.CheckFXSAVEFXRSTOR:Boolean; 
label NoFXSAVEFXRSTOR; 
var TempCheck:dword; 
begin 
TempCheck:=1; 
asm 
  push eax 
  push ebx 
  push ecx 
  push edx 
  mov eax,1 
  db $0F,$A2                /// cpuid 
  test edx,$1000000 
  jz NoFXSAVEFXRSTOR 
  mov edx,0 
  mov TempCheck,edx 
NoFXSAVEFXRSTOR: 
  pop edx 
  pop ecx 
  pop ebx 
  pop eax 
  end; 
CheckFXSAVEFXRSTOR:=(TempCheck=0); 
end; 
function TCpuData.CheckMMX:Boolean; 
label NoMMX; 
var TempCheck:dword; 
begin 
TempCheck:=1; 
asm 
  push eax 
  push ebx 
  push ecx 
  push edx 
  mov eax,1 
  db $0F,$A2                /// cpuid 
  test edx,$800000 
  jz NoMMX 
  mov edx,0 
  mov TempCheck,edx 
NoMMX: 
  pop edx 
  pop ecx 
  pop ebx 
  pop eax 
  end; 
CheckMMX:=(TempCheck=0); 
end; 
function TCpuData.CheckMMXplus:Boolean; 
label NoMMXplus; 
var TempCheck:dword; 
begin 
TempCheck:=1; 
asm 
  push eax 
  push ebx 
  push ecx 
  push edx 
  mov eax,$80000001 
  mov ebx,0 
  mov ecx,0 
  mov edx,0 
  db $0F,$A2                /// cpuid 
  test edx,$400000 
  jz NoMMXplus 
  mov edx,0 
  mov TempCheck,edx 
NoMMXplus: 
  pop edx 
  pop ecx 
  pop ebx 
  pop eax 
  end; 
CheckMMXplus:=(TempCheck=0); 
end; 
function TCpuData.CheckSSE:Boolean; 
label NoSSE; 
var TempCheck:dword; 
begin 
TempCheck:=1; 
asm 
  push eax 
  push ebx 
  push ecx 
  push edx 
  mov eax,1 
  db $0F,$A2                /// cpuid 
  test edx,$2000000 
  jz NoSSE 
  mov edx,0 
  mov TempCheck,edx 
NoSSE: 
  pop edx 
  pop ecx 
  pop ebx 
  pop eax 
  end; 
CheckSSE:=(TempCheck=0); 
end; 
function TCpuData.CheckSSE2:Boolean; 
label NoSSE2; 
var TempCheck:dword; 
begin 
TempCheck:=1; 
asm 
  push eax 
  push ebx 
  push ecx 
  push edx 
  mov eax,1 
  db $0F,$A2                /// cpuid 
  test edx,$4000000 
  jz NoSSE2 
  mov edx,0 
  mov TempCheck,edx 
NoSSE2: 
  pop edx 
  pop ecx 
  pop ebx 
  pop eax 
  end; 
CheckSSE2:=(TempCheck=0); 
end; 
function TCpuData.CheckAMD3DNow:Boolean; 
label NoAMD3DNow; 
var TempCheck:dword; 
begin 
TempCheck:=1; 
asm 
  push eax 
  push ebx 
  push ecx 
  push edx 
  mov eax,$80000001 
  mov ebx,0 
  mov ecx,0 
  mov edx,0 
  db $0F,$A2                /// cpuid 
  test edx,$80000000 
  jz NoAMD3DNow 
  mov edx,0 
  mov TempCheck,edx 
NoAMD3DNow: 
  pop edx 
  pop ecx 
  pop ebx 
  pop eax 
  end; 
CheckAMD3DNow:=(TempCheck=0); 
end; 
function TCpuData.CheckAMD3DNowPlus:Boolean; 
label NoAMD3DNowPlus; 
var TempCheck:dword; 
begin 
TempCheck:=1; 
asm 
  push eax 
  push ebx 
  push ecx 
  push edx 
  mov eax,$80000001 
  mov ebx,0 
  mov ecx,0 
  mov edx,0 
  db $0F,$A2                /// cpuid 
  test edx,$40000000 
  jz NoAMD3DNowPlus 
  mov edx,0 
  mov TempCheck,edx 
NoAMD3DNowPlus: 
  pop edx 
  pop ecx 
  pop ebx 
  pop eax 
  end; 
CheckAMD3DNowPlus:=(TempCheck=0); 
end; 
function TCpuData.GetMaxExtendedFunctions:dword; 
var TempExt:dword; 
begin 
asm 
  push eax 
  push ebx 
  push ecx 
  push edx 
  mov eax,$80000000 
  mov ebx,0 
  mov ecx,0 
  mov edx,0 
  db $0F,$A2                /// cpuid 
  shl eax,1 
  shr eax,1 
  mov TempExt,eax 
  pop edx 
  pop ecx 
  pop ebx 
  pop eax 
end; 
GetMaxExtendedFunctions:=TempExt; 
end; 

procedure TCpuData.GetExtendedFMS(var family,model,stepping:byte); 
var TempFlags:dword; 
    BinFlags:array[0..31] of byte; 
    i,pos:integer; 
begin 
asm 
  push eax 
  push ebx 
  push ecx 
  push edx 
  mov eax,$80000001 
  mov ebx,0 
  mov ecx,0 
  mov edx,0 
  db $0F,$A2                /// cpuid 
  mov TempFlags,eax 
  pop edx 
  pop ecx 
  pop ebx 
  pop eax 
end; 
for i:=0 to 31 do 
  begin 
   BinFlags[i]:=TempFlags mod 2; 
   TempFlags:=TempFlags div 2; 
  end; 
family:=0; 
model:=0; 
stepping:=0; 
  pos:=0; 
  for i:=0 to 3 do 
   begin 
    stepping:=stepping+(BinFlags[pos]*StrToInt(FloatToStr(Power(2,i)))); 
    inc(pos); 
   end; 
  pos:=4; 
  for i:=0 to 3 do 
   begin 
    model:=model+(BinFlags[pos]*StrToInt(FloatToStr(Power(2,i)))); 
    inc(pos); 
   end; 
  pos:=8; 
  for i:=0 to 3 do 
   begin 
    family:=family+(BinFlags[pos]*StrToInt(FloatToStr(Power(2,i)))); 
    inc(pos); 
   end; 
end; 

function TCpuData.GetExtendedCpuName:string; 
var s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12:array[0..3] of char; 
    TempCpuName:string; 
    i:integer; 
begin 
asm 
  push eax 
  push ebx 
  push ecx 
  push edx 
  mov eax,$80000002 
  mov ebx,0 
  mov ecx,0 
  mov edx,0 
  db $0F,$A2                /// cpuid 
  mov s1,eax 
  mov s2,ebx 
  mov s3,ecx 
  mov s4,edx 
  mov eax,$80000003 
  mov ebx,0 
  mov ecx,0 
  mov edx,0 
  db $0F,$A2                /// cpuid 
  mov s5,eax 
  mov s6,ebx 
  mov s7,ecx 
  mov s8,edx 
  mov eax,$80000004 
  mov ebx,0 
  mov ecx,0 
  mov edx,0 
  db $0F,$A2                /// cpuid 
  mov s9,eax 
  mov s10,ebx 
  mov s11,ecx 
  mov s12,edx 
  pop edx 
  pop ecx 
  pop ebx 
  pop eax 
end; 
  TempCpuName:=''; 
  for i:=0 to 3 do 
   TempCpuName:=TempCpuName+s1[i]; 
  for i:=0 to 3 do 
   TempCpuName:=TempCpuName+s2[i]; 
  for i:=0 to 3 do 
   TempCpuName:=TempCpuName+s3[i]; 
  for i:=0 to 3 do 
   TempCpuName:=TempCpuName+s4[i]; 
  for i:=0 to 3 do 
   TempCpuName:=TempCpuName+s5[i]; 
  for i:=0 to 3 do 
   TempCpuName:=TempCpuName+s6[i]; 
  for i:=0 to 3 do 
   TempCpuName:=TempCpuName+s7[i]; 
  for i:=0 to 3 do 
   TempCpuName:=TempCpuName+s8[i]; 
  for i:=0 to 3 do 
   TempCpuName:=TempCpuName+s9[i]; 
  for i:=0 to 3 do 
   TempCpuName:=TempCpuName+s10[i]; 
  for i:=0 to 3 do 
   TempCpuName:=TempCpuName+s11[i]; 
  for i:=0 to 3 do 
   TempCpuName:=TempCpuName+s12[i]; 
  GetExtendedCpuName:=TempCpuName; 
end; 
__________________
Что делать, когда сломался комп:
1. Если вы юзер - делать ноги.
2. Если ремонтник - делать деньги.
3. Если вы программист - делать вид, что так было задумано.
Ответить с цитированием