Функция заполняет часть таблицы цветов значениями, соответствующими различным оттенкам серого цвета. Для каждого модифицируемого регистра таблицы цветов сначала читаются записанные в нем данные, а затем записываются обратно по следующему правилу: красного 30 - процентов, зеленого - 59 процентов и голубого - 11 процентов от считанного значения.
На входе: |
AH |
10h |
AL |
1Bh - установка палитры из градаций серого цвета |
|
BX |
Номер первого регистра таблицы цветов |
|
CX |
Количество модифицируемых регистров |
|
На выходе: |
Не используются |
Следующий пример демонстрирует, как преобразовать таблицу цветов для отображения различных градаций серого цвета. Модифицируются значения регистров таблицы цветов, имеющих номера от first_num до end_num:
mov ah,10h
mov al,1Bh
; Номер первого модифицируемого регистра
mov bx,first_num
; Номер последнего модифицируемого регистра
mov cx,end_num
; Определяем число изменяемых регистров
sub cx,bx
int 10h
Программа BIOSDAC демонстрирует использование функций BIOS для управления таблицей цветов. Исходный текст программы BIOSDAC представлен на листинге 5.5.
Листинг 5.5. Файл BIOSDAC.C
#include <conio.h>
#include <stdio.h>
#include <dos.h>
#include "sysp.h"
typedef struct _RGB_ {
unsigned char red;
unsigned char green;
unsigned char blue;
} RGB;
// Объявление функций
void main(void);
void SetVideoMode(unsigned char);
void SetVgaDAC(unsigned, unsigned);
void GrayScale(void);
//======================================================
// Главная функция
//======================================================
void main(void)
{
RGB color_table[256];
unsigned char i,j;
unsigned char far *ptr;
int error, x_num, y_num;
unsigned seg_table,off_table;
// Формируем новые значения для таблицы цветов
for(j = 0; j < 4; j++) {
for(i = 0; i < 64; i++) {