push es push di
les di, dword ptr mi mov ax, 4F01h mov cx, mode int 10h pop di
4. Работа с основными графическими устройствам
pop es
}
#else
asm {
push di
mov di, word ptr mi mov ax,4F01h mov cx, mode int 10h pop di
}
#endif
return _AX == 0x004F;
)
int setVESAMode ( int mode )
{
if ( ifmdVESAMode ( mode, curMode ) ) return 0;
granularity = 64 / curMode.winGranularity; asm {
mov ax, 4F02h mov bx, mode int 10h
}
return _AX == 0x004F;
}
int getVESAMode () {
asm {
mov ax, 4F03h int 10h
}
if (_AX!=0x004F ) return 0;
else
return JBX;
}
void setVESABank ( int start )
{
if ( start == curBank ) return;
curBank = start; start *= granularity;
asm {
mov ax, 4F05h
mov bx, 0
mov dx, start
push dx
Компьютерная графика. Полигональные модели
int 10h
mov bx, 1
pop dx
int 10h
}
}
void writePixel (int x, int y, int color)
{
long addr = (long)curMode.bytesPerScanLine * (long)y +
(long)x;
setVESABank ( HIWORD ( addr)); pokeb ( OxAOOO, LOWORD ( addr), color);
}
main () {
VESAInfo vi;
if (IfindVESA ( vi )) {
printf ("\nVESA VBE not found." ); exit ( 1 );
}
if (IsetVESAMode ( VESA_640x480x256 )) exit ( 1 );
for (int i = 0; i < 640; i++ )
for(intj = 0;j<480;j++)
writePixel (i, j, ((i/20)+1)*fl/20+1));
getch ();
}
При помощи функции fmdVESA можно получить информацию о наличии BIOS, а также узнать все режимы, доступные для данной карты.
Функция findVESAMode возвращает информацию о режиме в полях ст pbiVESAModelnfo.
Укажем наиболее важные поля.
Поле |
Размер в байтах |
Комментарий |
modeAttribut.es |
Характеристики режима: бит 0 - режим доступен, бит 1 - режим зарезервирован, бит 2 - BIOS поддерживает вывод в этом режі бит 3 - режим цветной, бит 4 - режим графический |
|
winBAttributes | I |
Характеристики банка В |
winGranularity |
Шаг установки банка в килобайтах |
|
win Size |
Размер банка |
4. Работа с основными графическими устройств
winAAttributes |
Характеристики банка А: бит 0 - банк поддерживается, бит 1 - из банка можно читать, бит 2 - в банк можно писать |
|
winASegment |
Сегментный адрес банка А |
|
winBSegment |
Сегментный адрес банка В |
|
bytesPerScanLine |
Количество байт под одну строку |
|
bitsPerPixel |
Количество бит, отводимых под 1 пиксел |
|
numberOffianks |
Количество банков памяти |
Приведем программу, выдающую информацию по всем доступным VE режимам.