No need to use their standards, just use interrupt 10h to do that, I show you how to program VESA 1.2 because VESA 2.0 is protected mode programing.
1. You need to gather information about requested graphics mode,
2. you must initialize that mode,
3. switch bank, if needed (in VESA you have access to memory across bank)
4. draw
I give you some code in Pascal/Assembler:
CODE
TModeInfo = Record
ModeAttributes :Word;
WinAAttributes :Byte;
WinBAttributes :Byte;
WinGranularity :Word;
WinSize :Word;
WinASegment :Word;
WinBSegment :Word;
BankSwitch :Pointer;
BytesPerScanLine :Word;
XResolution :Word;
YResolution :Word;
Reserved :Array[0..233] of Byte;
End;
Var
ActualBank :Word;
BankSwitch :Pointer;
{/---------------------------------------------------------------------------
Name: GetModeInfo(Mode: Integer; ModeInfo: TModeInfo)
Desc:
Exp.: GetModeInfo($114,ModeInfo); $114 = 800x600 (64K Colors)
/---------------------------------------------------------------------------}
Procedure GetModeInfo(Mode: Integer; ModeInfo: TModeInfo); Assembler;
Asm
push es
push di
push cx
les di, ModeInfo
mov cx, Mode
mov ax, 4F01h
int 10h
mov ax, word ptr es:[di+0].(TModeInfo).BankSwitch
mov word ptr [BankSwitch+0], ax
mov ax, word ptr es:[di+2].(TModeInfo).BankSwitch
mov word ptr [BankSwitch+2], ax
pop cx
pop di
pop es
End; { GetModeInfo }
{/---------------------------------------------------------------------------
Name: SetVesaMode(Mode: Integer)
Desc:
Exp.: SetVesaMode($114);
/---------------------------------------------------------------------------}
Procedure SetVesaMode(Mode: Integer); Assembler;
Asm
push bx
mov bx, Mode
mov ax, 4F02h
int 10h
pop bx
End; { SetVesaMode }
This is pure assembler procedure, in Pascal you need write their prototype.
CODE
;/---------------------------------------------------------------------------
; Name: Vesa_PutPixel_800x600x64
; Desc:
;/---------------------------------------------------------------------------
Vesa_PutPixel_800x600x64 PROC FAR USES ebx ecx edx esi edi es, \
x :DWORD, y :DWORD, r :BYTE, g :BYTE, b :BYTE
mov eax, y
mov ebx, eax
mov edx, eax
shl eax, 10
shl ebx, 9
shl edx, 6
add eax, ebx
add eax, edx
mov ecx, x
shl ecx, 1
add eax, ecx
mov esi, eax
shr esi, 16
mov cx, si
mov ebx, esi
shl ebx, 16
sub eax, ebx
mov di, ax
mov ax, ActualBank
cmp ax, cx
je @@1
xor bx, bx
mov dx, cx
call dword ptr [BankSwitch]
@@1: mov ax, 0A000h
mov es, ax
mov si, di
mov al, r
shl ax, 6
add al, g
shl ax, 5
add al, b
mov word ptr es:[si], ax
mov ActualBank, cx
RET
Vesa_PutPixel_800x600x64 ENDP
Reply