Справочник программиста на персональном компьютере фирмы IBM. Вывод на терминал
Страница 5. Установка атрибутов/цветов символов



     4.1.3 Установка атрибутов/цветов символов.


   Когда  дисплей  установлен в текстовый режим в любой из  видео
систем, то каждой позиции  символа  на экране отводится два байта
памяти.   Первый байт содержит номер кода ASCII кода  символа,  а
второй - атрибуты символа.  Цветной адаптер и PCjr могут выводить
в  цвете,  как сам символ, так и всю область, отведенную  данному
символу (фоновый  цвет).   Монохромный  адаптер  ограничен только
черным  и  белым цветом, но он  может  генерировать  подчеркнутые
символы, чего не могут делать  цветной  адаптер  и PCjr.  Все три
системы могут выдавать мигающие символы и негативное изображение.
Все три системы могут также создавать символы с высокой интенсив-
ностью,  хотя для цветного адаптера и PCjr  повышенная  интенсив-
ность символа на  самом  деле  приводит  к  другому цвету (восемь
основных  цветов  имеют версии с повышенной  интенсивностью,  что
дает набор 16 цветов).  EGA  умеет  делать все, что могут все ос-
тальные системы и многое другое. В частности, на улучшенном дисп-
лее он может  выводить  подчеркнутые  цветные  символы, поскольку
матрица изображения символов 8*14 дает такую возможность.

   Атрибуты цвета:
   Для  указания цветов экрана одни и те же номера кодов  исполь-
зуются в Бейсике и прерываниями операционной системы. Они такие:

          0 - черный                  8 - серый
          1 - синий                   9 - голубой
          2 - зеленый                10 - светлозеленый
          3 - циан                   11 - светлый циан
          4 - красный                12 - светлокрасный
          5 - магента                13 - светлая магента
          6 - коричневый             14 - желтый
          7 - белый                  15 - яркобелый

Младшие четыре бита  байта  атрибутов  устанавливают  цвет самого
символа  (бит 3 включает высокую интенсивность).   Следующие  три
бита устанавливают фон  символа.   И  при обычных обстоятельствах
старший бит включает и выключает мигание. Таким образом:

когда бит 0 = 1, синий включается в основной цвет
          1 = 1, зеленый включается в основной цвет
          2 = 1, красный включается в основной цвет
          3 = 1, символ выводится с высокой интенсивностью
          4 = 1, синий включается в фоновый цвет
          5 = 1, зеленый включается в фоновый цвет
          6 = 1, красный включается в фоновый цвет
          7 = 1, символы мигают

   Биты  0-2  и 4-6 содержат одни и те же компоненты  цветов  для
самих символов и фона.  Эти трехбитные группы позволяют 8 возмож-
ных  комбинаций.  Когда включается бит высокой интенсивности,  то
добавляются еще 8 цветов. Шестнадцать возможных цветов получаются
из этих установок битов следующим образом:

   Красный  Зеленый  Синий  Низкая интенсивность  Высокая

      0        0       0        черный            серый
      0        0       1        синий             светлосиний
      0        1       0        зеленый           светлозеленый
      0        1       1        циан              светлый циан
      1        0       0        красный           светлокрасный
      1        0       1        магента           светлая магента
      1        1       0        коричневый        желтый
      1        1       1        белый             яркобелый

Можно  иметь 16 цветов и для фонового цвета.  В этом случае бит 7
должен служить указателем  высокой  интенсивности  для фона, а не
указателем мигания символов.  Для цветного адаптера надо изменить
бит 5 порта с адресом 3D8H в 0, как показано ниже. Поскольку этот
порт  доступен  только для записи, то все остальные  биты  должны
быть  переустановлены.  Эта  возможность  доступна  только в двух
случаях:  текстовых режимов с 40 и с 80 символами в строке.   Для
режима с 80 символами надо послать в порт число 9, а для режима с
40  символами  - число 8.  Чтобы вернуть мигание надо добавить  к
обоим этим значениям 32. Для PCjr надо сбросить в 0 бит 1 регист-
ра 3 массива ворот дисплея.  Все остальные биты должны быть равны
нулю, кроме номера 3, который  должен  быть установлен для режима
двухцветной графики. Кроме этого режима, для установки бита мига-
ния надо сначала прочитать порт с адресом 3DAH, чтобы подготовить
массив  ворот дисплея, затем послать в него 3, чтобы указать  ре-
гистр, и затем послать 0, чтобы  установить  бит мигания. При за-
вершении  программы всегда надо восстанавливать мигание, так  как
следующая программа может полагаться на это.
   EGA также может  разрешать/запрещать мигание, хотя в этом слу-
чае  адрес  порта 3C0H.  Сначал надо прочитать порт  3DAH,  чтобы
получить доступ к адресному регистру в 3C0H. затем надо послать в
3C0H  10H, чтобы указать соответствующий регистр.  Наконец,  надо
послать данные по тому же адресу.   Поскольку этот регистр только
для записи, то все биты должны быть правильно установлены.  Мига-
ние включается установкой  бита  3,  а  выключается сбросом этого
бита.   Все остальные биты в цветном текстовом режиме должны быть
равны 0.
   Для цветного адаптера, когда  символы  выводятся  на дисплей в
цветном графическом режиме, то они изображаются в текущем фоновом
цвете.  Операторы, которые выводят на экран, как в Бейсике, так и
в  MS DOS (прерывание 21H) ограничены выводом символов в  третьем
цвете используемой палетты  (имеются две палетты из трех цветов -
см.  [4.4.1]). В палетте 0 символы желтые/коричневые, а в палетте
1 они белые.  Процедуры  вывода  символов  BIOS (прерывание 10H),
однако,  могут  указать любой из трех цветов палетты.   С  другой
стороны, для PCjr, цвет назначенный  определенной позиции палетты
может быть изменен, поэтому для вывода символов могут использова-
ны любые цвета.
   Для  PCjr  цвета соответствующие данным кодовым номерам  могут
быть изменены.  Каждый кодовый номер связан с регистром палетты в
массиве ворот дисплея [4.1.1].  Эти регистры пронумерованы от 10H
до 1FH, что соответствует кодам  от  0 до 15. Каждый 4-битный ре-
гистр  содержит  число  в диапазоне  0-15,  которое  представляет
реальный цвет, выводимый когда  оператор программы встречает один
из  кодовых номеров.  Например, если в каком-то  месте  программы
указано, что символ  должен  выводиться  с  кодовым номером 0, то
цвет  выводимого символа определяется кодом цвета,  хранящемся  в
регистре палетты 0. Начальное  значение этого регистра 0000, поэ-
тому будет выводиться черный цвет.  Но содержимое этого  регистра
может быть изменено,  скажем,  на  0001,  а в этом случае кодовый
номер  0 приведен к выводу синим цветом.  Кодовые номера, исполь-
зуемые в регистрах палетты такие же,  как и в операторах програм-
мы.  На рис.  4-1 показана начальная установка регистров  палетты
для всех регистров,  кроме  регистра  для зеленого цвета, который
изменен так, чтобы выводился цвет магента.

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