LOCALS

.MODEL	TINY


PUBLIC	InitGraph
PUBLIC	CloseGraph
PUBLIC	FormImage


INCLUDE	GRAPHHI.INC

VGAHi			EQU	12h	;Номер графического режима VGA 640x480
					;16 цветов

ScrColor		EQU	0	;цвет экрана

;Рабочий экран программы

WindowColor		EQU	COLOR_BTNFACE
Window_x1		EQU	22
Window_y1		EQU	13
Window_x2		EQU	617
Window_y2		EQU	466


.DATA

INCLUDE	FON8X16.INC

;
;Таблица регистров палитры
;
PaletteRegs		DB	0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0

;
;Таблица регистров ЦАП
;
DACRegs			DB	 0, 0, 0
			DB	 0, 0,44
			DB	20,20,63
			DB	28,31,62
			DB	13,63,63
			DB	25,40,40
			DB	10,40,35
			DB	51,51,46
			DB	63,30,40
			DB	63,63, 0
			DB	10,63,25
			DB	20,63,50
			DB	 0, 0,32
			DB	32,32,32
			DB	48,48,48
			DB	63,63,63

szCaption		DB	'Информация о системе',0


.DATA?

bPrevMode		DB	?


.CODE

EXTRN	GetVideoMode:PROC
EXTRN 	SetVideoMode:PROC
EXTRN 	SetGraphASCII:PROC
EXTRN 	SetDACRegs:PROC
EXTRN 	SetPaletteRegs:PROC
EXTRN 	ClrScr:PROC
EXTRN	CreateWindow2:PROC

;*******************************************************************************
;InitGraph	запоминает текущий видеорежим,
;		устанавливает графический режим VGA 640x480 16 цветов,
;		загружает таблицу регистров палитры и таблицу регистров ЦАП
;		загружает таблицу шрифтов 8x16, содержащую русские символы
;*******************************************************************************
;Использует:	GetVideoMode, SetVideoMode, SetGraphASCII, SetPaletteRegs,
;		SetDACRegs, ClrScr
;
;Вызов:		нет
;
;Возврат:	нет
;
;Изменяемые
;  регистры:	AX,BX,CX,DX,Flags
;*******************************************************************************
InitGraph	PROC

		push	es

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

;запоминаем исходный видеорежим

		call	GetVideoMode	;AL = текущий видеорежим
		mov	[bPrevMode],al

;устанавливаем графический режим VGA 640x480 16 цветов

		mov	al,VGAHi	;AL = графический режим
					;     VGA 640x480 16 цветов
		call	SetVideoMode

;загружаем таблицу регистров палитры

		mov	dx,OFFSET PaletteRegs	;ES:DX -> таблица с значениями
						;регистров палитры
		call	SetPaletteRegs

;загружаем таблицу 16 регистров ЦАП

		xor	bx,bx		;BX=0 (номер первого регистра ЦАП)
		mov	cx,16		;CX=16 (число устанавливаемых
					;регистров ЦАП)
		mov	dx,OFFSET DACRegs	;ES:DX -> таблица с значениями
						;устанавливаемых регистров ЦАП
		call	SetDACRegs

;загружаем таблицу шрифтов 8x16, содержащую русские символы

		mov	bx,OFFSET fon8x16_0	;ES:BX -> таблица шрифтов 8x16
		mov	cx,16			;CX=16 (количество байтов,
						;кодирующих один символ)
		mov	dl,30		;DL=30 (количество отображаемых
					;на экране строк текста)
		call	SetGraphASCII

;очищаем экран заданным цветом

		mov	bh,ScrColor	;BH = цвет экрана
		call	ClrScr

		pop	es

		ret

InitGraph	ENDP

;*******************************************************************************
;CloseGraph	восстанавливает исходный видеорежим
;*******************************************************************************
;Использует:	SetVideoMode
;
;Вызов:		нет
;
;Возврат:	нет
;
;Изменяемые
;  регистры:	AX,Flags
;*******************************************************************************
CloseGraph	PROC

		mov	al,[bPrevMode]	;AL = исходный видеорежим
		call	SetVideoMode

		ret

CloseGraph	ENDP

;*******************************************************************************
;Процедура:	формирует изображение рабочего экрана программы
;*******************************************************************************
;Использует:	CreateWindow2
;
;Вызов:		нет
;
;Возврат:	нет
;
;Изменяемые
;  регистры:	AX,BX,CX,DX,Flags
;*******************************************************************************
FormImage	PROC

		mov	ax,OFFSET szCaption
		push	ax
		mov	al,WindowColor
		push	ax
		mov	ax,Window_y2
		push	ax
		mov	ax,Window_x2
		push	ax
		mov	ax,Window_y1
		push	ax
		mov	ax,Window_x1
		push	ax
		call	CreateWindow2

		ret

FormImage	ENDP


END
