[Back to HARDWARE SWAG index] [Back to Main SWAG index] [Original]

    {$D-} {$L-}
    Program Cpuu;

    Const
        Cpu      : Array[1..4] of String[5] = ('8086','80286','80386','80486');
        Cpu8086  = 1;
        Cpu80286 = 2;
        Cpu80386 = 3;
        Cpu80486 = 4;

    Function GetCPU_Type: Byte; Assembler;
    ASM
     MOV    DX, CPU8086
     PUSH   SP
     POP    AX
     CMP    SP,AX
     JNE    @OUT
     MOV    DX, CPU80286
     PUSHF

     POP    AX
     OR     AX,4000h
     PUSH   AX
     POPF
     PUSHF
     POP    AX
     TEST   AX,4000H
     JE     @OUT
     MOV    DX,CPU80386
     {"DB 66h" INDICATES '386 EXTENDED INSTRUCTION}
     DB 66h
     MOV    BX,SP
     DB 66h, 83h, 0E4h, 0FCh
     DB 66h
     PUSHF
     DB 66h
     POP AX
     DB 66h
     MOV    CX,AX
     DB 66h, 35h, 00h
     DB 00h, 04h, 00
     DB 66h
     PUSH   AX
     DB 66h
     POPF
     DB 66h
     PUSHF
     DB 66h
     POP    AX
     DB 66h,25h, 00h
     DB 00h, 04h, 00h
     DB 66h, 81h, 0E1h, 00h
     DB 00h, 04h, 00h
     DB 66h
     CMP    AX,CX
     JE @NOT486
     MOV DX, CPU80486
    @NOT486:
     DB 66h
     PUSH   CX
     DB 66h
     POPF
     DB 66h
     MOV    SP,BX
    @OUT:
     MOV    AX,DX
    End;

    Begin
        Writeln; Writeln('I detected an ',Cpu[GetCpu_Type],' chip.');
    End.

[Back to HARDWARE SWAG index] [Back to Main SWAG index] [Original]