Тема: Процессор
Показать сообщение отдельно
  #4  
Старый 19.10.2007, 16:35
JCDArtem JCDArtem вне форума
Прохожий
 
Регистрация: 18.10.2007
Сообщения: 17
Репутация: 10
По умолчанию

Часть 2:

Код:
function TCpuData.CheckFPU: Boolean;
label
  NoFpu;
var
  TempCheck: dword;
begin
  TempCheck:=1;
  asm
    push eax
    push ebx
    push ecx
    push edx
    mov eax,1
    db $0F,$A2 /// cpuid
    test edx,$1
    jz NoFpu
    mov edx,0
    mov TempCheck,edx
    NoFpu:
    pop edx
    pop ecx
    pop ebx
    pop eax
  end;
  CheckFpu:=(TempCheck=0);
end;

function TCpuData.CheckTSC: Boolean;
label
  NoTSC;
var
  TempCheck: dword;
begin
  TempCheck:=1;
  asm
    push eax
    push ebx
    push ecx
    push edx
    mov eax,1
    db $0F,$A2 /// cpuid
    test edx,$10
    jz NoTSC
    mov edx,0
    mov TempCheck,edx
    NoTSC:
    pop edx
    pop ecx
    pop ebx
    pop eax
  end;
  CheckTSC:=(TempCheck=0);
end;

function TCpuData.CheckMSR: Boolean;
label
  NoMSR;
var
  TempCheck: dword;
begin
  TempCheck:=1;
  asm
    push eax
    push ebx
    push ecx
    push edx
    mov eax,1
    db $0F,$A2 /// cpuid
    test edx,$20
    jz NoMSR
    mov edx,0
    mov TempCheck,edx
    NoMSR:
    pop edx
    pop ecx
    pop ebx
    pop eax
  end;
  CheckMSR:=(TempCheck=0);
end;

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;
Ответить с цитированием