Autor Beitrag
DaBass
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 16.09.03 16:50 
[meta]Prozessortyp, Prozessor, herausfinden, auslesen[/meta]
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
type
  TCpuInfo = Record
    VendorIDString: String;
    Manufacturer: String;
    CPU_Name: String;
    PType: Byte;
    Family: Byte;
    Model: Byte;
    Stepping: Byte;
    Features: Cardinal;
  end;

 TPCInfo = class (TComponent)
   public
      function GetCPUModel(): String;
  end;

implementation

function TPCInfo.GetCPUModel(): String;
type
  regconvert = record
        bits0_7: Byte;
        bits8_15: Byte;
        bits16_23: Byte;
        bits24_31: Byte;
end;
var
  CPUInfo: TCpuInfo;
  TEBX, TEDX, TECX: Cardinal;
  TString, VString: String;
begin
  asm
    MOV  [CPUInfo.PType], 0
    MOV  [CPUInfo.Model], 0
    MOV  [CPUInfo.Stepping], 0
    MOV  [CPUInfo.Features], 0

    push eax
    push ebp
    push ebx
    push ecx
    push edi
    push edx
    push esi

    @@Check_80486:
      MOV  [CPUInfo.Family], 4
      MOV  TEBX, 0
      MOV  TEDX, 0
      MOV  TECX, 0
      PUSHFD
      POP  EAX
      MOV  ECX,  EAX
      XOR  EAX,  200000H
      PUSH EAX
      POPFD
      PUSHFD
      POP  EAX
      XOR  EAX,  ECX
      JE   @@DONE_CPU_TYPE

    @@Has_CPUID_Instruction:
      MOV  EAX,  0
      DB   0FH
      DB   0A2H
      MOV  TEBX, EBX
      MOV  TEDX, EDX
      MOV  TECX, ECX
      MOV  EAX,  1
      DB   0FH
      DB   0A2H
      MOV  [CPUInfo.Features], EDX
      MOV  ECX,  EAX
      AND  EAX,  3000H
      SHR  EAX,  12
      MOV  [CPUInfo.PType], AL
      MOV  EAX,  ECX
      AND  EAX,  0F00H
      SHR  EAX,  8
      MOV  [CPUInfo.Family], AL
      MOV  EAX,  ECX
      AND  EAX,  00F0H
      SHR  EAX,  4
      MOV  [CPUInfo.MODEL], AL
      MOV  EAX,  ECX
      AND  EAX,  000FH
      MOV  [CPUInfo.Stepping], AL

    @@DONE_CPU_TYPE:
      pop  esi
      pop  edx
      pop  edi
      pop  ecx
      pop  ebx
      pop  ebp
      pop  eax
  end;
  If (TEBX = 0and (TEDX = 0and (TECX = 0and (CPUInfo.Family = 4then
  begin
    CPUInfo.VendorIDString := 'Unbekannt';
    CPUInfo.Manufacturer := 'Unbekannt';
    CPUInfo.CPU_Name := 'Generic 486';
  end
  else
  begin
    With regconvert(TEBX) do
    begin
      TString := CHR(bits0_7) + CHR(bits8_15) + CHR(bits16_23) + CHR(bits24_31);
    end;
    With regconvert(TEDX) do
    begin
      TString := TString + CHR(bits0_7) + CHR(bits8_15) + CHR(bits16_23) + CHR(bits24_31);
    end;
    With regconvert(TECX) do
    begin
      TString := TString + CHR(bits0_7) + CHR(bits8_15) + CHR(bits16_23) + CHR(bits24_31);
    end;
    VString := TString;
    CPUInfo.VendorIDString := TString;
    If (CPUInfo.VendorIDString = 'GenuineIntel'then
    begin
      CPUInfo.Manufacturer := 'Intel';
      Case CPUInfo.Family of
        4Case CPUInfo.Model of
            1: CPUInfo.CPU_Name := 'Intel 486DX Prozessor';
            2: CPUInfo.CPU_Name := 'Intel 486SX Prozessor';
            3: CPUInfo.CPU_Name := 'Intel DX2 Prozessor';
            4: CPUInfo.CPU_Name := 'Intel 486 Prozessor';
            5: CPUInfo.CPU_Name := 'Intel SX2 Prozessor';
            7: CPUInfo.CPU_Name := 'Intel DX2 Prozessor';
            8: CPUInfo.CPU_Name := 'Intel DX4 Prozessor';
          else CPUInfo.CPU_Name := 'Intel 486 Prozessor';
          end;
        5: CPUInfo.CPU_Name := 'Pentium';
        6Case CPUInfo.Model of
            1: CPUInfo.CPU_Name := 'Pentium Pro         ';
            3: CPUInfo.CPU_Name := 'Pentium II (Model 3)';
            5: CPUInfo.CPU_Name := 'Pentium II (Model 5)';
            6: CPUInfo.CPU_Name := 'Intel Celeron (Model 6)';
            7: CPUInfo.CPU_Name := 'Pentium II (Model 7)';
            8: CPUInfo.CPU_Name := 'Pentium III (Model 8)';
          else CPUInfo.CPU_Name := Format('P6 (Model %d)', [CPUInfo.Model]);
          end;
      else CPUInfo.CPU_Name := Format('P%d', [CPUInfo.Family]);
      end;
    end
    else if (CPUInfo.VendorIDString = 'CyrixInstead'then
    begin
      CPUInfo.Manufacturer := 'Cyrix';
      Case CPUInfo.Family of
        5: CPUInfo.CPU_Name := 'Cyrix 6x86';
        6: CPUInfo.CPU_Name := 'Cyrix M2';
      else CPUInfo.CPU_Name := Format('%dx86', [CPUInfo.Family]);
      end;
    end
    else if (CPUInfo.VendorIDString = 'AuthenticAMD'then
    begin
      CPUInfo.Manufacturer := 'AMD';
      Case CPUInfo.Family of
        4: CPUInfo.CPU_Name := 'Am486 or Am5x86';
        5Case CPUInfo.Model of
            0: CPUInfo.CPU_Name := 'AMD-K5 (Model 0)';
            1: CPUInfo.CPU_Name := 'AMD-K5 (Model 1)';
            2: CPUInfo.CPU_Name := 'AMD-K5 (Model 2)';
            3: CPUInfo.CPU_Name := 'AMD-K5 (Model 3)';
            6: CPUInfo.CPU_Name := 'AMD-K6          ';
            7: CPUInfo.CPU_Name := 'AMD-K6 (Model 7)';
            8: CPUInfo.CPU_Name := 'AMD-K6-2 (Model 8)';
            9: CPUInfo.CPU_Name := 'AMD-K6-III (Model 9)';
          else CPUInfo.CPU_Name := 'Unknown AMD Model';
          end;
        6Case CPUInfo.Model of
            1: CPUInfo.CPU_Name := 'AMD Athlon (Model 1)';
            2: CPUInfo.CPU_Name := 'AMD Athlon (Model 2)';
            3: CPUInfo.CPU_Name := 'AMD Duron           ';
            4: CPUINfo.CPU_Name := 'AMD Athlon (Model 4)';
          else CPUInfo.CPU_Name := 'Unknown AMD Chip';
          end;
        end;
      end
      else
      begin
        CPUInfo.VendorIDString := TString;
        CPUInfo.Manufacturer := 'Unbekannt';

        CPUInfo.CPU_Name := 'Unbekannt';
      end;
    end;
    Result := CPUInfo.CPU_Name;
end;


Moderiert von user profile iconChristian S.: Meta-Tags und - Wörter eingefügt


Zuletzt bearbeitet von DaBass am Mi 17.09.03 16:04, insgesamt 2-mal bearbeitet