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