Rewrote scanlines for 320x480x16B in the DOS port.
This commit is contained in:
@@ -3042,13 +3042,13 @@ NEWSYM copyvesa2320x480x16b
|
|||||||
jne .startcopy
|
jne .startcopy
|
||||||
ret
|
ret
|
||||||
.startcopy
|
.startcopy
|
||||||
mov eax,[vesa2_clbitng2]
|
; mov eax,[vesa2_clbitng2]
|
||||||
mov [vesavaland],eax
|
; mov [vesavaland],eax
|
||||||
mov [vesavaland+4],eax
|
; mov [vesavaland+4],eax
|
||||||
cmp byte[vesa2red10],1
|
; cmp byte[vesa2red10],1
|
||||||
jne .nocopyvesa2r
|
; jne .nocopyvesa2r
|
||||||
call ConvertToAFormat
|
; call ConvertToAFormat
|
||||||
.nocopyvesa2r
|
;.nocopyvesa2r
|
||||||
push es
|
push es
|
||||||
mov ax,[vesa2selec]
|
mov ax,[vesa2selec]
|
||||||
mov es,ax
|
mov es,ax
|
||||||
@@ -3131,183 +3131,121 @@ NEWSYM copyvesa2320x480x16b
|
|||||||
jmp .done
|
jmp .done
|
||||||
|
|
||||||
.halfscanlines
|
.halfscanlines
|
||||||
.loopabh
|
;cmp byte[MMXSupport],1
|
||||||
cmp byte[MMXSupport],1
|
;je .hsloopb
|
||||||
je near .mmxslh
|
.hsloopa
|
||||||
mov ecx,128
|
mov ecx,256/4*2
|
||||||
.abh
|
rep movsd
|
||||||
mov eax,[esi]
|
sub esi,256*2
|
||||||
mov [es:edi],eax
|
add edi,32*2+32*2
|
||||||
add esi,4
|
mov ecx,256/4
|
||||||
add edi,4
|
jmp .hsloopa3
|
||||||
dec ecx
|
.hsloopa2
|
||||||
jnz .abh
|
add esi,16*2+16*2
|
||||||
mov ecx,128
|
add edi,32*2+32*2
|
||||||
sub esi,512
|
|
||||||
add edi,64*2
|
|
||||||
.abhs
|
|
||||||
mov eax,[esi]
|
|
||||||
and eax,[vesavaland]
|
|
||||||
shr eax,1
|
|
||||||
mov [es:edi],eax
|
|
||||||
add esi,4
|
|
||||||
add edi,4
|
|
||||||
dec ecx
|
|
||||||
jnz .abhs
|
|
||||||
.returnbh
|
|
||||||
add esi,64
|
|
||||||
add edi,64*2
|
|
||||||
inc ebx
|
|
||||||
dec dl
|
dec dl
|
||||||
jnz .loopabh
|
jnz .hsloopa
|
||||||
pop es
|
jmp .done
|
||||||
cmp byte[MMXSupport],1
|
.hsloopa3
|
||||||
je near .mmx2
|
push ecx
|
||||||
ret
|
push edx
|
||||||
.mmxslh
|
mov ax,[esi]
|
||||||
mov ecx,32
|
mov bx,[esi+2]
|
||||||
add eax,512
|
mov cx,[esi+4]
|
||||||
.mmxrslh
|
mov dx,[esi+6]
|
||||||
movq mm0,[esi]
|
shr ax,byte 1
|
||||||
movq mm1,[esi+8]
|
shr bx,byte 1
|
||||||
movq [es:edi],mm0
|
shr cx,byte 1
|
||||||
movq [es:edi+8],mm1
|
shr dx,byte 1
|
||||||
add esi,16
|
and ax,7befh
|
||||||
add edi,16
|
and bx,7befh
|
||||||
|
and cx,7befh
|
||||||
|
and dx,7befh
|
||||||
|
mov [es:edi],ax
|
||||||
|
mov [es:edi+2],bx
|
||||||
|
mov [es:edi+4],cx
|
||||||
|
mov [es:edi+6],dx
|
||||||
|
pop edx
|
||||||
|
pop ecx
|
||||||
|
add esi,byte 8
|
||||||
|
add edi,byte 8
|
||||||
dec ecx
|
dec ecx
|
||||||
jnz .mmxrslh
|
jnz .hsloopa3
|
||||||
mov ecx,16
|
jmp .hsloopa2
|
||||||
sub esi,512
|
|
||||||
add eax,512
|
|
||||||
add edi,64*2
|
|
||||||
movq mm4,[vesavaland]
|
|
||||||
.mmxr2h
|
|
||||||
movq mm0,[esi]
|
|
||||||
movq mm1,[esi+8]
|
|
||||||
movq mm2,[esi+16]
|
|
||||||
movq mm3,[esi+24]
|
|
||||||
pand mm0,mm4
|
|
||||||
pand mm1,mm4
|
|
||||||
pand mm2,mm4
|
|
||||||
pand mm3,mm4
|
|
||||||
psrlw mm0,1
|
|
||||||
psrlw mm1,1
|
|
||||||
psrlw mm2,1
|
|
||||||
psrlw mm3,1
|
|
||||||
movq [es:edi],mm0
|
|
||||||
movq [es:edi+8],mm1
|
|
||||||
movq [es:edi+16],mm2
|
|
||||||
movq [es:edi+24],mm3
|
|
||||||
add esi,32
|
|
||||||
add edi,32
|
|
||||||
dec ecx
|
|
||||||
jnz .mmxr2h
|
|
||||||
jmp .returnbh
|
|
||||||
|
|
||||||
.quartscanlines
|
.quartscanlines
|
||||||
mov [lineleft],dl
|
;cmp byte[MMXSupport],1
|
||||||
.loopabh2
|
;je .qsloopb
|
||||||
cmp byte[MMXSupport],1
|
.qsloopa
|
||||||
je near .mmxslh2
|
mov ecx,256/4*2
|
||||||
mov ecx,128
|
rep movsd
|
||||||
.abh2
|
sub esi,256*2
|
||||||
mov eax,[esi]
|
add edi,32*2+32*2
|
||||||
mov [es:edi],eax
|
mov ecx,256/2
|
||||||
add esi,4
|
jmp .qsloopa3
|
||||||
add edi,4
|
.qsloopa2
|
||||||
|
add esi,16*2+16*2
|
||||||
|
add edi,32*2+32*2
|
||||||
|
dec dl
|
||||||
|
jnz .qsloopa
|
||||||
|
jmp .done
|
||||||
|
.qsloopa3
|
||||||
|
push ecx
|
||||||
|
push edx
|
||||||
|
mov ax,[esi]
|
||||||
|
mov bx,[esi+2]
|
||||||
|
mov cx,ax
|
||||||
|
mov dx,bx
|
||||||
|
shr cx,byte 1
|
||||||
|
shr dx,byte 1
|
||||||
|
and cx,39e7h
|
||||||
|
and dx,39e7h
|
||||||
|
sub ax,cx
|
||||||
|
sub bx,dx
|
||||||
|
mov [es:edi],ax
|
||||||
|
mov [es:edi+2],bx
|
||||||
|
pop edx
|
||||||
|
pop ecx
|
||||||
|
add esi,byte 4
|
||||||
|
add edi,byte 4
|
||||||
dec ecx
|
dec ecx
|
||||||
jnz .abh2
|
jnz .qsloopa3
|
||||||
mov ecx,128
|
jmp .qsloopa2
|
||||||
sub esi,512
|
|
||||||
add edi,64*2
|
|
||||||
.abhs2
|
|
||||||
mov eax,[esi]
|
|
||||||
and eax,[vesavaland]
|
|
||||||
shr eax,1
|
|
||||||
mov edx,eax
|
|
||||||
and edx,[vesavaland]
|
|
||||||
shr edx,1
|
|
||||||
add eax,edx
|
|
||||||
mov [es:edi],eax
|
|
||||||
add esi,4
|
|
||||||
add edi,4
|
|
||||||
dec ecx
|
|
||||||
jnz .abhs2
|
|
||||||
.returnbh2
|
|
||||||
add esi,64
|
|
||||||
add edi,64*2
|
|
||||||
inc ebx
|
|
||||||
dec byte[lineleft]
|
|
||||||
jnz near .loopabh2
|
|
||||||
pop es
|
|
||||||
cmp byte[MMXSupport],1
|
|
||||||
je near .mmx2
|
|
||||||
ret
|
|
||||||
.mmxslh2
|
|
||||||
mov ecx,32
|
|
||||||
add eax,512
|
|
||||||
.mmxrslh2
|
|
||||||
movq mm0,[esi]
|
|
||||||
movq mm1,[esi+8]
|
|
||||||
movq [es:edi],mm0
|
|
||||||
movq [es:edi+8],mm1
|
|
||||||
add esi,16
|
|
||||||
add edi,16
|
|
||||||
dec ecx
|
|
||||||
jnz .mmxrslh2
|
|
||||||
mov ecx,32
|
|
||||||
sub esi,512
|
|
||||||
add edi,64*2
|
|
||||||
movq mm4,[vesavaland]
|
|
||||||
.mmxr2h2
|
|
||||||
movq mm0,[esi]
|
|
||||||
movq mm1,[esi+8]
|
|
||||||
pand mm0,mm4
|
|
||||||
pand mm1,mm4
|
|
||||||
psrlw mm0,1
|
|
||||||
psrlw mm1,1
|
|
||||||
movq mm2,mm0
|
|
||||||
movq mm3,mm1
|
|
||||||
pand mm2,mm4
|
|
||||||
pand mm3,mm4
|
|
||||||
psrlw mm2,1
|
|
||||||
psrlw mm3,1
|
|
||||||
paddd mm0,mm2
|
|
||||||
paddd mm1,mm3
|
|
||||||
movq [es:edi],mm0
|
|
||||||
movq [es:edi+8],mm1
|
|
||||||
add esi,16
|
|
||||||
add edi,16
|
|
||||||
dec ecx
|
|
||||||
jnz .mmxr2h2
|
|
||||||
jmp .returnbh2
|
|
||||||
|
|
||||||
.mmx2
|
|
||||||
emms
|
|
||||||
ret
|
|
||||||
|
|
||||||
.fullscreen
|
.fullscreen
|
||||||
sub edi,32*2
|
sub edi,32*2
|
||||||
cmp byte[scanlines],1
|
cmp byte[scanlines],1
|
||||||
je .fsloopa2
|
je .fsloopa2
|
||||||
|
cmp byte[scanlines],3
|
||||||
|
je .fsloopa3
|
||||||
.fsloopa
|
.fsloopa
|
||||||
mov ecx,256/4
|
mov ecx,256/4
|
||||||
call .fsloopb
|
call .fsloopb
|
||||||
sub esi,256*2
|
sub esi,256*2
|
||||||
mov ecx,256/4
|
mov ecx,256/4
|
||||||
call .fsloopb
|
call .fsloopb
|
||||||
add esi,32*2
|
add esi,16*2+16*2
|
||||||
dec dl
|
dec dl
|
||||||
jnz .fsloopa
|
jnz .fsloopa
|
||||||
jmp .done
|
jmp .done
|
||||||
.fsloopa2
|
.fsloopa2
|
||||||
mov ecx,256/4
|
mov ecx,256/4
|
||||||
call .fsloopb
|
call .fsloopb
|
||||||
add esi,32*2
|
add esi,16*2+16*2
|
||||||
add edi,320*2
|
add edi,320*2
|
||||||
dec dl
|
dec dl
|
||||||
jnz .fsloopa2
|
jnz .fsloopa2
|
||||||
jmp .done
|
jmp .done
|
||||||
|
.fsloopa3
|
||||||
|
mov ecx,256/4
|
||||||
|
call .fsloopb
|
||||||
|
sub esi,256*2
|
||||||
|
mov ecx,256/4
|
||||||
|
call .fsloopb2
|
||||||
|
add esi,16*2+16*2
|
||||||
|
dec dl
|
||||||
|
jnz .fsloopa3
|
||||||
|
jmp .done
|
||||||
.fsloopb
|
.fsloopb
|
||||||
mov eax,[esi]
|
mov eax,[esi]
|
||||||
mov [es:edi],ax
|
mov [es:edi],ax
|
||||||
@@ -3318,6 +3256,31 @@ NEWSYM copyvesa2320x480x16b
|
|||||||
dec ecx
|
dec ecx
|
||||||
jnz .fsloopb
|
jnz .fsloopb
|
||||||
ret
|
ret
|
||||||
|
.fsloopb2
|
||||||
|
mov ax,[esi]
|
||||||
|
mov bx,[esi+2]
|
||||||
|
shr ax,byte 1
|
||||||
|
shr bx,byte 1
|
||||||
|
and ax,7befh
|
||||||
|
and bx,7befh
|
||||||
|
mov [es:edi],ax
|
||||||
|
mov [es:edi+2],ax
|
||||||
|
mov [es:edi+4],bx
|
||||||
|
add esi,byte 4
|
||||||
|
add edi,byte 6
|
||||||
|
mov ax,[esi]
|
||||||
|
mov bx,[esi+2]
|
||||||
|
shr ax,byte 1
|
||||||
|
shr bx,byte 1
|
||||||
|
and ax,7befh
|
||||||
|
and bx,7befh
|
||||||
|
mov [es:edi],ax
|
||||||
|
mov [es:edi+2],bx
|
||||||
|
add esi,byte 4
|
||||||
|
add edi,byte 4
|
||||||
|
dec ecx
|
||||||
|
jnz .fsloopb2
|
||||||
|
ret
|
||||||
|
|
||||||
.interpolate
|
.interpolate
|
||||||
cmp byte[scanlines],1
|
cmp byte[scanlines],1
|
||||||
|
|||||||
Reference in New Issue
Block a user