32 bit
The invalid opcode exception was only introduced on 386, IIRC. I once wrote a 386 detection routine that was small enough to fit in my boot sector, alongside the routine to load my stage 2 boot loader from a file in the root directory of a FAT filesystem, AND intelligible error messages for when stuff went wrong. I thought that was pretty cool at the time!
if you want the code for this, it is quite simple:
standard disclaimer:
this code is public domain, and can be used by anyone for any reason, and modified in any way -- im not responsible for any problems with this code
Code: Select all
MOV AX, 0xF000 ; set all the high bits to 1
PUSHF ; save state of flags register before modifying
PUSH AX
POPF ; move AX into FLAGS
PUSHF
POP AX ; move it back -- anything in flags forced to a specific value is changed
POPF ; restore previous flags
AND AH,0xF0 ; mask out the bottom part, and move it into flags for checking
JS no386 ; the sign bit is only set on 8086/8
JZ no386 ; bits 12:15 0 on start, and cannot be changed in RMode on 286,
; but can on 386
:386code ; if you get here you have a 386
this code is public domain, and can be used by anyone for any reason, and modified in any way -- im not responsible for any problems with this code