{$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.