mov di, fs: [si+OEh] di = размер Bitmap info
add di, OEh di = di + OEh, di содержит paddr
mov ax, fs: [si+OAh] ax = адрес начала образа рисунка
sub ax, di ах = размер палитры в байтах
mov bx, 04 полагаем pbpl = 4
cmp di, 36h заголовок формата Windows ?
jz @F -> да
dec Ы pbpl = 3
@ : xor dx, dx перед делением очищаем dx
div bx ах = количество строк в палитре
mov paddr, di ! ! сохраняем paddr (не обязательно)
mov pnline, ax !! сохраняем pnline (не обязательно)
Вычисленные величины сохраняются только в том случае, если работа с па-литрой будет производиться в другой подпрограмме. При этом переменные рaddr, pnline и pbpl надо описать в разделе данных задачи. Если же работа с палитрой выполняется в продолжении описываемой подпрограммы, то пе-речисленные переменные не нужны, мы их вводили только для удобства описания.
После выполнения примера А.6 из заголовка получена информация, необходимая для построения рисунка и работы с палитрой. Если вы не планируете включить установку или преобразование палитры в описываемую десь подпрограмму, то в конец текста примера А.б добавьте команду ret.
Дальнейшие манипуляции с палитрой зависят от установленного задачей видеорежима. Если это один их режимов PPG, то ее надо установить, а если это один из режимов direct color, то преобразовать в таблицу цветов, кото-рая нужна для построения рисунка.
Установка палитры заключается в записи перечисленных в ней цветов в регистры цвета видеокарты (DAC-регистры). Эти регистры доступны только При работе в видеорежимах PPG. При простой установке в регистры записываются коды всех цветов без их предварительного анализа. Недостаток та-кого способа в том, что в результате установки палитры добавляемого рисунка небольшого размера могут измениться цвета точек основного изобра-жения, находящегося на экране. Для более рационального использования регистров видеокарты перед установкой палитры могут выполняться анализ и преобразование добавляемых цветов. Эти вопросы подробно обсуждались в разделе, разделе и разделе основной части книги. Здесь мы ограничимся простым примером.
В разделе описан способ простой установки палитры, хранящейся в файлах формата PCX. Рассмотрим аналогичные действия для вмр-файлов.
Напомним, что для записи кодов базовых цветов в регистры цвета видеокарты используется одна из функций прерывания int 10h. Существуют две ее разновидности — для записи кода в один регистр и для записи кодов в группу регистров. Нас будет интересовать последняя, поскольку она позволяет установить всю палитру за одно обращение к BIOS.
Подробное описание функций BIOS приведено в разделе. Нужная нам функция имеет код 12h. Перед ее вызовом надо подготовить палитру так, чтобы в каждой ее строке было записано по 3 байта, содержащих базовые цвета, расположенные в порядке rgb, причем коды цветов должны быть сокращены до шести разрядов (два старших разряда кода BIOS игнорирует).
Программная реализация преобразования и простой установки палитры показана в примере А.7, который является продолжением примера А.6.