* optimization of UpdateScreen finished

This commit is contained in:
Tomas Hajny 2000-10-15 20:52:56 +00:00
parent b974225385
commit 6f99ba1b08

View File

@ -427,9 +427,9 @@ end;
procedure UpdateScreen (Force: boolean);
{$IFDEF BIT_32}
var SOfs: cardinal;
var SOfs, CLen: cardinal;
{$ELSE}
var SOfs: word;
var SOfs, CLen: word;
{$ENDIF}
begin
@ -439,34 +439,74 @@ begin
begin
{$IFDEF BIT_32}
asm
cld
mov esi, VideoBuf
mov edi, OldVideoBuf
mov ecx, VideoBufSize
mov eax, VideoBufSize
mov ecx, eax
shr ecx
shr ecx
repe
cmpsd
inc cx
mov SOfs, ecx
or ecx, ecx
jz @no_update
mov Force, 1
std
mov edi, eax
mov esi, VideoBuf
add eax, esi
sub eax, 4
mov esi, eax
mov eax, OldVideoBuf
add eax, edi
sub eax, 4
mov edi, eax
repe
cmpsd
inc ecx
shl ecx
shl ecx
mov CLen, ecx
cld
@no_update:
end;
Inc (SOfs);
SOfs := VideoBufSize - (SOfs shl 2);
{$ELSE}
asm
cld
push ds
lds si, VideoBuf
les di, OldVideoBuf
mov cx, word ptr VideoBufSize
mov ax, word ptr VideoBufSize
mov cx, ax
shr cx
repe
cmpsw
inc cx
mov SOfs, cx
or cx, cx
jz @no_update
mov Force, 1
std
mov di, ax
mov si, offset VideoBuf
add ax, si
dec ax
dec ax
mov si, ax
mov ax, offset OldVideoBuf
add ax, di
dec ax
dec ax
mov di, ax
repe
cmpsw
inc cx
shl cx
mov CLen, cx
cld
@no_update:
pop ds
end;
@ -474,11 +514,15 @@ begin
SOfs := VideoBufSize - (SOfs shl 1);
{$ENDIF}
end else
begin
SOfs := 0;
CLen := VideoBufSize;
end;
if Force then
begin
VioShowBuf (SOfs, VideoBufSize - SOfs, 0);
Move (VideoBuf^, OldVideoBuf^, VideoBufSize);
VioShowBuf (SOfs, CLen, 0);
Move (VideoBuf^ [SOfs div SizeOf (TVideoCell)],
OldVideoBuf^ [SOfs div SizeOf (TVideoCell)], CLen);
end;
end;
end;
@ -487,7 +531,10 @@ end;
{
$Log$
Revision 1.10 2000-10-11 20:10:04 hajny
Revision 1.11 2000-10-15 20:52:56 hajny
* optimization of UpdateScreen finished
Revision 1.10 2000/10/11 20:10:04 hajny
* compatibility enhancements
Revision 1.9 2000/10/11 05:28:29 hajny