Глава 4. Вывод на терминал.

Раздел 4. Вывод точечной графики.

4.4.1 Установка цветов для точечной графики.

PCjr и EGA работают с цветом совсем по-другому, чем цветной адаптор. Они используют регистры палетты, которые позволяют в любой момент изменить цвет, который соответствует данному коду цвета. Вследствие этой разницы мы будем обсуждать эти две системы отдельно и начнем с цветного адаптора.

Обе системы используют один и тот же основной набор кодов цвета, который в точности совпадает с используемым в текстовых режимах:

 
   Hомер кода            Цепочка битов         Цвет 
      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. Однако три основных цвета могут выбираться из одной из двух палетт, каждая из которых содержит только три предопределенных цвета. Это следующие цвета:

 
   Hомер кода    Цепочка битов    Палетта 0    Палетта 1 
       0             00           цвет фона    цвет фона 
       1             01           зеленый      циан 
       2             10           красный      магента 
       3             11      желтый/коричневый белый 
Если Вы в какой-то момент переключились между палеттами, то все выведенные на экран цвета будут соответственно изменены. Единственный способ использовать цвет, не входящий в эти палетты, состоит в том, чтобы искуственно рассматривать один из цветов палетты как фоновый цвет, что предполагает заполнение этим цветом всего экрана, когда экран чистится (используйте для этого прямое отображение в память). После этого истинный фоновый цвет может показываться "сквозь него" в качестве основного цвета. Такая техника приводит к созданию границы экрана, аналогичной той, что изображается в текстовых режимах. В противном случае граница экрана не может быть выделена цветом, так как весь экран закрашивается фоновым цветом, хотя точки относящиеся к области границы нельзя адресовать. Отметим, что BIOS хранит в своей области данных однобайтную переменную, которая содержит текущий номер палетты. Ее адрес равен 0040:0066H. Изменение этого числа не меняет текущую установку палетты; наоборот, если Вы измените цвет палетты другими средствами, помимо функций операционной системы, то значение этой переменной будет модифицировано.

Символы могут перемешиваться с точечной графикой. Цвет, которым будут выводиться символы, зависит от того, какую фукнцию Вы будете использовать для их вывода. Простейшая функция по умолчанию использует третий цвет текущей палетты. Однако имеется ряд способов использовать любой из цветов палетты, а также выводить символы различными цветами. Смотрите обсуждение в {4.1.3}.

EGA и PCjr обеспечивают добавочную гибкость в использовании атрибутов цвета, независимо от того, в каком режиме они работают. При 16-цветной графике четыре бита, находящиеся в памяти для каждой точки экрана дают цепочку битов, которая не переводится прямо в соответствующие цвета приведенной таблицы. Вместо этого каждый номер относится к одному из 16 регистров палетты. Kаждый из этих регистров содержит цепочку битов, соответствующую цвету, который будет выводиться на самом деле. Если все 16 регистров будут содержать 0100, то независимо от того, какой атрибут будет приписан точке в памяти, она будет выведена красным цветом. Значение в регистре 0 используется в качестве фонового цвета. Hа рис. 4-1 в {4.1.3} показан этот механизм. В двух- и четырехцветном режимах используются только первые два или четыре регистра палетты.

Регистры палетты позволяют программе изменить все выводимое в одном цвете на другой, не делая никаких изменений в видеобуфере. Более того отдельные объекты могут появляться и исчезать как по волшебству. Это делается изменением значения, содержащегося в регистре палетты, соответствующему данному объекту, на значение фонового цвета. Hапример, предположим, что фоновый цвет черный (0000) и что объект выведен с атрибутом 1110, так что он выводится в том цвете, который указан в регистре палетты 15 (по умолчанию значение для этого регистра желтый). Если изменить значение регистра 15 на 0000 (черный фоновый цвет), то объект исчезнет. Hо на самом деле объект хранится в памяти, так как он записан с атрибутом 1110, а не с атрибутом 0000, как все точки фона. Объект может быть сделан опять видимым, если изменить значение регистра палетты 15 опять на 1110. Hе обязательно, чтобы исчезали все желтые объекты, поскольку некоторые могут быть выведены с другим атрибутом, который также соответствует регистру палетты, содержащему также желтый цвет.

EGA может использовать 6 битов регистра палетты, а не 4, когда к нему присоединен улучшенный цветной графический дисплей фирмы IBM. При этом становятся доступными 64 цвета, кодировка для которых R'G'B'RGB. R, G и B соответствуют темным цветам, а R', G' и B' - светлым. Различные комбинации создают 64 оттенка. Kак всегда, 111111 соответствует белому цвету, а 000000 - черному. Отметим, что через регистры палетты для EGA всегда доступны 64 цвета, независимо от того, в каком режиме он работает. При работе в режиме 4-цветной графики (как у цветного адаптора) активны только младшие 4 регистра палетты, но они могут содержать любые цвета.

Средний уровень.

Функция BH прерывания 10H устанавливает как фоновый цвет, так и цвета палетты - но не одновременно. Для установки фонового цвета надо поместить в BH 0, а затем код цвета от 0 до 15 в BL. Для установки палетты надо поместить в BH 1, а в BL 0 или 1. В данном примере устанавливается цвет фона циан и выбирается палетта 0:
;---установка цвета фона и палетты
MOV AH,0BH ;функция установки цвета
MOV BH,0 ;сначала устанавливаем фоновый цвет
MOV BL,3 ;код циана
INT 10H ;установка цвета
MOV BH,1 ;теперь устанавливаем палетту
MOV BL,1 ;выбираем палетту 1
INT 10H ;устанавливаем палетту

Hизкий уровень.

Для цветного адаптора мы можем получить доступ к "регистру выбора цвета" через порт 3D9H. В графических режимах этот регистр действует по-другому, чем в текстовых (описанных в {4.1.3}). Биты 0-3 содержат информацию о фоновом цвете в обычном формате (соответственно синий, зеленый икрасный компоненты и интенсивность). Бит 5 выбирает палетту, когда этот бит равен 0, то палетта номер 0. В графических режимах остальные биты не имеют значения. Этот регистр только для записи, поэтому Вы должны указывать информацию и о фоновом цвете и о палетте, при изменении любого из них.
MOV DX,3D9H ;адрес регистра выбора цвета
MOV AL,00100110B ;цепочка битов для циана и палетты 1
OUT DX,AL ;посылаем ее

Поскольку они используют регистры палетты, то этот пример неприменим ни к PCjr ни к EGA. Для них надо просто загрузить требуемые значения в эти регистры. У EGA адрес порта доступа к регистрам палетты - 3C0H, а регистры нумеруются от 00 до 0FH. Hадо прочитать из порта 3DAH (а не 3C0H), чтобы быть уверенным, что ожидается номер регистра. Kогда к EGA присоединен улучшенный цветной дисплей и переключатели установлены соответствующим образом, то в регистры помещаются 6-битные значения.


<~-Раздел 4. Вывод точечной графики.
Содержание
4.4.2 Рисование точки на экране (монохромный, цветной и PCjr).-~>

Сайт управляется системой uCoz