diff --git a/zsnes/src/video/copyvid.inc b/zsnes/src/video/copyvid.inc index c77b0c4a..4d0336dc 100644 --- a/zsnes/src/video/copyvid.inc +++ b/zsnes/src/video/copyvid.inc @@ -2711,42 +2711,44 @@ NEWSYM copyvesa2320x240x16b ;cmp byte[ScreenScale],1 ;je .infsloopa .inloopa - mov bx,[esi] - mov ecx,256-2 - mov ax,[esi+2] - add esi,byte 2 - mov [es:edi],bx - add edi,byte 2 -.inloopb - push eax - mov ebp,[esi+2] - shr eax,byte 1 - push ebp - shr ebx,byte 2 - and eax,7befh - shr ebp,byte 2 - and ebx,39e7h - add eax,ebx - and ebp,39e7h - add eax,ebp + mov ax,[esi] mov [es:edi],ax - pop eax - pop ebx + add esi,byte 2 + add edi,byte 2 + mov ecx,254 + jmp .inloopb +.inloopa2 + mov ax,[esi] + mov [es:edi],ax + add esi,32*2+2 + add edi,64*2+2 + dec dl + jnz .inloopa + jmp .done +.inloopb + mov ax,[esi] + mov bx,[esi-2] + cmp ax,bx + jne .inloopb2 + mov [es:edi],ax + mov [es:edi-2],bx + jmp .inloopb3 +.inloopb2 + shr ax,byte 1 + shr bx,byte 1 + and ax,7befh + and bx,7befh + add ax,bx + mov [es:edi],ax + mov [es:edi-2],ax + jmp .inloopb3 .inloopb3 add esi,byte 2 add edi,byte 2 dec ecx jnz .inloopb -.inloopa2 - mov ax,[esi] - add esi,byte 2 - mov [es:edi],ax - add edi,byte 2 - add esi,byte 32*2 - sub edi,byte -64*2 - dec dl - jnz .inloopa - + jmp .inloopa2 + .done pop es ret @@ -3311,56 +3313,64 @@ NEWSYM copyvesa2320x480x16b .interpolate cmp byte[scanlines],1 - je .inloopb + je .inloopa2 .inloopa - call .inloopc - sub esi,256*2 - add edi,32*2+32*2 - call .inloopc - add esi,32*2 - add edi,32*2+32*2 + mov ax,[esi] + mov [es:edi],ax + add esi,byte 2 + add edi,byte 2 + mov ecx,254 + call .inloopb + mov ax,[esi] + mov [es:edi],ax + sub esi,256*2-2 + add edi,64*2+2 + mov ax,[esi] + mov [es:edi],ax + add esi,byte 2 + add edi,byte 2 + mov ecx,254 + call .inloopb + add esi,32*2+2 + add edi,64*2+2 dec dl jnz .inloopa jmp .done -.inloopb - call .inloopc - add esi,32*2 - add edi,32*2+320*2+32*2 - dec dl - jnz .inloopb - jmp .done -.inloopc - mov bx,[esi] - mov ecx,256-2 - mov ax,[esi+2] - add esi,byte 2 - mov [es:edi],bx - add edi,byte 2 - call .inloopc2 +.inloopa2 mov ax,[esi] + mov [es:edi],ax add esi,byte 2 - mov [es:edi],ax add edi,byte 2 - ret -.inloopc2 - push eax - mov ebp,[esi+2] - shr eax,byte 1 - push ebp - shr ebx,byte 2 - and eax,7befh - shr ebp,byte 2 - and ebx,39e7h - add eax,ebx - and ebp,39e7h - add eax,ebp + mov ecx,254 + call .inloopb + mov ax,[esi] mov [es:edi],ax - pop eax - pop ebx + add esi,16*2+16*2+2 + add edi,32*2+320*2+32*2+2 + dec dl + jnz .inloopa2 + jmp .done +.inloopb + mov ax,[esi] + mov bx,[esi-2] + cmp ax,bx + jne .inloopb2 + mov [es:edi],ax + mov [es:edi-2],bx + jmp .inloopb3 +.inloopb2 + shr ax,byte 1 + shr bx,byte 1 + and ax,7befh + and bx,7befh + add ax,bx + mov [es:edi],ax + mov [es:edi-2],ax +.inloopb3 add esi,byte 2 add edi,byte 2 dec ecx - jnz .inloopc2 + jnz .inloopb ret .done