wolf3d

The original open source release of Wolfenstein 3D
Log | Files | Refs

WL_ASM.ASM (1353B)


      1 ; JABHACK.ASM
      2 
      3 .386C
      4 IDEAL
      5 MODEL	MEDIUM
      6 
      7 EXTRN	LDIV@:far
      8 
      9 ;============================================================================
     10 
     11 DATASEG
     12 
     13 ;============================================================================
     14 
     15 CODESEG
     16 
     17 ;	Hacked up Juan Jimenez's code a bit to just return 386/not 386
     18 PROC	_CheckIs386
     19 PUBLIC	_CheckIs386
     20 
     21 	pushf			; Save flag registers, we use them here
     22 	xor	ax,ax		; Clear AX and...
     23 	push ax			; ...push it onto the stack
     24 	popf			; Pop 0 into flag registers (all bits to 0),
     25 	pushf			; attempting to set bits 12-15 of flags to 0's
     26 	pop	ax			; Recover the save flags
     27 	and	ax,08000h	; If bits 12-15 of flags are set to
     28 	cmp	ax,08000h	; zero then it's 8088/86 or 80188/186
     29 	jz	not386
     30 
     31 	mov	ax,07000h	; Try to set flag bits 12-14 to 1's
     32 	push ax			; Push the test value onto the stack
     33 	popf			; Pop it into the flag register
     34 	pushf			; Push it back onto the stack
     35 	pop	ax			; Pop it into AX for check
     36 	and	ax,07000h	; if bits 12-14 are cleared then
     37 	jz	not386		; the chip is an 80286
     38 
     39 	mov	ax,1		; We now assume it's a 80386 or better
     40 	popf
     41 	retf
     42 
     43 not386:
     44 	xor	ax,ax
     45 	popf
     46 	retf
     47 
     48 	ENDP
     49 
     50 
     51 PROC	_jabhack2
     52 PUBLIC	_jabhack2
     53 
     54 	push	es
     55 
     56 	mov	ax,seg LDIV@
     57 	mov	es,ax
     58 	mov	ax,9090h					;Two NOP's
     59 	mov	[WORD FAR es:LDIV@],ax		;Patch over XOR AX,AX
     60 	mov	[WORD FAR es:LDIV@+2],ax	;and over JMP SHORT COMMON
     61 
     62 	pop	es
     63 	retf
     64 
     65 	ENDP
     66 
     67 	END