{$I386_INTEL}
USES GO32;
VAR  VideoBuffer : pointer;

 PROCEDURE Pixel(destiny : pointer; x,y : longint; color : byte);
 BEGIN
  if (x<0) or (x>319) or (y<0) or (y>199) then exit;
  ASM
    mov edi,destiny

    add edi,x          { In unserem Videobuffer um x-Bytes weiter }
    mov eax,320
    imul y             { Und um y*320 Bytes weiter }
    add edi,eax

    mov al,color
    mov [edi],al       { Pixel setzen }
  END ['EDI', 'EAX', 'EDX'];
 END;


 PROCEDURE InitVGAMode(mode : word);
  Var regs : trealregs;
 BEGIN

  regs.ax:=mode;
  Realintr($10,regs);

 END;


BEGIN

  getmem(videobuffer,64000);
  initvgamode($13);                         { 320x200,256 }

  pixel(videobuffer,160,100,1);             { PIXEL IN BUFFER SETZEN }
  dosmemput($a000,0,videobuffer^,64000);    { BUFFER AN $a000:0 KOPIEREN }

  readln;
  initvgamode($3);                          { TEXTMODUS }
  freemem(videobuffer,64000);

END.