home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Games Machine 7
/
XENIATGM07.ISO
/
vesa
/
samples
/
savevesa.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1990-01-10
|
2KB
|
86 lines
{-----------------------------------------------------------------------}
{The following program is written to loosely conform to the VESA }
{Super VGA BIOS Extension document VS891001. The program is intended }
{as a demonstration and is not intended to be an example of a }
{high-performance implementations of the VESA standard. }
{If you find any omissions or errors, please report them to me on the }
{Everex Systems BBS at (415) 683-2984. }
{ Gary Lorensen }
{ Everex Systems, Inc. }
{ 48571 Milmont Dr. B3 }
{ Fremont, CA 94538 }
{-----------------------------------------------------------------------}
uses
dos;
{-----------------------------------------------------------------------}
{-----------------------------------------------------------------------}
var
buffsave : pointer;
buffsize : word;
vgafile : file;
reg : Registers;
{-----------------------------------------------------------------------}
{-----------------------------------------------------------------------}
begin
if (ParamCount<2) then begin
writeln('SAVEVESA parameters:');
writeln(' SAVEVESA -s filename : Save VGA state');
writeln(' SAVEVESA -r filename : Restore VGA state');
writeln;
halt(1);
end;
reg.AX := $4f04;
reg.CX := $000f;
reg.DL := $00;
intr($10,reg);
if (reg.AL<>$4f) then begin
writeln('Current configuration does not support VESA Save/Restore VGA State.');
halt(1);
end;
buffsize := reg.BX*$40;
GetMem(buffsave,buffsize);
if ((ParamStr(1)='-s') or (ParamStr(1)='-S')) then begin
reg.AX := $4f04;
reg.DL := $01;
reg.CX := $000f;
reg.ES := Seg(buffsave^);
reg.BX := Ofs(buffsave^);
intr($10,reg);
assign(vgafile,ParamStr(2));
rewrite(vgafile,1);
BlockWrite(vgafile,buffsave^,buffsize);
close(vgafile);
end else if ((ParamStr(1)='-r') or (ParamStr(1)='-R')) then begin
assign(vgafile,ParamStr(2));
reset(vgafile,1);
BlockRead(vgafile,buffsave^,buffsize);
close(vgafile);
reg.AX := $4f04;
reg.DL := $02;
reg.CX := $000f;
reg.ES := Seg(buffsave^);
reg.BX := Ofs(buffsave^);
intr($10,reg);
end;
FreeMem(buffsave,buffsize);
end.
{-----------------------------------------------------------------------}
{-----------------------------------------------------------------------}