Видеорежимы и цветовая палитра
Перед использованием каких-либо функций графики компьютер должен быть переведен в соответствующий видеорежим. Для компьютеров типа IBM PC это означает, что должны быть выбраны подходящие режим и палитра.
В таблице 4-1 приведены различные видеорежимы, в которых могут работать компьютеры IBM PC. Для функций, приведенных в этой главе, требуется 4 видеорежим, предполагающий использование цветного графического дисплея с размерностью экрана 320 на 200. Хотя адаптер EGA поддерживает и режимы с расширенной разрешающей способностью дисплея, 4 видеорежим выбран в качестве базового для разработки и использования функций графики в связи с тем, что он поддерживается как адаптером EGA, так и CGA. Использование особых режимов EGA требует только изменения функций записи точки (смотри книгу по использованию графики в EGA "Advance Grafics in C" Nelson Jobson Osborn/McGrow-Hall, 1987). Вам необходимо запомнить, что во всех кодах верхний левый угол имеет координаты 0,0.
BIOS-прерывание 16, функция 0, устанавливает видеорежим и используется в функции mode(), текст которой приведен ниже. Но прежде чем вы ознакомитесь с ней, предлагаем вам внимательно изучить все видеорежимы, поддерживаемые соответствующими адаптерами. Для этого обратитесь к таблице 4-1.
Таблица 4-1 Режимы терминала для машин IBM PC
Режим
Тип Размерность Адаптер экрана
0
1
2
3
4
5
6
7
8
9
10
13
14
15
-----
алфавитно-цифровой, ч/б 40х25 CGA, EGA
алфавитно-цифровой, 16 цв. 40х25 CGA, EGA
алфавитно-цифровой, ч/б 80х25 CGA, EGA
алфавитно-цифровой, 16 цв. 80х25 CGA, EGA
графический, 4 цвета 320х200 CGA, EGA
графический, 4 серых тона 320х200 CGA, EGA
графический, ч/б 640х200 CGA, EGA
алфавитно-цифровой, ч/б 80х25 монохромный
графический, 16 цветов 160х200 PCjr
графический, 16 цветов 320х200 PCjr
графический, 4 цвета-PCjr 640х200 PCjr, EGA
16 цветов-EGA
графический, 16 цветов 320х200 EGA
графический, 16 цветов 640х200 EGA
графический, 4 цвета 640х350 EGA
----------------------------------------------------------
/* Установка видеорежима */
void mode(mode_code)
int mode_code;
union REGS r;
r.h.al = mode_code;
r.h.ah = 0;
int86(0x10,&r,&r);
В 4- ом режиме доступны две палитры (набора цветов). Каждая палитра определяет четыре цвета, отображаемые на экране терминала. В IBM PC палитра 0 определяет желтый, зеленый и красный цвета, палитра 1 определяет белый, ярко-красный (пурпурный) и голубой цвета. Для каждой палитры четвертым цветом является цвет фона, который обычно черный. BIOS-прерывание 16, функция 11, устанавливает палитру.
Функция pallet(), приведенная ниже, устанавливает номер палитры, который задается в качестве значения ее аргумента:
/* Установка палитры */
void palette(pnum)
int pnum;
union REGS r;
r.h.bh=1; /* код 4 графического режима */
r.h.bl=pnum; /* номер палитры */
r.h.ah=11; /* устанавливается для вызова палитры */
int86(0x10,&r,&r);