Исходная цветовая палитра
Построенная задача выведет на экран интересующие нас цвета при условии, что палитра установлена. Дело в том, что загрузку палитры при смене режимов работы видеокарты можно запретить, записав 1 в третий разряд слова с адресом оооо:С48Э из области данных BIOS. Обычно этот разряд очищен, и палитра загружается при любых изменениях режимов (как текстовых, так и графических). Одна из функций прерывания int юъ, относящихся к группе i2h, предназначена для разрешения или запрещения загрузки палитры. При ее вызове в регистре ы указывается код 3ih, а в регистре ai – 0 или 1.
Устанавливаемая DOS палитра в книге описана примерно так (это не цитата, а скорее вольный перевод оригинала). Первые 16 DAC-регистров содержат палитру для режима CGA, в следующих 16-ти регистрах записаны коды разных оттенков серого цвета. Затем располагаются три основные группы, занимающие по 72 регистра и содержащие коды цветов высокой, средней и низкой интенсивности. Каждая группа делится на 3 одинаковых подгруппы, содержащие коды цветов высокого, среднего и низкого насыщения. Последние восемь регистров просто очищены, им соответствует черная полоса. Тут автор книги допустил неточность, – фактически при установке палитры последние 8 регистров не заполняются. После включения компьютера они очищаются, но их содержимое могут изменить программы, работающие в графических режимах. Поэтому вместо черной полосы, соответствующей последним восьми линиям, вы можете увидеть другой цвет.
Описанная программа позволяет получить качественное представление о цветах палитры, установленной по умолчанию. Если вас интересуют точные значения, т. е. коды этих цветов, то придется составить собственную программу для распечатки содержимого базовых регистров. В следующем разделе рассмотрены функции BIOS, позволяющие определить содержимое любого DAC-регистра. Здесь мы опишем младшую часть устанавливаемой BIOS палитры, которая является палитрой CGA.
Стандартная палитра CGA
Установка и поддержка BIOS стандартной палитры CGA вызвана требованием совместимости с устаревшим программным обеспечением.
Программы, создававшиеся для IBM PC/XT и IBM PC/AT, должны выполняться на современных моделях ПК без каких-либо ограничений. Кроме того, палитра CGA нужна при работе в текстовых режимах, которые устанавливаются при первоначальной загрузке компьютера и DOS. Наконец, при описании функций BIOS очень часто приводятся коды цветов палитры CGA. В этом отношении рассматриваемые в данной книге примеры не являются исключением.
Содержимое первых 16-ти DAC-регистров (палитра CGA) показано в табл. 4.2. В ней перечислены коды, названия цветов и содержимое байтов соответствующих DAC-регистров. По интенсивности цвета делятся на две группы – , средняя и высокая интенсивность, соответственно таблица разделена па две половины (серый цвет является исключением). Коды – это шестнадцатиричные числа. Соответствие между ними и уровнями интенсивности в процентах такое: 3F – 100%, 2А – 67%, 15-33%.
Поскольку цвет точки зависит от содержимого соответствующего ее коду DAC-регистра, то в дальнейшем, говоря о конкретном цвете, мы будем приводить коды трех базовых цветов, хранящихся в указанной последовательности в байтах ода-регистра. Например, черному цвету соответствуют коды 0, 0, 0, а белому – коды 3F, 3F, 3F.
Таблица 4.2. Названия и коды цветов палитры CGA.
Код точки | Название цвета | Коды базовых цветов | ||
Красный | Зеленый | Синий | ||
0 | Черный | 00 | 00 | 00 |
1 | Синий | 00 | 00 | 2А |
2 | Зеленый | 00 | 2А ' | 00 |
3 | Циан | 00 | 2А | 2А |
4 | Красный | 2А | 00 | 00 |
5 | Фиолетовым | 2А | 00 | 2А |
6 | Коричневый | 2А | 15 | 00 |
7 | Белый | 2А | 2А | 2А |
8 | Серый | 15 | 15 | 15 |
9 | Синий | 15 | 15 | 3F |
D | Фиолетовый | 3F | 15 | 3F |
Е | Желтый | 3F | 3F | 15 |
F | Белый | 3F | 3F | 3F |
Сравните вторую половину табл. 4.2 с табл. 4.1. Вы увидите, что одноименным цветам в них соответствуют разные значения базовых цветов. Например – красному цвету высокой интенсивности в табл. 4.2 соответствует тройка кодов в 3F, 15, 15, а в табл. 4.1 – другой. Какой из них считать красным. А какой и не совсем красным? Еще один пример. В таблицах редактора CorelDrаw фиолетовому цвету средней интенсивности соответствуют коды 26, 00, 2б, а высокой интенсивности – 3F, 26, 3F. В табл. 4.2 для этих же названий цветов указаны другие значения.
Эти примеры иллюстрируют тот факт, что наше восприятие цвета весьма субъективно. То, что одному кажется фиолетовым цветом, другой склонен считать пурпурным. Кроме того, наша способность различать близкие цвета весьма индивидуальна. Разница в интенсивности двух близких цветов с кодами 26.00, 26 и 2А,00, 2А составляет всего 4/64 = 6.25% и вполне возможно, что" она будет неразличима для глаза.