; JABHACK.ASM .386C IDEAL MODEL MEDIUM EXTRN LDIV@:far ;============================================================================ DATASEG ;============================================================================ CODESEG ; Hacked up Juan Jimenez's code a bit to just return 386/not 386 PROC _CheckIs386 PUBLIC _CheckIs386 ;hack to never look for a 386, for benchmark comparisons of same code on all CPUs ; pushf ; Save flag registers, we use them here ; xor ax,ax ; Clear AX and... ; push ax ; ...push it onto the stack ; popf ; Pop 0 into flag registers (all bits to 0), ; pushf ; attempting to set bits 12-15 of flags to 0's ; pop ax ; Recover the save flags ; and ax,08000h ; If bits 12-15 of flags are set to ; cmp ax,08000h ; zero then it's 8088/86 or 80188/186 ; jz not386 ; ; mov ax,07000h ; Try to set flag bits 12-14 to 1's ; push ax ; Push the test value onto the stack ; popf ; Pop it into the flag register ; pushf ; Push it back onto the stack ; pop ax ; Pop it into AX for check ; and ax,07000h ; if bits 12-14 are cleared then ; jz not386 ; the chip is an 80286 ; ; mov ax,1 ; We now assume it's a 80386 or better ; popf ; retf ;end benchmark hack not386: xor ax,ax popf retf ENDP PROC _jabhack2 PUBLIC _jabhack2 push es mov ax,seg LDIV@ mov es,ax mov ax,9090h ;Two NOP's mov [WORD FAR es:LDIV@],ax ;Patch over XOR AX,AX mov [WORD FAR es:LDIV@+2],ax ;and over JMP SHORT COMMON pop es retf ENDP END