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


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


// если режим не установлен, завершаем выполнение программы

if(!error) exit(1);

ptr = (unsigned char far*) &color_table[0];

// определяем сегмент и смешение массива color_table

seg_table = FP_SEG(ptr); off_table = FP_OFF(ptr);

// загружаем новые значения в регистры таблицы цветов

SetVgaDAC(seg_table,off_table);

// выводим на экран вертикальные линии различного цвета, // процессор записывает данные непосредственно в видеопамять

// получаем в ptr указатель на начало видеопамяти

ptr = (unsigned char far*) (FP_MAKE(0xA000, 0x0));

// записываем данные непосредственно в видеопамять

for(y_num = 0; y_num < 200; y_num++) { for(x_num = 0; x_num < 320; x_num++) { *ptr = (unsigned char) x_num; ptr++; } }

// ожидаем нажатия на любую клавишу

getch();

// устанавливаем режим видеодаптера, используемый по умолчанию _setvideomode( _DEFAULTMODE ); }

/** *.Name SetVgaDAC * *.Title Запись регистров таблицы цветов * *.Descr Функция устанавливает новые значения для всех регистров * таблицы цветов. * * *.Proto void SetVgaDAC(unsigned seg_table, unsigned off_table) * *.Params unsigned seg_table - сегмент таблицы, содержащей новые * значения регистров таблицы цветов, * * unsigned off_table - смещение таблицы, содержащей новые * значения регистров таблицы цветов.

*.Return Не используется. * *.Sample vga256.c **/ void SetVgaDAC(unsigned seg_table, unsigned off_table) {

_asm {

; сохраняем регистры ds и es

push ds push es

; устанавливаем регистр es на начало оперативной памяти

xor ax,ax mov es,ax

; получаем адрес порта индексного регистра контроллера ЭЛТ ; (3B4h/3D4h), ; в монохромных режимах для адресации к индексному регистру ; используется порт с адресом 3B4h, а в цветных - порт 3D4h

mov dx,es:[463h]

; вычисляем адрес порта регистра состояния 1, ; в монохромных режимах для адресации к регистру состояния 1 ; используется порт с адресом 3BAh, а в цветных - порт 3DAh

add dx,6

pop es

; ожидаем начало обратного вертикального хода луча

in al,dx nop nop

; если бит D3 равен единице, то происходит обратный ; вертикальный ход луча




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



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