LOCALS

.MODEL	SMALL


.DATA

PUBLIC	szMSCDEXVer
PUBLIC	szCDROMNotInstalled

szMSCDEXVer		DB	6 DUP(0)	;строка с версией драйвера MSCDEX
szCDROMNotInstalled	DB	'Устройства CD-ROM или драйверы не установлены',0


.DATA?

PUBLIC	wCDROMCount
PUBLIC	CDROMLetters

wCDROMCount		DW	?		;количество устройств CD-ROM
CDROMLetters		DB	26 DUP(?)	;буфер для номеров устройств
						;CD-ROM


.CODE

PUBLIC	GetCDInfo

EXTRN	ByteToStr:PROC
EXTRN	StrLen:PROC

;*******************************************************************************
;GetCDInfo	определяет основную информацию о CD
;*******************************************************************************
;Использует:	ByteToStr, StrLen
;		int 2Fh
;
;Вызов:		нет
;
;Возврат:	нет
;
;Изменяемые
;  регистры:	AX,BX,CX,DX,Flags
;*******************************************************************************
GetCDInfo	PROC

		push	es		;сохраняем регистры в стеке
		push	si
		push	di

		push	ds
		pop	es		;ES = сегмент данных

;Проверка установки драйвера MSCDEX

		mov	ax,1500h
		xor	bx,bx
		int	2Fh		;BX = количество устройств CD-ROM
					;(BX=0 - не установлен драйвер MSCDEX)
		mov	[wCDROMCount],bx
		or	bx,bx
		jz	@@Exit

;Версия драйвера MSCDEX

		mov	ax,150Ch
		xor	bx,bx
		int	2Fh		;BH = старший номер версии
					;BL = младший номер версии

		mov	di,OFFSET szMSCDEXVer

		mov	al,bh		;записываем старший номер версии
		push	bx
		call	ByteToStr
		pop	bx

		mov	si,di
		call	StrLen		;CX = длина строки
		add	di,cx

		mov	al,'.'
		stosb

		mov	al,bl		;записываем младший номер версии
		aam
		xchg	al,ah
		add	ax,'00'
		stosw

;Буквенные названия устройств CD-ROM

		mov	ax,150Dh
		mov	bx,OFFSET CDROMLetters	;ES:BX -> буфер для
						;номеров устройств CD-ROM
		int	2Fh

@@Exit:
		pop	di		;восстанавливаем регистры
		pop	si
		pop	es

		ret

GetCDInfo	ENDP


END
