UNIT VESA256;

                               INTERFACE

uses dos,crt,vesatype;

type TRGB=record
R,G,B:byte;
end;

procedure VClrScr(col:byte);
procedure VPutPixel(x,y:word;col:byte);
procedure SavePal(p:pointer);
Procedure setPal(p:pointer);

   IMPLEMENTATION

var CurWin:word;
procedure SetBank;assembler;
 asm
  pusha
  xor bx,bx
  mov dx,[curwin]
  call [ModeInfo.VMC]
  mov [CurWin],dx
  popa
 end;

procedure VClrScr(col:byte);
 begin
  asm
   cmp [IsVESA],0
   je @exit
   jmp @beg

@NextWin:
inc [curwin]
call SetBank
retn

@beg:
   mov [curwin],0
   call SetBank
   mov ax,0A000h
   mov es,ax
   xor di,di
   mov ax,[ModeInfo.Width]
   mul [ModeInfo.Height]
   mov cx,dx
   mov dx,ax
   mov al,col
   mov ah,col
@l1:
   push cx
   mov cx,32768
   rep stosw
   call @nextwin
   pop cx
   loop @l1
   mov cx,dx
   rep stosb
@exit:
  end;
 end;

{  procedure SetRGBColor(index:byte;RGB:TRGB);
  begin
  end;
}
procedure SavePal(p:pointer);
begin
  asm
   mov ax,1017h
   xor bx,bx
   mov cx,0ffh
   les dx,p
   int 10h
  end;
   end;

 Procedure setPal(p:pointer);begin
  asm
  mov ax,1012h
  xor bx,bx
  mov cx,0ffh
  les dx,p
  int 10h
  end;
   end;

procedure VPutPixel(x,y:word;col:byte);
begin
 asm
   cmp [IsVESA],0
   je @exit
   mov ax,[y]
   mul [ModeInfo.width]
   add ax,[x]
   adc dx,0
   mov di,ax
   cmp dx,[curwin]
   je @next
   mov [CurWin],dx
   call SetBank
@next:
   mov ax,0A000h
   mov es,ax
   mov al,col
   stosb
@exit:
 end;
end;

end.