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]; fo