[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]