66 lines
1012 B
C
66 lines
1012 B
C
/* Turbo C - (C) Copyright 1987 by Borland International */
|
||
|
||
#pragma inline
|
||
|
||
void far movescreenmem(char far *source, char far *dest, unsigned len,
|
||
int snowcheck)
|
||
/* Moves screen memory, doing snow control if necessary. */
|
||
{
|
||
unsigned char right;
|
||
|
||
asm push ds
|
||
asm push es
|
||
right = ((unsigned long)source < (unsigned long)dest);
|
||
asm mov bh,snowcheck
|
||
asm lds si,source
|
||
asm les di,dest
|
||
asm mov cx,len
|
||
asm cmp cx,0
|
||
asm je j9
|
||
asm mov al,right
|
||
asm cmp al,1
|
||
asm je j1
|
||
asm cld
|
||
asm jmp short j4
|
||
j1:
|
||
asm cmp bh,1
|
||
asm je j2
|
||
asm add si,cx
|
||
asm sub si,2
|
||
asm add di,cx
|
||
asm sub di,2
|
||
asm jmp short j3
|
||
j2:
|
||
asm add si,cx
|
||
asm dec si
|
||
asm add di,cx
|
||
asm dec di
|
||
j3:
|
||
asm std
|
||
j4:
|
||
asm cmp bh,1
|
||
asm jne j7
|
||
asm mov dx,3DAh
|
||
j5:
|
||
asm in al,dx
|
||
asm rcr al,1
|
||
asm jb j5
|
||
asm cli
|
||
j6:
|
||
asm in al,dx
|
||
asm rcr al,1
|
||
asm jnb j6
|
||
asm movsb
|
||
asm sti
|
||
asm loop j5
|
||
asm jmp short j9
|
||
j7:
|
||
asm shr cx,1
|
||
j8:
|
||
asm movsw
|
||
asm loop j8
|
||
j9:
|
||
asm pop es
|
||
asm pop ds
|
||
}
|
||
|