Replaced all the slow 'loop' instructions.
This commit is contained in:
@@ -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
|
||||||
|
|
||||||
;*******************************************************
|
;*******************************************************
|
||||||
|
|||||||
Reference in New Issue
Block a user