Как вывести точку в VESA режимах?

Несколько вариантов вывода точки на экран в графических режимах:

procedure PutPixel(X, Y: Integer; Color: Byte);
var
  Offset: Longint;
  Bank: Integer;
begin
  if (X >= 0) and (Y >= 0) and (X < VesaMode.Width)
  and (Y < VesaMode.Height) then begin
    Offset := LongMul(Y, VesaMode.Width) + X;
    Bank := LongRec(Offset).Hi;
    if Bank <> LastBank then SetBank(Bank);
    case DrawMode of
    0: Mem[SegA000: LongRec(Offset).Lo] := Color;
    1: Mem[SegA000: LongRec(Offset).Lo] := 
                    Color xor Mem[SegA000:LongRec(Offset).Lo];
    2: Mem[SegA000: LongRec(Offset).Lo] := 
                    Color or Mem[SegA000:LongRec(Offset).Lo];
    end;
  end;
end;
 
Procedure Plot(x,y:integer; color:byte); assembler;
Asm
  mov bh,0
  mov cx,x { sets x coordinate }
  mov dx,y { sets y coordinate }
  mov al,color { sets color (0-255) }
  mov ah,0Ch { tells video to plot a point }
  int 10h
End;
 
procedure SetPixel(X, Y : Word; C : word);
var b,z1,z2,z3,q,w:longint;
    bnk:word;
 
begin
 if c<=255 then
  begin
   z1:=y;z2:=xmax;
   q:=z1*z2+x;
   z3:=memw[sos:ooo+6];
   z3:=z3*1024;
   if z3=0 then z3:=1;
   b:=q div z3;
   bnk:=b*bank;
   if oldbank<>b then
    begin
     asm
      mov ax,$4f05
      mov bx,0
      mov dx,bnk
      int $10
     end;
     oldbank:=b;
    end;
   if ((x<xmax) and (y<ymax)) then mem[$a000:q]:=c;
 end;
end;
 
procedure PutPixel(x,y:word;col:byte);assembler;
asm
       mov  ax,GraphResult
       cmp  ax,grOk
       jne  @L_END
       mov  ax,modeInfo.usBytesPerScanLine
       mul  y
       add  ax,x
       jnc  @LOOP1
       inc  dx
@LOOP1:
       mov  di,ax
       cmp  dx,WinPos
       je   @LOOP2
       mov  WinPos,dx
       xor  bx,bx
       call modeInfo.fpWinFunc
@LOOP2:
       mov  ax,ModeInfo.usBegSegA
       mov  es,ax
       mov  al,col
       mov  es:[di],al
@L_END:
End;
 
procedure PutPixel256(X,Y : word; C : byte);
begin
  asm
     mov ax,y
     mov bx,bytesPerLine
     mul bx
     add ax,x
     mov bx,0a000h
     mov es,bx
     mov si,ax
     mov al,dl
     and al,0fh
     mov dx,3d7h
     out dx,al
     mov al,byte ptr c
     mov es:[si],al
  end;
end;