Replaced all the slow 'loop' instructions.

This commit is contained in:
stainless
2001-09-08 05:58:57 +00:00
parent 5a83a92c0a
commit 4ded2efb50

View File

@@ -549,37 +549,38 @@ NEWSYM copymodeq
;******************************************************* ;*******************************************************
NEWSYM copymodeq224 NEWSYM copymodeq224
cmp byte[curblank],40h cmp byte[curblank],40h ; Check for VBlank.
jne .startcopy jne .startcopy ; OK, no VBlank...
ret ret
.startcopy .startcopy
push es push es ; Backup ES register.
mov ax,[selcA000] ; mov ax,[selcA000]
mov es,ax ; mov es,ax
mov esi,[vidbuffer] mov es,[selcA000] ; Get 0xA000 selector.
mov ebp,[vidbufferm] mov esi,[vidbuffer] ; vidbuffer to source.
add esi,16+256+32 ; mov ebp,[vidbufferm]
add ebp,16+256+32 add esi,16+256+32 ; Skip top+bottom lines.
mov edi,256 ; add ebp,16+256+32
mov edx,222 mov edi,256 ; Start at second line.
cmp byte[FPUCopy],2 mov edx,222 ; Only copy 222 lines.
cmp byte[FPUCopy],2 ; Check for MMX enable.
je near .loopb je near .loopb
.loopa .loopa
mov ecx,64 mov ecx,64
rep movsd rep movsd ; Copy 64 32-bit words.
add esi,32 add esi,32 ; Skip vidbuffer margins.
dec edx dec edx
jnz .loopa jnz .loopa ; Loop for each line.
jmp .done jmp .done
.loopb .loopb
mov ecx,16 mov ecx,16
MMXStuff MMXStuff ; Copy 64 64-bit words.
add esi,32 add esi,32 ; ...
dec edx dec edx
jnz .loopb jnz .loopb ; ...
emms emms ; Empty MMX state.
.done .done
pop es pop es ; Restore ES register.
ret ret
;******************************************************* ;*******************************************************