Vb, Delphi, .net, framework, C++, Java, Pascal,Visual Studio, Asm, Ruby, C#, j#, Cs, Html, Php, Perl, Asp, xHtml Get Free Souce Code Here...



Detecting CPU type - Delphi

//---------------------------------------------------------------------------
// Author   : Digital Survivor [Esteban Rodríguez 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.

0 comments:

Post a Comment