granularity = 64 / curMode.winGranularity;
asm {
mov ax, 4F02h mov bx, mode * int 10h
}
return _AX== 0x004 F;
}
int getVESAMode ()
{
asm {
mov ax, 4F03h int 10h
}
if (_AX != 0x004F ) return 0;
else
return __BX;
}
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

4. Работа с основными графическими устройствами

pop dx int 10h
}
}
void writePixel (int x, int y, int color)
{
long addr = (long)curMode.bytesPerScanLine * (long)y +
(long)(x«1);
SetVESABank ( HIWORD ( addr)); . poke ( OxAOOO, LOWORD ( addr), color);
}
main () {
VESAInfo info;
if (IfindVESA (info )) {
printf ("VESA VBE not found"); return 1;
}
if (IsetVESAMode ( VESA_640x480x32K )) {
printf ("Mode not supported"); return 1;
}
for (int i = 0; i < 256; i++ ) for (int j = 0; j < 256; j++ )
{
writePixel ( 320-i, 240-j, RGBCoior ( O.j.i)); writePixel ( 320+i, 240-j, RGBCoior (i.j.i)); writePixel ( 320+i, 240+j, RGBCoior (j.i.i)); writePixel ( 320-i, 240+j, RGBCoior (j.O.i));
}
ge'tch (); } *

4.10.2. Стандарт VBE 2.0 (VESA BIOS Extension 2.0)

Одним из существенных неудобств при работе с SVGA-адаптерами является неходимость все время отслеживать границы банков памяти и осуществлять их исключение. Было бы гораздо удобнее иметь в своем распоряжении линейный блок мяти необходимой длины и работать с ним безо всякого переключения банков (но гда приложение для работы с линейным блоком памяти необходимой длины лжно использовать 32-разрядную адресацию).

Стандарт VBE 2.0 как раз и предоставляет такую возможность для 32-разрядных иложепии, применяющих защищенный режим процессора (БРМ132-приложения). структуру VESAModelnfo включено несколько дополнительных полей, одним из Компьютерная графика. Полигональные модели которых является физический адрес линейного блока видеопамяти. Используя функции DPMI (DOS Protected Mode Interface), можно преобразовать этот физический адрес в указатель на линейный блок видеопамяти и работать с ним, уже не думая о банках видеопамяти.


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