home *** CD-ROM | disk | FTP | other *** search
/ Intermedia 1998 January / inter1_98.iso / www / rozi / CPU.PAS < prev    next >
Pascal/Delphi Source File  |  1997-12-15  |  1KB  |  60 lines

  1. {$D-} {$L-}
  2. Program Cpuu;
  3.  
  4. Const
  5.    Cpu :  Array[1..4] of String[5] = ('8086','80286','80386','80486');
  6.    Cpu8086  = 1;
  7.    Cpu80286 =2;
  8.    Cpu80386 = 3;
  9.    Cpu80486 = 4;
  10.  
  11. Function GetCPU_Type: Byte; Assembler;
  12. Asm
  13.  MOV   DX,Cpu8086
  14.  PUSH  SP
  15.  POP   AX
  16.  CMP   SP,AX
  17.  JNE   @OUT
  18.  MOV   DX, Cpu80286
  19.  PUSHF
  20.  
  21.  POP   AX
  22.  OR   AX,4000h
  23.  PUSH  AX
  24.  POPF
  25.  PUSHF
  26.  POP   AX
  27.  TEST  AX,4000h
  28.  JE   @OUT
  29.  MOV DX, Cpu80386
  30.  {"DB 66h" indicates '386 extended instruction}
  31.  DB 66h; MOV   BX, SP      {MOV EBX, ESP}
  32.  DB 66h, 83h, 0E4h, 0FCh   {AND ESP, FFFC}
  33.  DB 66h; PUSHF             {PUSHFD}
  34.  DB 66h; POP AX            {POP EAX}
  35.  DB 66h; MOV   CX, AX      {MOV ECX, EAX}
  36.  DB 66h, 35h, 00h
  37.  DB 00h, 04h, 00           {XOR EAX, 00040000}
  38.  DB 66h; PUSH   AX     {PUSH EAX}
  39.  
  40.  DB 66h; POPF              {POPFD}
  41.  DB 66h; PUSHF             {PUSHFD}
  42.  DB 66h; POP   AX     {POP EAX}
  43.  DB 66h, 25h, 00h
  44.  DB 00h, 04h, 00h          {AND EAX, 00040000}
  45.  DB 66h, 81h, 0E1h, 00h
  46.  DB 00h, 04h, 00h          {AND ECX, 00040000}
  47.  DB 66h; CMP   AX, CX      {CMP EAX, ECX}
  48.  JE @Not486
  49.  MOV DX, Cpu80486
  50. @Not486:
  51.  DB 66h; PUSH   CX         {PUSH EXC}
  52.  DB 66h; POPF              {POPFD}
  53.  DB 66h; MOV   SP, BX      {MOV ESP, EBX}
  54. @Out:
  55.  MOV AX, DX
  56. end;
  57.  
  58. begin
  59.    Writeln; Writeln('I detected an ',Cpu[GetCpu_Type],' chip.');
  60. end.