Программирование видеоадаптеров CGA, EGA и VGA


Регистр данных таблицы цветов (Look-up Table Data Register - LTDR)


Регистр используется для получения доступа к регистрам таблицы цветов. Для чтения из (записи в) таблицы цветов необходимо три раз прочитать (записать) содержимое регистра данных. При этом каждый раз считывается (записывается) шесть очередных битов. Первые шесть битов отвечают за интенсивность красного, вторые - зеленого и третьи - голубого цвета.

Нельзя прерывать цикл чтения регистров таблицы цветов, состоящий из трех операциий чтения, выполнением операции записи в другой регистр таблицы и наоборот. Во время доступа к данному регистру прерывания должны быть запрещены. Между операциями доступа к регистрам таблицы цвета должен существовать временной интервал не менее 240 наносекунд.

  • D5-D0 Данные для обмена с регистрами таблицы цветов.
  • D7-D6 Не используется.

Следующая программа записывет новые значения в таблицу цветов непосредственно через регистры цифро-аналогового преобразователя VGA. На экране дисплея отображается пять вертикальных полос различного цвета. Каждая полоса состоит из 64 вертикальных линий. Интенсивность цвета этих линий плавно уменьшается слева на право.

// программа демонстрирует использование регистров таблицы цветов

#include <conio.h> #include <stdio.h> #include <graph.h> #include "sysp.h" #include "sysgraph.h" #include <dos.h>

void SetVgaDAC(unsigned, unsigned);

viod main(void) {

struct videoconfig vc; // структура описана в graph.h RGB color_table[256]; unsigned char i, j; unsigned char far *ptr; int error, x_num, y_num; unsigned seg_table,off_table;

// записываем в массив color_table новые значения для // регистров таблицы цветов

for(j = 0; j < 4; j++) { for(i = 0; i < 64; i++) { (color_table[i+j*64]).red = (j == 0) ? i : 0; (color_table[i+j*64]).green = (j == 1) ? i : (j == 3) ? i : 0; (color_table[i+j*64]).blue = (j == 2) ? i : (j == 3) ? i : 0; } }

// устанавливаем режим видеоадаптера номер 13h (256 цветов) // данный режим поддерживается только VGA и Super VGA

error = _setvideomode( _MRES256COLOR );




Начало  Назад  Вперед



Книжный магазин