Справочник программиста на персональном компьютере фирмы IBM. Вывод на терминал - Установка цветов для точечной графики
ОГЛАВЛЕНИЕ
4.4.1 Установка цветов для точечной графики.
PCjr и EGA работают с цветом совсем по-другому, чем цветной
адаптер. Они используют регистры палетты, которые позволяют в
любой момент изменить цвет, который соответствует данному коду
цвета. Вследствие этой разницы мы будем обсуждать эти две системы
отдельно и начнем с цветного адаптера.
Обе системы используют один и тот же основной набор кодов
цвета, который в точности совпадает с используемым в текстовых
режимах:
Номер кода Цепочка битов Цвет
0 0000 черный
1 0001 синий
2 0010 зеленый
3 0011 циан
4 0100 красный
5 0101 магента
6 0110 коричневый
7 0111 белый
8 1000 серый
9 1001 яркосиний
10 1010 яркозеленый
11 1011 яркий циан
12 1100 розовый
13 1101 яркая магента
14 1110 желтый
15 1111 яркобелый
Для цветного графического адаптера цвет разрешен только в
режиме умеренного разрешения. Для каждой точки отводятся два бита
каждого байта видеобуфера. Четыре возможных комбинации этих битов
представляют один фоновый и три основных цвета. Фоновый цвет
может быть любым из 16. Однако три основных цвета могут выбирать-
ся из одной из двух палетт, каждая из которых содержит только три
предопределенных цвета. Это следующие цвета:
Номер кода Цепочка битов Палетта 0 Палетта 1
0 00 цвет фона цвет фона
1 01 зеленый циан
2 10 красный магента
3 11 желтый/коричневый белый
Если Вы в какой-то момент переключились между палеттами, то все
выведенные на экран цвета будут соответственно изменены. Единст-
венный способ использовать цвет, не входящий в эти палетты, сос-
тоит в том, чтобы искуственно рассматривать один из цветов палет-
ты как фоновый цвет, что предполагает заполнение этим цветом
всего экрана, когда экран чистится (используйте для этого прямое
отображение в память). После этого истинный фоновый цвет может
показываться "сквозь него" в качестве основного цвета. Такая
техника приводит к созданию границы экрана, аналогичной той, что
изображается в текстовых режимах. В противном случае граница
экрана не может быть выделена цветом, так как весь экран закра-
шивается фоновым цветом, хотя точки относящиеся к области границы
нельзя адресовать. Отметим, что BIOS хранит в своей области дан-
ных однобайтную переменную, которая содержит текущий номер палет-
ты. Ее адрес равен 0040:0066H. Изменение этого числа не меняет
текущую установку палетты; наоборот, если Вы измените цвет палет-
ты другими средствами, помимо функций операционной системы, то
значение этой переменной будет модифицировано.
Символы могут перемешиваться с точечной графикой. Цвет, кото-
рым будут выводиться символы, зависит от того, какую фукнцию Вы
будете использовать для их вывода. Простейшая функция по умолча-
нию использует третий цвет текущей палетты. Однако имеется ряд
способов использовать любой из цветов палетты, а также выводить
символы различными цветами. Смотрите обсуждение в [4.1.3].
EGA и PCjr обеспечивают добавочную гибкость в использовании
атрибутов цвета, независимо от того, в каком режиме они работают.
При 16-цветной графике четыре бита, находящиеся в памяти для
каждой точки экрана дают цепочку битов, которая не переводится
прямо в соответствующие цвета приведенной таблицы. Вместо этого
каждый номер относится к одному из 16 регистров палетты. Каждый
из этих регистров содержит цепочку битов, соответствующую цвету,
который будет выводиться на самом деле. Если все 16 регистров
будут содержать 0100, то независимо от того, какой атрибут будет
приписан точке в памяти, она будет выведена красным цветом. Зна-
чение в регистре 0 используется в качестве фонового цвета. На
рис. 4-1 в [4.1.3] показан этот механизм. В двух- и четырехцвет-
ном режимах используются только первые два или четыре регистра
палетты.
Регистры палетты позволяют программе изменить все выводимое в
одном цвете на другой, не делая никаких изменений в видеобуфере.
Более того отдельные объекты могут появляться и исчезать как по
волшебству. Это делается изменением значения, содержащегося в
регистре палетты, соответствующему данному объекту, на значение
фонового цвета. Например, предположим, что фоновый цвет черный
(0000) и что объект выведен с атрибутом 1110, так что он выводит-
ся в том цвете, который указан в регистре палетты 15 (по умолча-
нию значение для этого регистра желтый). Если изменить значение
регистра 15 на 0000 (черный фоновый цвет), то объект исчезнет. Но
на самом деле объект хранится в памяти, так как он записан с
атрибутом 1110, а не с атрибутом 0000, как все точки фона. Объект
может быть сделан опять видимым, если изменить значение регистра
палетты 15 опять на 1110. Не обязательно, чтобы исчезали все
желтые объекты, поскольку некоторые могут быть выведены с другим
атрибутом, который также соответствует регистру палетты, содержа-
щему также желтый цвет.
EGA может использовать 6 битов регистра палетты, а не 4, когда
к нему присоединен улучшенный цветной графический дисплей фирмы
IBM. При этом становятся доступными 64 цвета, кодировка для кото-
рых R'G'B'RGB. R, G и B соответствуют темным цветам, а R', G' и
B' - светлым. Различные комбинации создают 64 оттенка. Как всег-
да, 111111 соответствует белому цвету, а 000000 - черному. Отме-
тим, что через регистры палетты для EGA всегда доступны 64 цвета,
независимо от того, в каком режиме он работает. При работе в
режиме 4-цветной графики (как у цветного адаптера) активны только
младшие 4 регистра палетты, но они могут содержать любые цвета.