mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-13 13:59:07 +02:00
+ stores IDE screen before Switching for DOS
This commit is contained in:
parent
3527bd4fd0
commit
207bcce918
@ -72,8 +72,10 @@ type
|
|||||||
procedure SwitchBack; virtual;
|
procedure SwitchBack; virtual;
|
||||||
private
|
private
|
||||||
VideoInfo : TDOSVideoInfo;
|
VideoInfo : TDOSVideoInfo;
|
||||||
VBufferSize : word;
|
VBufferSize : longint;
|
||||||
|
VIDEBufferSize : longint;
|
||||||
VBuffer : PByteArray;
|
VBuffer : PByteArray;
|
||||||
|
VIDEBuffer : PByteArray;
|
||||||
TM : TDOSVideoInfo;
|
TM : TDOSVideoInfo;
|
||||||
function GetLineStartOfs(Line: integer): word;
|
function GetLineStartOfs(Line: integer): word;
|
||||||
procedure GetBuffer(Size: word);
|
procedure GetBuffer(Size: word);
|
||||||
@ -252,12 +254,30 @@ begin
|
|||||||
{$endif}
|
{$endif}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TDOSScreen.SwitchTo;
|
procedure TDOSScreen.SwitchTo;
|
||||||
var
|
var
|
||||||
VSeg,SOfs: word;
|
VSeg,SOfs: word;
|
||||||
begin
|
begin
|
||||||
GetVideoMode(TM);
|
GetVideoMode(TM);
|
||||||
|
{ First keep a copy of IDE screen }
|
||||||
|
if VideoInfo.Mode=7 then
|
||||||
|
VSeg:=SegB000
|
||||||
|
else
|
||||||
|
VSeg:=SegB800;
|
||||||
|
SOfs:=MemW[Seg0040:$4e];
|
||||||
|
if not assigned(VIDEBuffer) or (VIDEBufferSize<>TM.ScreenSize) then
|
||||||
|
begin
|
||||||
|
if assigned(VIDEBuffer) then
|
||||||
|
FreeMem(VIDEBuffer,VIDEBufferSize);
|
||||||
|
GetMem(VIDEBuffer,TM.ScreenSize);
|
||||||
|
VIDEBufferSize:=TM.ScreenSize;
|
||||||
|
end;
|
||||||
|
{$ifdef FPC}
|
||||||
|
DosmemGet(VSeg,SOfs,VIDEBuffer^,TM.ScreenSize);
|
||||||
|
{$else}
|
||||||
|
Move(ptr(VSeg,SOfs)^,VIDEBuffer^,TM.ScreenSize);
|
||||||
|
{$endif}
|
||||||
|
|
||||||
SetVideoMode(VideoInfo);
|
SetVideoMode(VideoInfo);
|
||||||
|
|
||||||
if VideoInfo.Mode=7 then
|
if VideoInfo.Mode=7 then
|
||||||
@ -274,9 +294,22 @@ end;
|
|||||||
|
|
||||||
|
|
||||||
procedure TDOSScreen.SwitchBack;
|
procedure TDOSScreen.SwitchBack;
|
||||||
|
var
|
||||||
|
VSeg,SOfs: word;
|
||||||
begin
|
begin
|
||||||
Capture;
|
Capture;
|
||||||
SetVideoMode(TM);
|
SetVideoMode(TM);
|
||||||
|
if VideoInfo.Mode=7 then
|
||||||
|
VSeg:=SegB000
|
||||||
|
else
|
||||||
|
VSeg:=SegB800;
|
||||||
|
SOfs:=MemW[Seg0040:$4e];
|
||||||
|
if assigned(VIDEBuffer) then
|
||||||
|
{$ifdef FPC}
|
||||||
|
DosmemPut(VSeg,SOfs,VIDEBuffer^,TM.ScreenSize);
|
||||||
|
{$else}
|
||||||
|
Move(VIDEBuffer^,ptr(VSeg,SOfs)^,TM.ScreenSize);
|
||||||
|
{$endif}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -669,7 +702,10 @@ end;
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.9 2000-02-04 23:17:25 pierre
|
Revision 1.10 2000-03-13 20:30:37 pierre
|
||||||
|
+ stores IDE screen before Switching for DOS
|
||||||
|
|
||||||
|
Revision 1.9 2000/02/04 23:17:25 pierre
|
||||||
* Keep the entry ScreenBuffer at exit
|
* Keep the entry ScreenBuffer at exit
|
||||||
|
|
||||||
Revision 1.8 1999/12/01 16:17:18 pierre
|
Revision 1.8 1999/12/01 16:17:18 pierre
|
||||||
|
Loading…
Reference in New Issue
Block a user