Рис з Шестнадцатеричный дамп текстового видеобуфера Атрибуты
Несмотря на то что во всех видеоподснстемах компьютеров семейств 1ВМ РС и РS/2 применяется один и тот же способ представления текстовых символов, способы интерпретации байтов атрибута различны. В общем, байт атрибута рассматривается как две тетрады. Младшая тетрада (биты 0 — 3) определяет основной атрибут переднего плана, т. е. цвет и яркость самого знака. Старшая тетрада (биты 4 — 7) представляет собой атрибут фона, хотя в некоторых случаях бит 7 может управлять мерцанием.
Четырехбитовые основные и фоновые атрибуты в конечном счете декоднруются в сигналы управления видеомонитором. В простейшем случае у адаптера СGА 4 бита соответствуют непосредственно трем цветовым сигналам и яркостному сигналу В других видеоподсистемах схема декодирования может быть и более сложной, как, например, в ЕGА.
Адаптер еgа
В 16-цветных текстовых режимах ЕСА использует формат байта атрибута, идентичный этому формату для СGА. Однако 4-битовые значения основного и фонового атрибутов непосредственно отображаемым цветам не соответствуют. Вместо этого каждое 4-битовое значение маскируется четырьмя младшими битами регистра разрешения цветовой плоскости (12Н) контроллера атрибутов, а 4-битовый результат указывает на один из шестнадцати регистров палитры EGA (рис. 5). Каждый бит 6-битового значения цвета, содержащегося в указанном регистре палитры, соответствует одному из 6 RGB-сигналов, управляющих монитором (рис. 6).
ЕGА-совместимый цветной монитор управляется шестью цветовыми сигналами — тремя основными (высокой интенсивности) и тремя дополнительными (низкой интенсивпосги). Все 64 комбинации этих шести сигналов появляются как различные цвета с различной или одинаковой итенсивностью. В 200-строчном цветном мониторе или в 200-строчном режиме ЕGA-совместимого монитора биты 0, 1 и 2 управляют цветовыми сигналами, а бит 4 — сигналом интенсивности.
4-битовый
атрибут
Логическое
И
Регистр
используемой цветовой матрицы
Регистры палитры 0-0FH
6-битовый цифровой сигнал,подаваемый на видеодисплей (по 2 бита для красного, зеленого, синего)
Рис. 5. Атрибуты и цвета адаптера ЕGА
Метод косвенного генерирования цвета через регистры палитры более сложен, нежели прямой метод адаптера CGA, но оказывается более гибким. Можно выбирать основные и фоновые цвета Рис. 6. Значения регистра палитры EGA и соответствующие цветовые сигналы для монитора. Номера контактов даются для 9-штырькового разъема адаптера EQA
Как в адаптерах CGA и MDA, старший бит каждого байта атрибута управляет мерцанием или интенсивностью цвета фона. Бит 3 регистра управления режимом контроллера атрибутов EGA (регистр 10H адресуется с помощью порта ЗС0Н) является битом разрешения мерцания. Установка .его в единицу разрешает мерцание, поэтому регистр палитры определяет только три младших бита тетрады фона (биты 4 — 6 байта атрибута). Таким образом, когда разрешено мерцание, для выбора цвета фона можно обращаться только к первым восьми регистрам палитры. Сброс бита разрешения мерцания запрещает мерцание, обеспечивая доступ ко всем 16 регистрам палитры (листинг 2).
Листинг 2. Сброс бита разрешенияМерцания для адаптеров MCGA, EGA и VGA
Когда с помощью BIOS адаптера EGA выбирается текстовый режим, в регистры палитры по умолчанию записываются соответствующие цветам CGA значения. Значения цветов во вторых восьми регистрах палитры являются яркими вариантами первых восьми. Таким образом, если рассматривать бит 7 байта атрибута символа как бит "интенсивности фона или мерцания", программа будет выполняться с адаптерами EGA и CGA.
Изменять содержимое любого регистра палитры можно как непосредственно, так и при помощи функции 10H прерывания INT 10H (листинг 3). Использовать процедуру BIOS более удобно, так как при этом устраняется необходимость написания аппаратно-зависимых программ. После того, если задана таблица значений соответствующих цветов, процедура BIOS может загрузить одновременно все 16 регистров палитры Тем не менее иногда, например в мультипликации, для быстрой смены цветов на экране может потребоваться непосредственное программирование регистров палитры.
mov |
ax, |
40h | |||||||
mov |
es, |
ax |
ES | ||||||
mov |
dx, |
es:[63h] |
DX | ||||||
add |
dl, |
6 |
DX | ||||||
push |
dx |
|
COX | ||||||
Cli |
|
|
| ||||||
in a I |
, dx |
|
сбс | ||||||
mov |
dl , |
OCOh |
атр DX | ||||||
mov |
al, |
PaletteRegNumber | |||||||
out |
dx, |
al |
изм | ||||||
mov |
al, |
PaletteRegValue | |||||||
out |
dx, |
al |
| ||||||
pop |
dx |
|
DX | ||||||
in a I |
, dx |
|
сбр | ||||||
mov |
dl, |
OCOh |
| ||||||
mov |
al, |
20h |
| ||||||
out |
dx. |
al |
уст адр |