4 void CPU_Identify(DATA_CPUID *id)
\r
6 uint eflags0, eflags1;
\r
7 uint cpuidbuf[5]; //EAX-EBX-EDX-ECX-0x00000000
\r
10 cpuidbuf[4] = 0x00000000;
\r
12 eflags0 = IO_Load_EFlags();
\r
13 IO_Store_EFlags(eflags0 | 0x00200000);
\r
14 eflags1 = IO_Load_EFlags();
\r
15 IO_Store_EFlags(eflags0);
\r
17 if((eflags1 | 0xffdfffff) == 0xffffffff){
\r
20 id->max = cpuidbuf[0];
\r
21 sprintf(id->vendor, "%s", &cpuidbuf[1]);
\r
25 if((cpuidbuf[2] & ~1 << 0) != 0){
\r
30 if((cpuidbuf[2] & ~(1 << 1)) != 0){
\r
35 if((cpuidbuf[2] & ~(1 << 2)) != 0){
\r
40 if((cpuidbuf[2] & ~(1 << 3)) != 0){
\r
45 if((cpuidbuf[2] & ~(1 << 4)) != 0){
\r
50 if((cpuidbuf[2] & ~(1 << 5)) != 0){
\r
55 if((cpuidbuf[2] & ~(1 << 6)) != 0){
\r
60 if((cpuidbuf[2] & ~(1 << 7)) != 0){
\r
65 if((cpuidbuf[2] & ~(1 << 8)) != 0){
\r
70 if((cpuidbuf[2] & ~(1 << 9)) != 0){
\r
75 if((cpuidbuf[2] & ~(1 << 11)) != 0){
\r
80 if((cpuidbuf[2] & ~(1 << 12)) != 0){
\r
85 if((cpuidbuf[2] & ~(1 << 13)) != 0){
\r
90 if((cpuidbuf[2] & ~(1 << 14)) != 0){
\r
95 if((cpuidbuf[2] & ~(1 << 15)) != 0){
\r
100 if((cpuidbuf[2] & ~(1 << 16)) != 0){
\r
105 if((cpuidbuf[2] & ~(1 << 17)) != 0){
\r
110 if((cpuidbuf[2] & ~(1 << 18)) != 0){
\r
115 if((cpuidbuf[2] & ~(1 << 19)) != 0){
\r
120 if((cpuidbuf[2] & ~(1 << 21)) != 0){
\r
125 if((cpuidbuf[2] & ~(1 << 22)) != 0){
\r
130 if((cpuidbuf[2] & ~(1 << 23)) != 0){
\r
135 if((cpuidbuf[2] & ~(1 << 24)) != 0){
\r
140 if((cpuidbuf[2] & ~(1 << 25)) != 0){
\r
145 if((cpuidbuf[2] & ~(1 << 26)) != 0){
\r
150 if((cpuidbuf[2] & ~(1 << 27)) != 0){
\r
155 if((cpuidbuf[2] & ~(1 << 28)) != 0){
\r
160 if((cpuidbuf[2] & ~(1 << 29)) != 0){
\r
165 if((cpuidbuf[2] & ~(1 << 31)) != 0){
\r
171 if((cpuidbuf[3] & ~(1 << 0)) != 0){
\r
176 if((cpuidbuf[3] & ~(1 << 3)) != 0){
\r
177 id->MONITOR = true;
\r
179 id->MONITOR = false;
\r
181 if((cpuidbuf[3] & ~(1 << 4)) != 0){
\r
186 if((cpuidbuf[3] & ~(1 << 7)) != 0){
\r
191 if((cpuidbuf[3] & ~(1 << 8)) != 0){
\r
196 if((cpuidbuf[3] & ~(1 << 10)) != 0){
\r
201 if((cpuidbuf[3] & ~(1 << 13)) != 0){
\r
206 if((cpuidbuf[3] & ~(1 << 14)) != 0){
\r
212 CPUID(cpuidbuf, 0x80000000);
\r
213 if(cpuidbuf[0] >= 0x80000000){
\r
214 id->ext_enable = true;
\r
215 id->ext_max = cpuidbuf[0];
\r
216 if(cpuidbuf[0] >= 0x80000004){
\r
217 CPUID2(&s[0], 0x80000002);
\r
218 CPUID2(&s[16], 0x80000003);
\r
219 CPUID2(&s[32], 0x80000004);
\r
220 sprintf(id->brand_string, "%s", s);
\r
222 sprintf(id->brand_string, "Null");
\r
225 id->ext_enable = false;
\r
229 id->enable = false;
\r
231 sprintf(id->vendor, "Null");
\r