Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с GetSystemInfo... 
:(
    Опции темы
Rey
  Дата 11.10.2005, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 7.10.2004
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Пол инета облазил в поисках возможных значений поля _SYSTEM_INFO.wProcessorLevel. В хелпе Дельфи и MSDN есть только такая информация (для intel'а):

3 - Intel 80386
4 - Intel 80486
5 - Pentium

Может кто знает остальные возможные значения и их описания…
К примеру, на моем компе выдается значение 15… smile
PM MAIL ICQ   Вверх
Rrader
Дата 12.10.2005, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 29
Всего: 191



Значение 6 - Pentium Pro smile

А у тебя процессор поддерживает HT?


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
_hunter
Дата 12.10.2005, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98



а в MSDN-е такой информации быть и не должно:
Цитата
If wProcessorArchitecture is PROCESSOR_ARCHITECTURE_INTEL, wProcessorLevel is defined by the CPU vendor.

иди к дяде Интелу...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Rrader
Дата 14.10.2005, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 29
Всего: 191



Скажу вот что. smile У меня GetSystemInfo также возвращает значение 15.
Связано это вот с чем. Функция GetSystemInfo при многопроцессоности Вашего компьютера объединит все процессоры в один. Многопроцессорным считается и проц с технологией HT. smile
У меня, допустим, система определила наличие 3 процессоров. Для кадого из них значения свои.
Вот только как получить нужное, я пока не додумался. smile


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
Rey
Дата 14.10.2005, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 7.10.2004
Где: Санкт-Петербург

Репутация: нет
Всего: нет



У меня выводится что процессор один, но от этого не легче... smile
Так ничего и не нашел ни у дяди Интела, ни у тети Майкрасофт... smile
Уже и не знаю где искать... smile
PM MAIL ICQ   Вверх
Rennigth
Дата 14.10.2005, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 8
Всего: 76



это конечно не GetSystemInfo, но может этим обойдешься: (чье непомню, афтар несерчай если что...):
Код
unit uCpuID;

interface
uses Windows, Mmsystem, Sysutils, Math, Dialogs;
type
    TCpuRec=record
       Name:string[128];
       Vendor:string[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 GetVendorString:string;
      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 GetExtendedCpuName:string;
      function GetExtendedL1DCache:word;
      function GetExtendedL1ICache:word;
      function GetExtendedL2Cache:word;

      function CheckCeleron:Boolean;
      function CheckPentiumIII:Boolean;
      function CheckXeon:Boolean;
      function CheckPentium4:Boolean;
      function CheckIthanium:Boolean;

//****Aici am conrectat****
      function IntelP5N:string;
      function IntelP6N:string;
//****Pana aici****
      function AMDK5N:string;
      function Cyrix686N:string;
      function GenericCpuN:string;
      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.GetVendorString:string;  
var s1,s2,s3:array[0..3] of char;  
    TempVendor:string;  
    i:integer;  
begin  
asm  
  push eax  
  push ebx  
  push ecx  
  push edx  
  mov eax,0  
  db $0F,$A2                /// cpuid  
  mov s1,ebx  
  mov s2,edx  
  mov s3,ecx  
  pop edx  
  pop ecx  
  pop ebx  
  pop eax  
end;  
TempVendor:='';  
for i:=0 to 3 do  
  TempVendor:=TempVendor+s1[i];  
for i:=0 to 3 do  
  TempVendor:=TempVendor+s2[i];  
for i:=0 to 3 do  
  TempVendor:=TempVendor+s3[i];  
GetVendorString:=TempVendor;  
end;  
function TCpuData.GetCPUFrequency:word;  
var TimeStart:integer;  
    TimeStop:integer;  
    StartTicks:dword;  
    EndTicks:dword;  
    TotalTicks:dword;  
    cpuSpeed:dword;  
    NeverExit:Boolean;  
begin  
TimeStart:=0;  
TimeStop:=0;  
StartTicks:=0;  
EndTicks:=0;  
TotalTicks:=0;  
cpuSpeed:=0;  
NeverExit:=True;  
TimeStart:=timeGetTime;  
while NeverExit do  
  begin  
  TimeStop:=timeGetTime;  
  if ((TimeStop-TimeStart)>1) then  
      begin  
       asm  
        xor eax,eax  
        xor ebx,ebx  
        xor ecx,ecx  
        xor edx,edx  
        db $0F,$A2                /// cpuid  
        db $0F,$31                /// rdtsc  
        mov StartTicks,eax  
       end;  
      Break;  
      end;  
  end;  
  TimeStart:=TimeStop;  
  while NeverExit do  
   begin  
   TimeStop:=timeGetTime;  
   if ((TimeStop-TimeStart)>1000) then  
       begin  
        asm  
         xor eax,eax  
         xor ebx,ebx  
         xor ecx,ecx  
         xor edx,edx  
         db $0F,$A2                /// cpuid  
         db $0F,$31                /// rdtsc  
         mov EndTicks,eax  
        end;  
        Break;  
       end;  
    end;  
   TotalTicks:=EndTicks-StartTicks;  
   cpuSpeed:=TotalTicks div 1000000;  
   GetCPUFrequency:=cpuSpeed;  
end;  
procedure TCpuData.GetFMS(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,1  
  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.GetMaxCpuId:dword;  
var TempMax:dword;  
begin  
asm  
  push eax  
  push ebx  
  push ecx  
  push edx  
  mov eax,0  
  db $0F,$A2                /// cpuid  
  mov TempMax,eax  
  pop edx  
  pop ecx  
  pop ebx  
  pop eax  
end;  
GetMaxCpuId:=TempMax;  
end;  
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;  

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;  
function TCpuData.GetExtendedL1DCache:word;  
var L1D,TempL1D:dword;  
    BinArray:array[0..31] of byte;  
    i,p:integer;  
begin  
asm  
  push eax  
  push ebx  
  push ecx  
  push edx  
  mov eax,$80000005  
  mov ebx,0  
  mov ecx,0  
  mov edx,0  
  db $0F,$A2                /// cpuid  
  mov L1D,ecx  
  pop edx  
  pop ecx  
  pop ebx  
  pop eax  
end;  
for i:=0 to 31 do  
  begin  
   BinArray[i]:=L1D mod 2;  
   L1D:=L1D div 2;  
  end;  
TempL1D:=0;  
p:=0;  
for i:=24 to 31 do  
  begin  
   TempL1D:=TempL1D+(BinArray[i]*StrToInt(FloatToStr(Power(2,p))));  
   inc(p);  
  end;  
GetExtendedL1DCache:=TempL1D;  
end;  
function TCpuData.GetExtendedL1ICache:word;  
var L1I,TempL1I:dword;  
    BinArray:array[0..31] of byte;  
    i,p:integer;  
begin  
asm  
  push eax  
  push ebx  
  push ecx  
  push edx  
  mov eax,$80000005  
  mov ebx,0  
  mov ecx,0  
  mov edx,0  
  db $0F,$A2                /// cpuid  
  mov L1I,edx  
  pop edx  
  pop ecx  
  pop ebx  
  pop eax  
end;  
for i:=0 to 31 do  
  begin  
   BinArray[i]:=L1I mod 2;  
   L1I:=L1I div 2;  
  end;  
TempL1I:=0;  
p:=0;  
for i:=24 to 31 do  
  begin  
   TempL1I:=TempL1I+(BinArray[i]*StrToInt(FloatToStr(Power(2,p))));  
   inc(p);  
  end;  
GetExtendedL1ICache:=TempL1I;  
end;  
function TCpuData.GetExtendedL2Cache:word;  
var L2,TempL2:dword;  
    BinArray:array[0..31] of byte;  
    i,p:integer;  
begin  
asm  
  push eax  
  push ebx  
  push ecx  
  push edx  
  mov eax,$80000006  
  mov ebx,0  
  mov ecx,0  
  mov edx,0  
  db $0F,$A2                /// cpuid  
  mov L2,ecx  
  pop edx  
  pop ecx  
  pop ebx  
  pop eax  
end;  
for i:=0 to 31 do  
  begin  
   BinArray[i]:=L2 mod 2;  
   L2:=L2 div 2;  
  end;  
TempL2:=0;  
p:=0;  
for i:=16 to 31 do  
  begin  
   TempL2:=TempL2+(BinArray[i]*StrToInt(FloatToStr(Power(2,p))));  
   inc(p);  
  end;  
GetExtendedL2Cache:=TempL2;  
end;  
function TCpuData.CheckCeleron:Boolean;  
var BId:byte;  
begin  
asm  
  push eax  
  push ebx  
  push ecx  
  push edx  
  mov eax,1  
  db $0F,$A2                /// cpuid  
  mov BId,bl  
  pop edx  
  pop ecx  
  pop ebx  
    
  pop eax  
end;  
CheckCeleron:=(BId=$1);  
end;  
function TCpuData.CheckPentiumIII:Boolean;  
var BId:byte;  
begin  
CheckPentiumIII:=(CheckMMX and CheckSSE);  
end;  
function TCpuData.CheckXeon:Boolean;  
var BId:byte;  
begin  
asm  
  push eax  
  push ebx  
  push ecx  
  push edx  
  mov eax,1  
  db $0F,$A2                /// cpuid  
  mov BId,bl  
  pop edx  
  pop ecx  
  pop ebx  
  pop eax  
end;  
CheckXeon:=(BId=$3);  
end;  
function TCpuData.CheckPentium4:Boolean;  
var BId:byte;  
begin  
asm  
  push eax  
  push ebx  
  push ecx  
  push edx  
  mov eax,1  
  db $0F,$A2                /// cpuid  
  mov BId,bl  
  pop edx  
  pop ecx  
  pop ebx  
  pop eax  
end;  
CheckPentium4:=(BId=$8);  
end;  
function TCpuData.CheckIthanium:Boolean;  
var res:dword;  
    BinArray:array[0..31] of byte;  
    i:byte;  
begin  
asm  
  push eax  
  push ebx  
  push ecx  
  push edx  
  mov eax,1  
  db $0F,$A2                /// cpuid  
  mov res,edx  
  pop edx  
  pop ecx  
  pop ebx  
  pop eax  
end;  
for i:=0 to 31 do  
  begin  
   BinArray[i]:=res mod 2;  
   res:=res div 2;  
  end;  
CheckIthanium:=(CheckPentium4 and (BinArray[30]=1));  
end;  
function TCpuData.IntelP5N:string;  
begin  

If CheckMMX then IntelP5N:='Intel Pentium(r) MMX(tm)'  
else IntelP5N:='Intel Pentium(r)';  
end;  
function TCpuData.IntelP6N:string;  
begin  
if CheckCeleron then IntelP6N:='Intel Celeron(r)'  
else  
if CheckPentiumIII then IntelP6N:='Intel Pentium(r) III'  
else  
if CheckXeon then IntelP6N:='Intel Pentium(r) III Xeon(tm)'  
else  
if not CheckMMX then IntelP6N:='Intel Pentium(r) PRO'  
else IntelP6N:='Intel Pentium(r) II';    
end;  
function TCpuData.AMDK5N:string;  
var Family,Model,Stepping:byte;  
begin  
GetFMS(Family,Model,Stepping);  
if Model=0 then AMDK5N:='AMD K5'  
else AMDK5N:=GetExtendedCpuName;  
end;  
function TCpuData.Cyrix686N:string;  
begin  
if CpuData.GetMaxExtendedFunctions>0 then Cyrix686N:=GetExtendedCpuName  
else  
if CheckMMX then Cyrix686N:='VIA Cyrix 6x86MII'  
else  
Cyrix686N:='VIA Cyrix 6x86';  
end;  
function TCpuData.GenericCpuN:string;  
var SysInfo:TSystemInfo;  
begin  
GetSystemInfo(SysInfo);  
if SysInfo.dwProcessorType=386  
    then GenericCpuN:='Generic 386 CPU'  
else  
if SysInfo.dwProcessorType=486  
    then GenericCpuN:='Generic 486 CPU'  
else  
if SysInfo.dwProcessorType=586  
    then GenericCpuN:='Pentium Class CPU'  
else GenericCpuN:='Unknown CPU';  
end;  
function TCpuData.P5CacheL1DI:word;  
begin  
if CheckMMX then P5CacheL1DI:=16  
else P5CacheL1DI:=8;  
end;  
function TCpuData.P6CacheL1DI:word;  
begin  
if not CheckMMX then P6CacheL1DI:=8  
else P6CacheL1DI:=16;  
end;  
function TCpuData.P6CacheL2:word;  
var Family,Model,Stepping:byte;  
begin  
if CheckCeleron then P6CacheL2:=128  
else  
if CheckPentiumIII then begin  
                          GetFMS(Family,Model,Stepping);  
                          if Model=7 then P6CacheL2:=512  
                          else if Model=8 then P6cacheL2:=256  
                          else P6CacheL2:=512;  
                         end  
else if not CheckMMX then P6CacheL2:=512  
else P6CacheL2:=512;  
end;  
function TCpuData.AuthenticAMD:TCpuRec;  
var Family,Model,Stepping:byte;  
    EFamily,EModel,EStepping:byte;  
begin  
GetFMS(Family,Model,Stepping);  
If Family=4 then begin  
                   AuthenticAMD.Name:='AMD 486';  
                   AuthenticAMD.Vendor:=GetVendorString;  
                   AuthenticAMD.Frequency:=0;  
                   AuthenticAMD.Family:=Family;  
                   AuthenticAMD.Model:=Model;  
                   AuthenticAMD.Stepping:=Stepping;  
                   AuthenticAMD.L1DCache:=8;  
                   AuthenticAMD.L1ICache:=8;  
                   AuthenticAMD.L2Cache:=0;  
                  end  
else  
if Family=5 then begin  
                   if GetMaxExtendedFunctions>4 then  
                      begin  
                       AuthenticAMD.Name:=GetExtendedCpuName;  
                       AuthenticAMD.Vendor:=GetVendorString;  
                       AuthenticAMD.Frequency:=GetCPUFrequency;  
                       GetExtendedFMS(EFamily,EModel,EStepping);  
                       AuthenticAMD.Family:=EFamily;  
                       AuthenticAMD.Model:=EModel;  
                       AuthenticAMD.Stepping:=EStepping;  
                       AuthenticAMD.L1DCache:=GetExtendedL1DCache;  
                       AuthenticAMD.L1ICache:=GetExtendedL1ICache;  
                       AuthenticAMD.L2Cache:=0;  
                      end  
                   else  
                   begin  
                    AuthenticAMD.Name:=AMDK5N;  
                    AuthenticAMD.Vendor:=GetVendorString;  
                    AuthenticAMD.Frequency:=GetCPUFrequency;  
                    AuthenticAMD.Family:=Family;  
                    AuthenticAMD.Model:=Model;  
                    AuthenticAMD.Stepping:=Stepping;  
                    AuthenticAMD.L1DCache:=16;  
                    AuthenticAMD.L1ICache:=16;  
                    AuthenticAMD.L2Cache:=0;  
                   end;  
                  end  
else if family>5 then  
                 begin  
                  AuthenticAMD.Name:=GetExtendedCpuName;  
                  AuthenticAMD.Name:=GetExtendedCpuName;  
                  AuthenticAMD.Vendor:=GetVendorString;  
                  AuthenticAMD.Frequency:=GetCPUFrequency;  
                  GetExtendedFMS(EFamily,EModel,EStepping);  
                  AuthenticAMD.Family:=EFamily;  
                  AuthenticAMD.Model:=EModel;  
                  AuthenticAMD.Stepping:=EStepping;  


Это сообщение отредактировал(а) Girder - 14.10.2005, 16:07


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Greblin
Дата 15.10.2005, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 30.5.2005
Где: Москва

Репутация: нет
Всего: нет



У меня есть довольно много по этой теме но тоже не всё (мой Атлон не определяет). И к сожалению на C++
Код

void __fastcall TForm1::AboutProcessor(bool NT)
{TSystemInfo si;
int HB;
GetSystemInfo(&si);
LProcNum->Caption = IntToStr(si.dwNumberOfProcessors);
if (NT == true) //если WinNT
  {switch(si.wProcessorArchitecture)
    {case PROCESSOR_ARCHITECTURE_INTEL:
      LProcArch->Caption = "Intel";
      switch(si.wProcessorLevel)
         {case 3: LProcVer->Caption = "80386"; break;
         case 4:  LProcVer->Caption = "80486"; break;
         case 5:  LProcVer->Caption = "Pentium"; break;
         case 6:  HB = HIBYTE(si.wProcessorRevision); //старший байт версии
                  switch(HB)
                  {case 1:   LProcVer->Caption = "Pentium PRO"; break;
                  case 3, 5: LProcVer->Caption = "Pentium 2"; break;
                  case 6:    LProcVer->Caption = "Celeron"; break;
                  case 7, 8, 10, 11: LProcVer->Caption = "Pentium 3"; break;
                  default:   LProcVer->Caption = "неизвестна"; break;
                  }
                  break;
         case 15: LProcVer->Caption = "Pentium 4"; break;
         default: LProcVer->Caption = "неизвестна"; break;
         }
    break;
    case PROCESSOR_ARCHITECTURE_ALPHA:
      LProcArch->Caption = "ALPHA";
      switch(si.wProcessorLevel)
        {case 21064: LProcVer->Caption = "21064"; break;
        case 21066:  LProcVer->Caption = "21066"; break;
        case 21164:  LProcVer->Caption = "21164"; break;
        default: LProcVer->Caption = "неизвестна"; break;
        }
    break;
    case PROCESSOR_ARCHITECTURE_MIPS:
      LProcArch->Caption = "MIPS";
      if (si.wProcessorLevel == 0004) LProcVer->Caption = "R4000";
      else LProcVer->Caption = "неизвестна";
    break;
    case PROCESSOR_ARCHITECTURE_PPC:
      LProcArch->Caption = "PPC";
      switch(si.wProcessorLevel)
        {case 1: LProcVer->Caption = "601"; break;
        case 3:  LProcVer->Caption = "603"; break;
        case 4:  LProcVer->Caption = "604"; break;
        case 6:  LProcVer->Caption = "603+"; break;
        case 9:  LProcVer->Caption = "604+"; break;
        case 20: LProcVer->Caption = "620"; break;
        default: LProcVer->Caption = "неизвестна"; break;
        }
    break;
    default: LProcArch->Caption = "неизвестна";
             LProcVer->Caption = "неизвестна";
             break;
    }
  }
else //если Win 9.x
  {switch(si.dwProcessorType)
    {case PROCESSOR_INTEL_386:  LProcArch->Caption = "Intel";
                                LProcVer->Caption = "80386";
                                break;
    case PROCESSOR_INTEL_486:   LProcArch->Caption = "Intel";
                                LProcVer->Caption = "80486";
                                break;
    case PROCESSOR_INTEL_PENTIUM:  LProcArch->Caption = "Intel";
                                   LProcVer->Caption = "Pentium";
                                   break;
    default: LProcArch->Caption = "неизвестна";
             LProcVer->Caption = "неизвестна";
             break;
    }
  }
}


Это сообщение отредактировал(а) Greblin - 15.10.2005, 14:17
PM MAIL WWW ICQ   Вверх
RA
Дата 16.10.2005, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 7
Всего: 115



Rennigth А немогбы ты привести полный код. Просто посмотрев этот я вижу что там нехватает end-ов, вот я и подумал что может вместе с ними ты ещё пол кода забыл. smile
PM   Вверх
Rennigth
Дата 17.10.2005, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 8
Всего: 76



RAdmin
длинны сообщения нехватило.
продлжение:

Код

                       AuthenticAMD.L1DCache:=GetExtendedL1DCache;  
                       AuthenticAMD.L1ICache:=GetExtendedL1ICache;  
                       AuthenticAMD.L2Cache:=0;  
                      end  
                   else  
                   begin  
                    AuthenticAMD.Name:=AMDK5N;  
                    AuthenticAMD.Vendor:=GetVendorString;  
                    AuthenticAMD.Frequency:=GetCPUFrequency;  
                    AuthenticAMD.Family:=Family;  
                    AuthenticAMD.Model:=Model;  
                    AuthenticAMD.Stepping:=Stepping;  
                    AuthenticAMD.L1DCache:=16;  
                    AuthenticAMD.L1ICache:=16;  
                    AuthenticAMD.L2Cache:=0;  
                   end;  
                  end  
else if family>5 then  
                 begin  
                  AuthenticAMD.Name:=GetExtendedCpuName;  
                  AuthenticAMD.Name:=GetExtendedCpuName;  
                  AuthenticAMD.Vendor:=GetVendorString;  
                  AuthenticAMD.Frequency:=GetCPUFrequency;  
                  GetExtendedFMS(EFamily,EModel,EStepping);  
                  AuthenticAMD.Family:=EFamily;  
                  AuthenticAMD.Model:=EModel;  
                  AuthenticAMD.Stepping:=EStepping;  
                  AuthenticAMD.L1DCache:=GetExtendedL1DCache;  
                  AuthenticAMD.L1ICache:=GetExtendedL1ICache;  
                  AuthenticAMD.L2Cache:=GetExtendedL2Cache;  
                 end;  


end;  
function TCpuData.GenuineIntel:TCpuRec;  
var Family,Model,Stepping:byte;  
begin  
GetFMS(Family,Model,Stepping);  
if Family=4 then begin  
                   GenuineIntel.Name:='Intel 486';  
                   GenuineIntel.Vendor:=GetVendorString;  
                   GenuineIntel.Frequency:=0;  
                   GenuineIntel.Family:=Family;  
                   GenuineIntel.Model:=Model;  
                   GenuineIntel.Stepping:=Stepping;  
                   GenuineIntel.L1DCache:=8;  
                   GenuineIntel.L1ICache:=8;  
                   GenuineIntel.L2Cache:=0;  
                  end  
else  
if Family=5 then begin  
                   GenuineIntel.Name:=IntelP5N;  
                   GenuineIntel.Vendor:=GetVendorString;  
                   GenuineIntel.Frequency:=GetCPUFrequency;  
                   GenuineIntel.Family:=Family;  
                   GenuineIntel.Model:=Model;  
                   GenuineIntel.Stepping:=Stepping;  
                   GenuineIntel.L1DCache:=P5CacheL1DI;  
                   GenuineIntel.L1ICache:=P5CacheL1DI;  
                   GenuineIntel.L2Cache:=0;  
                  end  
else  
if Family=6 then begin  
                   GenuineIntel.Name:=IntelP6N;  
                   GenuineIntel.Vendor:=GetVendorString;  
                   GenuineIntel.Frequency:=GetCPUFrequency;  
                   GenuineIntel.Family:=Family;  
                   GenuineIntel.Model:=Model;  
                   GenuineIntel.Stepping:=Stepping;  
                   GenuineIntel.L1DCache:=P6CacheL1DI;  
                   GenuineIntel.L1ICache:=P6CacheL1DI;  
                   GenuineIntel.L2Cache:=P6CacheL2;  
                  end  
else  
if Family=$F then begin  
                    if CheckPentium4 then  
                     begin  
                      GenuineIntel.Name:='Intel Pentium(r) 4';  
                      GenuineIntel.Vendor:=GetVendorString;  
                      GenuineIntel.Frequency:=GetCPUFrequency;  
                      GenuineIntel.Family:=32;  
                      GenuineIntel.Model:=Model;  
                      GenuineIntel.Stepping:=Stepping;  
                      GenuineIntel.L1DCache:=8;  
                      GenuineIntel.L1ICache:=12;  
                      GenuineIntel.L2Cache:=256;  
                     end  
                    else if CheckIthanium then  
                      begin  
                       GenuineIntel.Name:='Intel Ithanium';  
                       GenuineIntel.Vendor:=GetVendorString;  
                       GenuineIntel.Frequency:=GetCPUFrequency;  
                       GenuineIntel.Family:=64;  
                       GenuineIntel.Model:=Model;  
                       GenuineIntel.Stepping:=Stepping;  
                       GenuineIntel.L1DCache:=0;  
                       GenuineIntel.L1ICache:=0;  
                       GenuineIntel.L2Cache:=0;  
                      end;  
                     end;  
end;  
function TCpuData.CyrixInstead:TCpuRec;  
var Family,Model,Stepping:byte;  
    EFamily,EModel,EStepping:byte;  
begin  
GetFMS(Family,Model,Stepping);  
if Family=4 then begin  
                   CyrixInstead.Name:='VIA Cyrix 4x86';  
                   CyrixInstead.Vendor:=GetVendorString;  
                   CyrixInstead.Frequency:=0;  
                   CyrixInstead.Family:=Family;  
                   CyrixInstead.Model:=Model;  
                   CyrixInstead.Stepping:=Stepping;  
                   CyrixInstead.L1DCache:=8;  
                   CyrixInstead.L1ICache:=8;  
                   CyrixInstead.L2Cache:=0;  
                  end  
else  
if Family=5 then begin  
                   CyrixInstead.Name:='VIA Cyrix 5x86';  
                   CyrixInstead.Vendor:=GetVendorString;  
                   CyrixInstead.Frequency:=GetCPUFrequency;  
                   CyrixInstead.Family:=Family;  
                   CyrixInstead.Model:=Model;  
                   CyrixInstead.Stepping:=Stepping;  
                   CyrixInstead.L1DCache:=8;  
                   CyrixInstead.L1ICache:=8;  
                   CyrixInstead.L2Cache:=0;  
                  end  
else begin  
       if GetMaxExtendedFunctions>0 then  
           Begin  
            CyrixInstead.Name:=GetExtendedCpuName;  
            CyrixInstead.Vendor:=GetVendorString;  
            CyrixInstead.Frequency:=GetCPUFrequency;  
            GetExtendedFMS(EFamily,EModel,EStepping);  
            CyrixInstead.Family:=EFamily;  
            CyrixInstead.Model:=EModel;  
            CyrixInstead.Stepping:=EStepping;  
            CyrixInstead.L1DCache:=GetExtendedL1DCache;  
            CyrixInstead.L1ICache:=GetExtendedL1ICache;  
            CyrixInstead.L2Cache:=GetExtendedL2Cache;  
           end  
       else begin  
             CyrixInstead.Name:=Cyrix686N;  
             CyrixInstead.Vendor:=GetVendorString;  
             CyrixInstead.Frequency:=GetCPUFrequency;  
             CyrixInstead.Family:=Family;  
             CyrixInstead.Model:=Model;  
             CyrixInstead.Stepping:=Stepping;  
             CyrixInstead.L1DCache:=32;  
             CyrixInstead.L1ICache:=32;  
             CyrixInstead.L2Cache:=0;  
            end;  
     end;  
end;  

function TCpuData.GenericCPU:TCpuRec;  
var Family,Model,Stepping:byte;  
    EFamily,EModel,EStepping:byte;  
begin
if not GetCPUIDSupport then
    begin
     MessageDlg('This CPU does not support the CPUID instruction!!!',mtWarning,
     [mbOk],0);
     GenericCPU.Name:='Unidentified CPU';
     GenericCPU.Vendor:='Unidentified';
     GenericCPU.Frequency:=0;
     GenericCPU.Family:=-1;
     GenericCPU.Model:=-1;
     GenericCPU.Stepping:=-1;
     GenericCPU.L1DCache:=0;
     GenericCPU.L1ICache:=0;
     GenericCPU.L2Cache:=0;
    end
else
begin
  GetFMS(Family,Model,Stepping);
if GetMaxExtendedFunctions>0 then
     begin
      GenericCPU.Name:=GetExtendedCPUName;
      GenericCPU.Vendor:=GetVendorString;
      GenericCPU.Frequency:=GetCPUFrequency;
      CpuData.GetExtendedFMS(EFamily,EModel,EStepping);
      GenericCPU.Family:=EFamily;
      GenericCPU.Model:=EFamily;
      GenericCPU.Stepping:=EStepping;
      GenericCPU.L1DCache:=GetExtendedL1DCache;
      GenericCPU.L1ICache:=GetExtendedL1ICache;
      GenericCPU.L2Cache:=GetExtendedL2Cache;
     end
else begin
       GenericCPU.Name:=GenericCpuN;
       GenericCPU.Vendor:=GetVendorString;
       if Family<=4 then GenericCPU.Frequency:=0
       else GenericCPU.Frequency:=GetCPUFrequency;
       GenericCPU.Family:=Family;
       GenericCPU.Model:=Model;
       GenericCPU.Stepping:=Stepping;
       GenericCPU.L1DCache:=0;
       GenericCPU.L1ICache:=0;
       GenericCPU.L2Cache:=0;
      end;
end;
end;
end.

(*

unit ExpandCPUInfo;

interface

type

TCPUInfo = packed record
IDString : array [0..11] of Char;
Stepping : Integer;
Model    : Integer; 
Family   : Integer; 
FPU, 
VirtualModeExtensions, 
DebuggingExtensions, 
PageSizeExtensions, 
TimeStampCounter, 
K86ModelSpecificRegisters, 
MachineCheckException, 
CMPXCHG8B, 
APIC, 
MemoryTypeRangeRegisters, 
GlobalPagingExtension, 
ConditionalMoveInstruction, 
MMX     : Boolean; 
SYSCALLandSYSRET, 
FPConditionalMoveInstruction, 
AMD3DNow : Boolean; 
CPUName : String; 
end;
{информация об идентификации процессора}
function ExistCPUID:Boolean;
function CPUIDInfo(out info: TCPUInfo):Boolean;
{инф-я о технологии процессора}
function ExistMMX:Boolean;
function Exist3DNow:Boolean;
function ExistKNI:Boolean;
{------------------------}
procedure EMMS;
procedure FEMMS;
procedure PREFETCH(p: Pointer); register;

implementation

function ExistCPUID : Boolean;
asm

pushfd
pop eax
mov ebx, eax
xor eax, 00200000h
push eax
popfd
pushfd
pop ecx
mov eax,0
cmp ecx, ebx
jz @NO_CPUID
inc eax
@NO_CPUID:
end;

function CPUIDInfo(out info: TCPUIDInfo):Boolean;

function ExistExtendedCPUIDFunctions:Boolean;
asm
mov eax,080000000h
db $0F,$A2
end;
var

name : array [0..47] of Char;
p : Pointer;
begin

if ExistCPUID then asm
jmp @Start
@BitLoop:
mov al,dl
and al,1
mov [edi],al
shr edx,1
inc edi
loop @BitLoop
ret
@Start:
mov edi,info
mov eax,0
db $0F,$A2
mov [edi],ebx
mov [edi+4],edx
mov [edi+8],ecx
mov eax,1
db $0F,$A2
mov ebx,eax
and eax,0fh;
mov [edi+12],eax;
shr ebx,4
mov eax,ebx
and eax,0fh
mov [edi+12+4],eax
shr ebx,4
mov eax,ebx
and eax,0fh
mov [edi+12+8],eax
add edi,24
mov ecx,6
call @BitLoop
shr edx,1
mov ecx,3
call @BitLoop
shr edx,2
mov ecx,2
call @BitLoop
shr edx,1
mov ecx,1
call @BitLoop
shr edx,7
mov ecx,1
call @BitLoop
mov p,edi
end;
if (info.IDString = 'AuthenticAMD') and ExistExtendedCPUIDFunctions then begin
asm
mov edi,p
mov eax,080000001h
db $0F,$A2
mov eax,edx
shr eax,11
and al,1
mov [edi],al
mov eax,edx
shr eax,16
and al,1
mov [edi+1],al
mov eax,edx
shr eax,31
and al,1
mov [edi+2],al
lea edi,name
mov eax,0
mov [edi],eax
mov eax,080000000h
db $0F,$A2
cmp eax,080000004h
jl @NoString
mov eax,080000002h
db $0F,$A2
mov [edi],eax
mov [edi+4],ebx
mov [edi+8],ecx
mov [edi+12],edx
add edi,16
mov eax,080000003h
db $0F,$A2
mov [edi],eax
mov [edi+4],ebx
mov [edi+8],ecx
mov [edi+12],edx
add edi,16
mov eax,080000004h
db $0F,$A2
mov [edi],eax
mov [edi+4],ebx
mov [edi+8],ecx
mov [edi+12],edx
@NoString:
end;
info.CPUName:=name;
end else with info do begin
SYSCALLandSYSRET:=False;
FPConditionalMoveInstruction:=False;
AMD3DNow:=False;
CPUName:='';
end;
Result:=ExistCPUID;
end;

function ExistMMX:Boolean;
var

info : TCPUIDInfo;
begin

if CPUIDInfo(info) then
Result:=info.MMX
else
Result:=False;
end;

function Exist3DNow:Boolean;
var

info : TCPUIDInfo;
begin

if CPUIDInfo(info) then
Result:=info.AMD3DNow
else
Result:=False;
end;

function ExistKNI:Boolean;
begin

Result:=False;
end;

procedure EMMS;
asm

db $0F,$77
end;

procedure FEMMS;
asm

db $0F,$03
end;

procedure PREFETCH(p: Pointer); register;
asm

// PREFETCH byte ptr [eax]
end;

end.*)





Это сообщение отредактировал(а) Rennigth - 17.10.2005, 09:11


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
RA
Дата 17.10.2005, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 7
Всего: 115



Rennigth Ок. Спасибо может какнить пригодится. smile


Цитата(Rennigth @ 17.10.2005, 09:06)
длинны сообщения нехватило.

Такие вещи лутше прикреплять к сообщению.

PM   Вверх
Rennigth
Дата 17.10.2005, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 8
Всего: 76



Цитата(RAdmin @ 17.10.2005, 10:35)
Такие вещи лутше прикреплять к сообщению.

а я не знаю как smile, может нехватает кол-ва сообщений...


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Alex
Дата 17.10.2005, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 6
Всего: 162



Цитата(Rennigth @ 17.10.2005, 11:40)
а я не знаю как , может нехватает кол-ва сообщений...

Нажми на кнопку "ответ" в теме и все поймешь...


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Rennigth
Дата 17.10.2005, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 8
Всего: 76



Alex
хе, спс, буду знать smile


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Rey
Дата 17.10.2005, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 7.10.2004
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Всем спасибо за помощь... smile
Как раз, то что надо... smile
Но, все равно, если у кого нибудь есть еще какая нибудь информация по этому вопросу, если не сложно напишите... smile
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0708 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.