www.pudn.com > jpeg1.zip > CHCK.ASM


.8086 
CRT_ADDR	EQU	463H 
;-------------------------------------- 
_CHK_TEXT	SEGMENT	PARA PUBLIC 'CODE' 
DGROUP		GROUP	_DATA,_BSS 
		ASSUME	CS:_CHK_TEXT,DS:DGROUP 
_CHK_TEXT	ENDS 
_DATA		SEGMENT WORD PUBLIC 'DATA' 
_DATA		ENDS 
_BSS		SEGMENT PARA PUBLIC 'BSS' 
_FPU            label	byte 
		DB	0FFH 
_BSS		ENDS 
_DATA		SEGMENT WORD PUBLIC 'DATA' 
s@		label	byte 
TVGA		DB	'TVGA' 
SCRATCH		DW	? 
OSS		DW	? 
OSP		DW	? 
		DW	200H	DUP ( ? ) 
STK		LABEL	WORD 
_DATA		ENDS 
_CHK_TEXT	SEGMENT PARA PUBLIC 'CODE' 
		ASSUME CS:_CHK_TEXT,DS:DGROUP 
		public	_ChkTVGA 
		public	_IDX_87 
		public	_New_24 
		public	_Search 
		public	_FPU 
		extrn	_Error_24 :	FAR 
;====================================== 
CHOICE		DW	? 
GET_VRAM	PROC 
		XOR	AX,AX 
		MOV	ES,AX 
		MOV	DX,ES:[CRT_ADDR] 
		MOV	AL,1FH 
		OUT	DX,AL 
		INC	DX 
		IN	AL,DX 
		AND	AL,3 
		XOR	CX,CX 
		MOV	CL,AL 
		INC	CL 
		RET 
GET_VRAM	ENDP 
;====================================== 
_ChkTVGA	PROC	FAR 
		PUSH	BP 
		MOV	BP,SP 
		PUSHF 
		PUSH	DS 
		PUSH	ES 
		PUSH	SI 
		PUSH	DI 
		PUSH	DX 
		PUSH	CX 
		MOV	AX,DGROUP 
		MOV	DS,AX 
		MOV	AX,0C000H 
		MOV	ES,AX 
		MOV	CX,800H 
		LEA	SI,TVGA 
		MOV	DI,7700H 
SER_LOOP:	PUSH	CX 
		MOV	CX,4 
		PUSH	SI 
		PUSH	DI 
		REPE	CMPSB 
		POP	DI 
		POP	SI 
		POP	CX 
		JZ	TVGA_EXIST 
		INC	DI 
		LOOP	SER_LOOP 
		JMP	SHORT NO_TVGA 
TVGA_EXIST:     CALL    GET_VRAM 
		MOV	AX,256 
		MUL	CX 
		JMP	SHORT QUIT_CHK 
NO_TVGA:	MOV	AX,-1 
QUIT_CHK:	POP	CX 
		POP	DX 
		POP	DI 
		POP	SI 
		POP	ES 
		POP	DS 
		POPF 
		POP	BP 
		RET 
_ChkTVGA	ENDP 
;====================================== 
_IDX_87		PROC	FAR 
		PUSH	BP 
		MOV	BP,SP 
		PUSHF 
		PUSH	DS 
		MOV	AX,DGROUP 
		MOV	DS,AX 
		FNINIT 
		MOV 	SCRATCH,55AAH 
		FNSTSW	SCRATCH 
		CMP	BYTE PTR SCRATCH,0 
		JNE 	NO_MATH 
		FNSTCW	SCRATCH 
		MOV	AX,SCRATCH 
		AND	AX,103FH 
		CMP	AX,3FH 
		JNE	NO_MATH 
		AND	SCRATCH,0FF7FH 
		FLDCW	SCRATCH 
		FDISI 
		FSTCW	SCRATCH 
		TEST	SCRATCH,80H 
		JNZ	IS_87 
		FINIT 
		FLD1 
		FLDZ 
		FDIV 
		FLD	ST 
		FCHS 
		FCOMPP 
		FSTSW	SCRATCH 
		MOV	AX,SCRATCH 
		SAHF 
		JE	IS_287 
IS_387: 	MOV 	AX,3 
		JMP	QUIT 
IS_287:		MOV	AX,2 
		JMP	QUIT 
IS_87:		MOV	AX,1 
		JMP	QUIT 
NO_MATH:	XOR     AX,AX 
QUIT:           POP	DS 
		POPF 
		POP	BP 
		RET 
_IDX_87		ENDP 
;************************************** 
;  	 NEW INT 24H PROCEDURE 
;************************************** 
_New_24		PROC	FAR 
		PUSH	DS 
		CLI 
		MOV	AX,DGROUP 
		MOV	DS,AX 
		MOV	AX,SS 
		MOV	OSS,AX 
		MOV	OSP,SP 
		MOV	AX,_DATA 
		MOV	SS,AX 
		MOV	AX,OFFSET STK 
		MOV 	SP,AX 
		STI 
		PUSH	ES 
		PUSH	SI 
		PUSH	DI 
		PUSH	BX 
		PUSH	CX 
		PUSH	DX 
		PUSHF 
		CALL	_Error_24 
		MOV	CS:CHOICE,AX 
		POPF 
		POP	DX 
		POP	CX 
		POP	BX 
		POP	DI 
		POP	SI 
		POP	ES 
		CLI 
		MOV	AX,OSS 
		MOV	SS,AX 
		MOV	SP,OSP 
		STI 
		MOV	AX,CS:CHOICE 
		POP	DS 
		IRET 
_New_24		ENDP 
_Search         PROC	FAR 
		PUSH	BP 
		MOV	BP,SP 
		push	ds 
		push	es 
		mov	ax,[bp+6] 
		mov	ds,ax 
		MOV	AX,DS:[2CH] 
		MOV	ES,AX 
		XOR	DI,DI 
		CLD 
		MOV	CX,7FFFH 
		XOR	AL,AL 
SEARCH:         REPNZ	SCASB 
		CMP	AL,BYTE PTR ES:[DI] 
		JZ	FIND 
		JMP	SHORT SEARCH 
FIND:           ADD	DI,3 
		MOV	SI,DI 
		REPNZ	SCASB 
		MOV	CX,DI 
		SUB	CX,SI 
		mov	dx,es 
		mov	ax,si 
		pop	es 
		pop	ds 
		POP	BP 
		RET 
_Search		ENDP 
_CHK_TEXT 	ENDS 
		END