}
int findVGA () {
asm {

mov ax, 1А00И int 10h

}
return _AL == 0x1 A;
}
void setVideoMode ( int mode ) {
asm {
mov ax, mode int 10h
}
}
void setVisiblePage ( int page ) {
asm {
mov ah, 5
mov al, byte ptr page
int 10h
}
}
char far * findROMFont ( int size ) {
int b = (size==16?6:2);
asm {
push es
push bp
mov ax, 1130h
mov bh, byte ptr b
mov bl, 0
int 10h
mov ax, es
mov bx, bp
pop bp
pop es
}
^ return (char far *) MK_FP ( _AX, _BX ); void setPalette ( RGB far * palette, int size ) asm {
push es

Компьютерная графика. Полигональные модели

mov ax, 1012h
mov bx, 0 // first color to set
mov cx, size // # of colors
les dx, palette // ES:DX == table of
int 10h // color values
pop es
}
}
void getPalette ( RGB far * palette ) {
asm{'
push es
mov ax, 1017h
mov bx, 0 // from index
mov cx, 256 // # of pal entries
les dx, palette
int 10h
pop es
}
}

Функции fmdEGA и findVGA позволяют определить наличие EGA- или VGA-совместимой видеокарты.

Для установки нужного режима можно воспользоваться процедурой setVideoMode.

Функция findROMFont возвращает адрес системного шрифта заданного размера (8, 14 или 16 пикселов высоты).

Функция setPalette служит для установки палитры и является аналогом функции setrgbpalette.

Функция getPalette возвращает текущую палитру (256 цветов).

4.7. Шестнадцатицветные режимы адаптеров EGA и VGA

Для 16-цветных режимов под каждый пиксел изображения необходимо выделить 4 бита видеопамяти (24 = 16). Однако эти 4 бита выделяются не последовательно в одном байте, а разнесены в 4 разных блока (цветовые плоскости) видеопамяти.

Вся видеопамять карты (обычно 256 Кбайт) делится на 4 равные части, называемые цветовыми плоскостями. Каждому пикселу ставится в соответствие по одному биту в каждой плоскости, причем все эти биты одинаково расположены относительно ее начала.

Обычно цветовые плоскости представляют параллельно расположенными одна над другой, так что каждому пикселу соответствует 4 бита, расположенных друг под другом (рис. 4.7).


⇐ Предыдущая| |Следующая ⇒