push bp mov bp, sp ; push zero onto the stack and pop it into flags. ; some bits won't change xor ax,ax push ax popf pushf pop ax and ax, 0xf000 ;0f000h cmp ax, 0xf000 ;0f000h je lessthantwoeightsix ; marked as 286 (2) mov dl, 2 mov ax, 0x7000 ;7000h push ax popf pushf pop ax and ax, 0x7000 ;7000h jz alldone ; mark as 386 (3) inc dl jmp alldone lessthantwoeightsix: mov dl, 1 mov al, 0xff ;0ffh mov cl, 0x21 ;21h shr al, cl ; if the shift leaves zero, it's a 8088 class cpu, else 80186/88 jnz alldone ; Lets see if we have a V20/V30 (V) mov dl, 0x56 ;056h sti push si mov si, 0 mov cx, 0xffff ;0ffffh ;rep lods [BYTE PTR es:si] rep lodsb pop si or cx, cx jz alldone ; mark as a 8088/8086 (0) mov dl, 0 alldone: ; store in ax xor dh, dh mov di, [bp]+6 mov [di], dx pop bp retf 2