From: "Azret" Subject: Re: Identify PII & PIII Date: 13 Sep 1999 00:00:00 GMT Message-ID: <7ri1oq$nng10@forums.borland.com> References: <7rh4a9$emq15@forums.borland.com> Organization: Another Netscape Collabra Server User X-MimeOLE: Produced By Microsoft MimeOLE V4.72.3110.3 Newsgroups: borland.public.delphi.objectpascal unit AzCpuid; interface {CPUInfo} function AzHasCpuId: Boolean; function AzCpuSignature: Longword; function AzCpuType(const Signature: Longword): Byte; function AzCpuFamily(const Signature: Longword): Byte; function AzCpuModel(const Signature: Longword): Byte; function AzCpuStepping(const Signature: Longword): Byte; function AzCpuVendor: string; implementation {CPUInfo} function AzCpuVendor: string; const SID: array[0..11] of char = ''; begin asm CALL AzHasCpuId CMP AL, TRUE JNE @Done PUSH EBX XOR EAX, EAX DW $A20F MOV DWORD PTR SID, EBX MOV DWORD PTR SID[4], EDX MOV DWORD PTR SID[8], ECX POP EBX @Done: end; Result := SID; end; function AzCpuType(const Signature: Longword): Byte; {13..11 of Signature} asm SHR EAX, 12 AND EAX, $03 end; function AzCpuFamily(const Signature: Longword): Byte; {11..7 of Signature} asm SHR EAX, 8 AND EAX, $F end; function AzCpuModel(const Signature: Longword): Byte; {7..3 of Signature} asm SHR EAX, 4 AND EAX, $F end; function AzCpuStepping(const Signature: Longword): Byte; {3..0 of Signature} asm AND EAX, $F end; function AzCpuSignature: Longword; { -> none <- dword processor signiture or 0 0..3: Stepping 3..7: Model 7..11: Family 11..13: Type 13..32: Intel reserved } asm CALL AzHasCpuId CMP AL, TRUE JNE @Unknown PUSH EBX XOR EAX, EAX DW $A20F POP EBX CMP EAX, 1 JL @Unknown JMP @CpuId1 @Unknown: XOR EAX, EAX JMP @End @CpuId1: PUSH EBX MOV EAX, 1 DW $A20F POP EBX @End: end; function AzHasCpuId: Boolean; { -> none <- True if processor can execute CPUID instruction. False otherwise. Function tries to modify ID bit in Flags } asm MOV EDX, FALSE PUSHFD POP EAX MOV ECX, EAX XOR EAX, $200000 PUSH EAX POPFD PUSHFD POP EAX XOR ECX, EAX JZ @Skip MOV EDX, TRUE @Skip: PUSH EAX POPFD MOV EAX, EDX end; end.