Archive

Archive for the ‘Hardware’ Category

How to Find out if the CPU Supports 3DNow!

December 15th, 1999 m3Rlin No comments

AMD K6-2, K6-III and Athlon support 3DNow! instructions. This instruction set improves 3D and multimedia performance. But before you use these in your program you may want to check if the CPU supports 3DNow! ;-) This is the code to use:

{$ifndef ver80} // Because of 32 bit register use
  function Get3DNowSupport: Boolean; assembler;
  asm
    push  ebx
    mov   @Result, True
    mov   eax, $80000000 // Query for extended fuctions
    dw    $A20F // CPUID instruction
    cmp   eax, $80000000 // Is 800_0001h supported?
    jbe   @NOEXTENDED // If not, 3DNow! technology is not supported
    mov   eax, $80000001 // Setup extended function 8000_0001h
    dw    $A20F // CPUID instruction
    test  edx, $80000000 // Test bit 31
    jnz   @EXIT // 3DNow! technology is supported
  @NOEXTENDED:
    mov  @Result, False
  @EXIT:
    pop ebx
  end;
{$endif}

How to Get the CPU Vendor Name

December 15th, 1999 m3Rlin 3 comments

The CPUID instruction gives you a lot of information about the CPU. You don’t have to write hundreds of lines of code to find out what CPU is installed as you have to to find out if a 286 or a 386 chip is installed. To get the CPU vendor name use this code. This function uses the CPUID instruction, so use the previous tip to find out if the installed processor supports this.

  {$ifndef ver80} // Because of 32 bit register use
    function GetVendorString: string;
    var
      aVendor: array[0..2] of DWord;
      iI, iJ : Integer;
    begin
      asm
        push  ebx
        xor   eax, eax
        dw    $A20F // CPUID instruction
        mov   DWord ptr aVendor, ebx
        mov   DWord ptr aVendor[+4], edx
        mov   DWord ptr aVendor[+8], ecx
        pop   ebx
      end;
      for iI := 0 to 2 do
        for iJ := 0 to 3 do
          Result := Result + Chr((aVendor[iI] and ($000000FF shl (iJ * 8))) shr (iJ * 8));
    end;
  {$endif}