Mega Code Archive

 
Categories / Delphi / Hardware
 

Detecting CPU type

Title: Detecting CPU type Question: I need to know which type of CPU is in my system. How can I do that ??? Answer: //--------------------------------------------------------------------------- // Author : Digital Survivor [Esteban Rodrguez Nieto | Jos Plano] // Email : plmad666@gmail.com | jose.plano@gmail.com // Web site : www.ds-studios.com.ar //--------------------------------------------------------------------------- { Note: This code seems not to work in all machines. It's seems also not to work with all kinds of CPUs, but try it. It works for me... } Unit CPUid; Interface Type TCpuType = (cpu8086, cpu286, cpu386, cpu486, cpuPentium); Function CpuType : TCpuType; Function CpuTypeString : String; Implementation Uses SysUtils; Function CpuType : TCpuType; ASSEMBLER; Asm // 8086 CPU check push ds pushf pop bx mov ax, 0fffh and ax, bx push ax popf pushf pop ax and ax, 0f000h cmp ax, 0f000h mov ax, cpu8086 je @@End_CpuType // 80286 CPU check or bx, 0f000h push bx popf pushf pop ax and ax, 0f000h mov ax, cpu286 jz @@End_CpuType // 386 CPU check db 66h pushf db 66h pop ax db 66h mov cx, ax db 66h xor ax, 0h dw 0004h db 66h push ax db 66h popf db 66h pushf db 66h pop ax db 66h xor ax, cx mov ax, cpu386 je @@End_CpuType // 486 CPU check db 66h pushf db 66h pop ax db 66h mov cx, ax db 66h xor ax, 0h dw 0020h db 66h push ax db 66h popf db 66h pushf db 66h pop ax db 66h xor ax, cx mov ax, cpu486 je @@End_CpuType // Pentium CPU check db 66h mov ax, 1 dw 0 db 66h db 0Fh db 0a2h db 66h and ax, 0F00H dw 0 db 66h shr ax, 8 sub ax, 1 @@End_CpuType: pop ds End; Function CpuTypeString : String; Var Kind : TCpuType; Begin Kind := CpuType; Case Kind Of cpu8086 : Result := '8086'; cpu286 : Result := '286'; cpu386 : Result := '386'; cpu486 : Result := '486'; cpuPentium : Result := 'Pentium'; Else Result := Format ('P%d', [Ord (kind)]); End; End; End.