mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-20 13:09:15 +02:00
* screen updates speeded up
This commit is contained in:
parent
77f776b7f0
commit
81ea9d1a5b
@ -39,6 +39,7 @@ var OrigCurType: TVioCursorInfo;
|
|||||||
OrigCurRow: word;
|
OrigCurRow: word;
|
||||||
OrigCurCol: word;
|
OrigCurCol: word;
|
||||||
CellHeight: byte;
|
CellHeight: byte;
|
||||||
|
OldVideoBuf: PVideoBuf;
|
||||||
|
|
||||||
procedure TargetEntry;
|
procedure TargetEntry;
|
||||||
|
|
||||||
@ -165,6 +166,9 @@ procedure InitVideo;
|
|||||||
var MI: TVioModeInfo;
|
var MI: TVioModeInfo;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
if InitVideoCalled then
|
||||||
|
FreeMem (OldVideoBuf, VideoBufSize);
|
||||||
|
OldVideoBuf := nil;
|
||||||
InitVideoCalled := true;
|
InitVideoCalled := true;
|
||||||
VideoBufSize := 0;
|
VideoBufSize := 0;
|
||||||
MI.cb := SizeOf (MI);
|
MI.cb := SizeOf (MI);
|
||||||
@ -189,6 +193,8 @@ begin
|
|||||||
VideoBuf := SelToFlat (TFarPtr (VideoBuf));
|
VideoBuf := SelToFlat (TFarPtr (VideoBuf));
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
SetHighBitBlink (true);
|
SetHighBitBlink (true);
|
||||||
|
GetMem (OldVideoBuf, VideoBufSize);
|
||||||
|
Move (VideoBuf^, OldVideoBuf^, VideoBufSize);
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
ErrorHandler (errVioInit, nil);
|
ErrorHandler (errVioInit, nil);
|
||||||
@ -292,6 +298,8 @@ begin
|
|||||||
VioSetState (OrigHighBit, 0);
|
VioSetState (OrigHighBit, 0);
|
||||||
VioSetCurType (OrigCurType, 0);
|
VioSetCurType (OrigCurType, 0);
|
||||||
VioSetCurPos (OrigCurRow, OrigCurCol, 0);
|
VioSetCurPos (OrigCurRow, OrigCurCol, 0);
|
||||||
|
FreeMem (OldVideoBuf, VideoBufSize);
|
||||||
|
OldVideoBuf := nil;
|
||||||
VideoBufSize := 0;
|
VideoBufSize := 0;
|
||||||
InitVideoCalled := false;
|
InitVideoCalled := false;
|
||||||
if (OrigScreenSize <> 0) and (OrigScreen <> nil) then
|
if (OrigScreenSize <> 0) and (OrigScreen <> nil) then
|
||||||
@ -396,19 +404,55 @@ procedure ClearScreen;
|
|||||||
|
|
||||||
begin
|
begin
|
||||||
VioScrollDn (0, 0, word (-1), word (-1), word (-1), PWord (@EmptyCell)^, 0);
|
VioScrollDn (0, 0, word (-1), word (-1), word (-1), PWord (@EmptyCell)^, 0);
|
||||||
|
Move (VideoBuf^, OldVideoBuf^, VideoBufSize);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{$ASMMODE INTEL}
|
||||||
|
|
||||||
procedure UpdateScreen (Force: boolean);
|
procedure UpdateScreen (Force: boolean);
|
||||||
|
|
||||||
|
var SOfs: cardinal;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
VioShowBuf (0, VideoBufSize, 0);
|
if LockUpdateScreen = 0 then
|
||||||
|
begin
|
||||||
|
if not (Force) then
|
||||||
|
begin
|
||||||
|
asm
|
||||||
|
mov esi, VideoBuf
|
||||||
|
mov edi, OldVideoBuf
|
||||||
|
mov ecx, VideoBufSize
|
||||||
|
shr ecx
|
||||||
|
shr ecx
|
||||||
|
repnz
|
||||||
|
cmpsd
|
||||||
|
mov SOfs, ecx
|
||||||
|
or ecx, ecx
|
||||||
|
jz @no_update
|
||||||
|
mov Force, 1
|
||||||
|
@no_update:
|
||||||
|
end;
|
||||||
|
Inc (SOfs);
|
||||||
|
SOfs := VideoBufSize - (SOfs shl 2);
|
||||||
|
end else
|
||||||
|
SOfs := 0;
|
||||||
|
if Force then
|
||||||
|
begin
|
||||||
|
VioShowBuf (SOfs, VideoBufSize - SOfs, 0);
|
||||||
|
Move (VideoBuf^, OldVideoBuf^, VideoBufSize);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.7 2000-10-08 18:40:58 hajny
|
Revision 1.8 2000-10-10 20:28:18 hajny
|
||||||
|
* screen updates speeded up
|
||||||
|
|
||||||
|
Revision 1.7 2000/10/08 18:40:58 hajny
|
||||||
* SetCursorType corrected
|
* SetCursorType corrected
|
||||||
|
|
||||||
Revision 1.6 2000/10/08 14:13:19 hajny
|
Revision 1.6 2000/10/08 14:13:19 hajny
|
||||||
|
Loading…
Reference in New Issue
Block a user