; more source code at http://www.ahjoe.com/source/srcdown.asp PUBLIC CPUTYPE CODE SEGMENT ASSUME CS:CODE CPUTYPE PROC FAR ;OUT: AX=01, 8086; AX=02, 80286; AX=03, 80386; AX=04, 80486 UP; PUSH BX PUSHF POP AX MOV BX, AX AND AX, 0FFFH ; CLEAR b15-b12 PUSH AX POPF PUSHF POP AX AND AH, 0F0H JNZ IS8086 MOV AX, BX OR AX, 0F000H ; SET b15-b12 PUSH AX POPF PUSHF POP AX AND AH, 0F0H JZ IS80286 MOV BX, SP AND SP, NOT 3 DB 66H PUSHF DB 66H POP AX DB 66H OR AX, 0 DW 4 DB 66H PUSH AX DB 66H POPF DB 66H PUSHF DB 66H POP AX DB 66H TEST AX, 0 DW 4 JZ IS80386 JMP IS80486 IS8086: MOV AX, 01 POP BX RETF IS80286: MOV AX, 02 POP BX RETF IS80386: MOV AX, 03 MOV SP, BX POP BX RETF IS80486: DB 66H AND AX, NOT 0 DW NOT 4 DB 66H PUSH AX DB 66H POPF MOV AX, 04 MOV SP, BX POP BX RETF CPUTYPE ENDP CODE ENDS END CPUTYPE