* screen updates speeded up

This commit is contained in:
Tomas Hajny 2000-10-10 20:28:18 +00:00
parent 77f776b7f0
commit 81ea9d1a5b

View File

@ -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