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

Error message

Notice: Undefined index: add term path in hansel_get_breadcrumbs() (line 524 of /data/sites/msdosworld.ru/www/sites/all/modules/hansel/hansel.module).

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

   Высокий уровень.

   Когда цветной дисплей работает в графическом режиме, то Бейсик
обрабатывает  оператор COLOR по другому, чем в текстовом  режиме.
Сначала идет фоновый цвет, в виде  числа от 0 до 15, а затем идет
номер палетты 0 или 1.  Например, COLOR 2,1 устанавливает зеленый
фоновый цвет (#2)  для  всего  экрана  и  активизирует палетту 1.
После  этого три возможных основных цвета указываются их номерами
в палетте: 1 - циан, 2 - магента и 3 - белый (сравните с операто-
ром  PAINT).  Чтобы выключить цвет в режиме умеренного разрешения
напишите SCREEN ,1.  Отметим,  что использование только черного и
белого  цветов в режиме умеренного разрешения  не приводит к эко-
номии памяти. PCjr использует оператор COLOR таким образом только
в  режиме  SCREEN 1.  Для режимов от SCREEN 3 до SCREEN 6  формат
этого оператора COLOR основной,фоновый.  При этом основной цвет -
это число в диапазоне от 1 до 15 в 16-цветном режиме и от 1 до  3
- в 4-цветном. Он не должен быть равным 0, который всегда исполь-
зуется в качестве фонового цвета.
   Имеются специальные операторы для установки регистров палетты:
PALETTE и PALETTE USING. PALETTE устанавливает цвет соответствую-
щий любому атрибуты.  Например, PALETTE 9,11 приводит к тому, что
точки нарисованные с цветом палетты  9 (обычно светлосиний) будут
выведены в цвете 11 (светлый циан). Чтобы изменить установку всех
регистров палетты к их  первоначальному  значению, т.е. чтобы ре-
гистр 0 содержал 0, регистр 12 - 12 и т.д.  надо написать  просто
PALETTE. Отметим,  что  в  режимах  SCREEN  4 и SCREEN 6 регистры
палетты инициализируются таким образом, чтобы атрибуты цветов 1-3
были такими же, как для палетты 1 на цветном графическом дисплее.
Это делается в целях совместимости.
   Все 16 регистров палетты могут быть установлены одним операто-
ром PALETTE USING.  PALETTE  USING  направляет содержимое 16-эле-
ментного целого массива в регистры палетты.  Имея несколько таких
массивов программа может быстро переключать  различные схемы цве-
тов.   Каждый элемент массива должен быть числом в диапазоне от 0
до 15, или -1, в  последнем  случае  соответствующий  регистр  не
изменяется.   Например, для обращения привычной схемы цветов соз-
дайте массив, в котором  ARRAYNAME(0)  =  15, ARRAYNAME(1) = 14 и
т.д.  Затем напишите PALETTE USING ARRAYNAME(0) и содержимое мас-
сива ARRAYNAME будет передано в  регистры  палетты.  0 индицирует
начальную позицию в массиве, с которой надо брать данные посылае-
мые в регистры.  Могут  использоваться  более длинные массивы, из
которых  данные могут браться начиная с любой точки, при  условии
что до конца массива еще есть 16 элементов.  PALETTE USING ARRAY-
NAME(12) будет брать данные, начиная с 12-го байта массива. Отме-
тим, что оператор PALETTE USING работает как в текстовом, так и в
графическом режимах. Вот пример:


100 DEF INT A-Z         'все переменные целые
110 DIM SCHEME1(16)     'массив для схемы цветов #1
120 DIM SCHEME2(16)     'массив для схемы цветов #2
130 DATA 3,5,9,2,4,12,15,1,6,7,14,13,8,11,10,0
140 DATA 0,11,13,7,1,12,2,5,10,8,14,6,15,4,9,3
150 FOR N = 0 TO 15     'для каждого регистра палетты
160 READ Q              'прочитать код цвета
170 SCHEME1(N) = Q      'и поместить его в массив
180 NEXT                '
190 FOR N = 0 TO 15     'то же самое со вторым массивом
200 READ Q              '
210 SCHEME2(N) = Q      '
220 NEXT                '
230 PALETTE USING SCHEME1(0)  'установка регистров
 .
500 PALETTE USING SCHEME2(0)  'меняем их посреди программы

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

   Функция  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           ;устанавливаем палетту

   На PCjr эта функция работает точно  так же в 4-цветном режиме,
устанавливая  регистры  1-3 в одну из схем  цветов,  используемых
цветным адаптором. В 2-цветном режиме 0 в BL соответствует белому
цвету, как цвету 1, а 1 - черному.  Эта функция не влияет на наз-
начения, используемые в 16-цветном режиме. Однако во всех случаях
фоновый цвет может быть установлен засылкой в BH 0, а в BL - кода
цвета.

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

   Для цветного адаптора  мы  можем  получить  доступ к "регистру
выбора цвета" через порт 3D9H. В графических режимах этот регистр
действует по-другому, чем в текстовых (описанных в [4.1.3]). Биты
0-3 содержат информацию о фоновом цвете в обычном формате  (соот-
ветственно синий, зеленый  икрасный  компоненты и интенсивность).
Бит 5 выбирает палетту, когда этот бит равен 0, то палетта  номер
0.  В графических режимах остальные биты не имеют значения.  Этот
регистр только для записи, поэтому Вы должны указывать информацию
и о фоновом цвете и о палетте, при изменении любого из них.


   MOV  DX,3D9H          ;адрес регистра выбора цвета
   MOV  AL,00100110B     ;цепочка битов для циана и палетты 1
   OUT  DX,AL            ;посылаем ее

   Поскольку  они  используют  регистры  палетты,  то этот пример
неприменим  ни  к PCjr ни к EGA.  Для них надо  просто  загрузить
требуемые значения в эти регистры. У PCjr эти регистры нумеруются
от 10H до 1FH. Доступ ко всем регистрам осуществляется через один
порт с адресом 3DAH. Любое новое значение принимаемое этим портом
воспринимается  адресным регистром.  Поэтому надо послать сначала
номер регистра, а затем код цвета  для этого регистра. Чтобы быть
уверенным,  что  порт ожидает номер регистра  надо  прочитать  из
него. Например, чтобы поместить  яркосиний  цвет (1001) в регистр
палетты 2:

;---помещаем код яркосинего цвета в регистр палетты 2
   MOV  DX,3DAH         ;адрес массива ворот дисплея
   IN   AL,DX           ;читаем из него
   MOV  AL,12H          ;номер регистра
   OUT  DX,AL           ;посылаем номер регистра
   MOV  AL,00001001B    ;код яркосинего цвета
   OUT  DX,AL           ;посылаем цвет

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

Вы находитесь в разделе: 

Добавить коментарий