67 lines
1.4 KiB
NASM
67 lines
1.4 KiB
NASM
; 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
|
|
|
|
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
|
|
|
|
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
|