Справочник программиста на персональном компьютере фирмы IBM. Вывод на терминал
Страница 28. Установка цветов для точечной графики


     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 регистра палетты, но они могут содержать любые цвета.

 
« Предыдущая статья   Следующая статья »