#include <stdio.h>
#include <conio.h>
#include <dos.h>

// Описание функций
int main( int argc, char * argv[] );
int SetSVGAMode(int);

//==============================================================
// Главная функция программы
//==============================================================
int main( int argc, char * argv[] ) {

	int	vmode, err;

	if( argc != 2 )
	{
		printf("\nФормат вызова: SVGAMODE <режим>"
				 "\n   <режим>: режим VESA"
		);

		return -1;
	}

	sscanf(argv[1],"%x",&vmode);

	err = SetSVGAMode(vmode);
	if(err != 0) {
		printf("\nВыбранный вами режим не поддерживается");
		return -1;
	}

	// Если выбранный режим VESA установлен отображаем
	// текстовую строку и ожижаем нажатия на любую клавишу
	printf("\nТекущий режим %Xh", vmode);
	printf("\nДля завершения нажмиите любую клавишу");
	getch();

	// Возвращаемся в стандартный текстовый режим
	_asm mov	ax,3
	_asm int	10h

	return 0;
}

//=================================================
// Функция SetSVGAMode
//=================================================
int
SetSVGAMode(int vmode)
{
	union REGS regs;
	int	iResult;

	regs.h.ah = 0x4f;
	regs.h.al = 0x02;
	regs.x.bx = vmode;

	int86(0x10, &regs, &regs);

	if((regs.h.al == 0x4f) && (regs.h.ah == 0))	return 0;
	else return -1;
}

