I've been struggling trying to convert this assembly code to C++ code.
It's a function from an old game that takes pixel data Stmp, and I believe it places it to destination void* dest
void Function(int x, int y, int yl, void* Stmp, void* dest)
{
    unsigned long size = 1280 * 2;
    unsigned long j = yl;
    void* Dtmp = (void*)((char*)dest + y * size + (x * 2));
    _asm
    {
        push    es;
        push    ds;
        pop     es;
        mov     edx,Dtmp;
        mov     esi,Stmp;
        mov     ebx,j;
        xor     eax,eax;
        xor     ecx,ecx;
    loop_1:
        or      bx,bx;
        jz      exit_1;
        mov     edi,edx;
    loop_2:
        cmp     word ptr[esi],0xffff;
        jz      exit_2;
        mov     ax,[esi];
        add     edi,eax;
        mov     cx,[esi+2];
        add     esi,4;
        shr     ecx,2;
        jnc     Next2;
        movsw;
    Next2:
        rep     movsd;
        jmp     loop_2;
    exit_2:
        add     esi,2;
        add     edx,size;
        dec     bx;
        jmp     loop_1;
    exit_1:
        pop     es;
    };
}
That's where I've gotten as far to: (Not sure if it's even correct)
while (j > 0)
{
    if (*stmp != 0xffff) 
    {
    }
    
    ++stmp;
    dtmp += size;
    --j;
}
Any help is greatly appreciated. Thank you.
 
    