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


Режим 320х400 пикселов, 256 цветов - часть 5


mov ax,VGA_SEGMENT mov es,ax

xor di,di mov al,color

mov cx,32000 cld rep stosb

pop di } }

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

void LoadVGA256(void) {

RGB color_table[256]; unsigned char i, j; unsigned char far *ptr; 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; } }

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

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

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

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

SetVgaDAC(seg_table,off_table);

// функция SetVgaDAC загружает регистры таблицы цветов // цифро-аналогового преобразователя // исходный текст функции приведен при описании регистра // данных таблицы цветов ЦАП VGA (файл vga256.c) }

// // главная функция // void main( void ){

unsigned i; char ch = 13;

struct videoconfig vc;

// заполняем поля структуры vc

printf("\n (C) Frolov G.V., 1992 \n\n"); _getvideoconfig( &vc );

// завершаем программу если нет VGA адаптера

if(vc.adapter != _VGA) { printf("Для выполнения программы необходим" " адаптер VGA.\n");

exit(0); }

// устанавливаем режим 320х400 пикселов, 256 цветов

Set320x400Mode();

// загружаем регистры ЦАП VGA

LoadVGA256();

for(i = 0; i < 400; i++) WritePixel(160, (unsigned) i, (unsigned char) (i % 256) );

for(i = 0; i < 320; i++) WritePixel((unsigned) i, 200, (unsigned char) (i % 256) );

ch = getch(); if( ch == 27 ) exit(1);

for(i = 0; i < 320; i++) WritePixel((unsigned) i, (unsigned) i, (unsigned char) (i % 256) );

ch = getch();

for(i = 0; ((i < 256) && (ch != 27)); i++) { Full_Scr( (unsigned char) i ); ch = getch(); }

// возвращаемся в текстовый режим

_setvideomode(_DEFAULTMODE);

printf("Привет всем!!!\n"); }




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



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