}
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).