Справочник программиста на персональном компьютере фирмы IBM. Вывод на терминал - Установка атрибутов/цветов символов
ОГЛАВЛЕНИЕ
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 показана начальная установка регистров палетты
для всех регистров, кроме регистра для зеленого цвета, который
изменен так, чтобы выводился цвет магента.