; 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
