Rewrote scanlines for 320x480x16B in the DOS port.

This commit is contained in:
stainless
2001-11-06 04:41:54 +00:00
parent 81a51b4e2f
commit a669998275

View File

@@ -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