LOCALS

.MODEL	SMALL


.CODE

PUBLIC	ReadCMOSReg
PUBLIC	DetectWindows

;*******************************************************************************
;ReadCMOSReg	возвращает значение регистра CMOS
;*******************************************************************************
;Использует:	нет
;
;Вызов:		AL = номер регистра CMOS
;
;Возврат:	AL = значение регистра CMOS
;
;Изменяемые
;  регистры:	AL
;*******************************************************************************
ReadCMOSReg	PROC

		cli

		out	70h,al
		jmp	SHORT $+2
		in	al,71h		;AL = значение регистра CMOS

		sti

		ret

ReadCMOSReg	ENDP

;*******************************************************************************
;DetectWindows	Определяет наличие запущенной Windows,
;		при обнаружении возвращает номер версии Windows
;*******************************************************************************
;Использует:	нет
;
;Вызов:		нет
;
;Возврат:	AL=1 - Windows обнаружена
;		       BH = старший номер версии
;		       BL = младший номер версии
;		AL=0 - Windows не обнаружена
;		       BX=0
;
;Изменяемые
;  регистры:	AX,BX,CX,Flags
;*******************************************************************************
DetectWindows	PROC

		mov	ax,160Ah	;AX=160Ah (функция определения версии
					;и типа Windows)
		int	2Fh		;AX=0 - функция поддерживается
					;  BH = старший номер версии
					;  BL = младший номер версии
					;  CX = режим
					;       2 - стандартный
					;       3 - Enhanced
		or	ax,ax
		jz	@@IsWindows

		mov	ax,1600h	;AX=1600h (функция проверки запущенного
					;Enhanced режима Windows)
		int	2Fh		;AL=0 или 80h - Enhanced режим Windows
					;               не запущен
					;AL=1 или FFh - Windows/386 2.x
					;иначе
					;  AL = старший номер версии (>= 3)
					;  AH = младший номер версии
		test	al,7Fh
		jz	@@IsNone

		mov	bx,2FFh
		cmp	al,1
		je	@@IsWindows
		cmp	al,0FFh
		je	@@IsWindows

		mov	bx,ax
		xchg	bl,bh		;BH = старший номер версии
					;BL = младший номер версии

@@IsWindows:	mov	al,1		;AL=1
		ret

@@IsNone:	xor	al,al		;AL=0
		xor	bx,bx
		ret

DetectWindows	ENDP


END
