Страница 5 из 47
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 показана начальная установка регистров палетты для всех регистров, кроме регистра для зеленого цвета, который изменен так, чтобы выводился цвет магента.
|