📄 hong_sprite.cpp
字号:
add esi,eax;
jmp loop_1;
exit_xxxx:
add esi,2;
loop loop_1;
exit_1:
}
_asm{
mov eax, by; //
or eax,eax;
jz exit_for1;
loop_for1:
xor edx,edx;
mov edi,Dtmp;
test lx,0xffff; //if(lx)
jz exit_if1;
loop_while1:
cmp word ptr[esi],0xffff; //while(*stmp != 0xffff)
jz exit_while1; //
add dx,[esi];
cmp edx,lx; //if(j>lx)
jle jmp_if1; //
sub edx,lx; //j-=lx
add edi,edx; //dtmp+=j
jmp jmp_0416;//****************************************************
jmp_if1:///////////////////////////////////////
mov ax,[esi + 2];
add esi,4;
add edx,eax;
add esi,eax; //
cmp edx,lx; //
jle loop_while1;
sub edx,lx;
sub esi,edx;
mov eax,edx;
xor edx,edx;
jmp jmp_0429; //4.29
exit_while1: //end while(*stmp != 0xffff)*/
exit_if1: //end if(lx)
loop_while2:
cmp word ptr[esi],0xffff;
jz exit_while2;
movzx eax,word ptr[esi];
add edi,eax; //dtmp+=*stmp
add edx,eax; //j+=*stmp
jmp_0416:
mov ax,[esi + 2];
add esi,4;
jmp_0429:
mov ecx,eax; //l=k=*stmp
mov l,eax;
add eax,edx;
cmp eax, rx;
jle exit_if0;
cmp edx, rx;
jg exit_if0;
mov ecx, rx;
sub ecx,edx;
exit_if0:
cmp edx, rx;
jg else_if;
add edx, l; //j+=l;
sub l,ecx; //l-k;
or ecx,ecx;
jz jmp_kkk;
shr ecx,1; //move DATA
push edx;
loop_alpha:
xor eax,eax;
xor edx,edx;
mov ax,[esi];
mov dx,[edi];
cmp ax, dx
jz skip_same_color_
ror eax,11;
shl ax,10;
rol eax,6;
shl ax,5;
rol eax,5;
ror edx,11;
shl dx,10;
rol edx,6;
shl dx,5;
rol edx,5;
imul eax,ebx;
shr eax,5;
and eax,0x03e0fc1f;
add eax,edx;
imul edx,ebx;
shr edx,5;
and eax,0x03e0fc1f;
sub eax,edx;
ror eax,5;
shr ax,5;
ror eax,6;
shr ax,10;
rol eax,11;
mov [edi],ax;
skip_same_color_:
add edi,2;
add esi,2;
loop loop_alpha;
pop edx;
jmp_kkk:
add esi,l;
jmp loop_while2;
else_if:
add esi,l;
ext_loop:
cmp word ptr[esi],0xffff;
jz ext;
movzx eax,[esi+2];
add esi,4;
add esi,eax;
jmp ext_loop;
ext:
exit_while2:
mov eax, dDxSize;
add esi,2;
add dword ptr Dtmp,eax;
dec dword ptr by; //for(i=0;i<by;i++)
jnz loop_for1; //
exit_for1:
pop es;
};
}
void PutCmprsImgNOTClipingBlendDifer565(int x, int y, int yl, LPVOID Stmp, LPVOID dest, DWORD alpha)
{
DWORD j;
LPVOID Dtmp = (LPVOID)((char *)dest + y * dDxSize + (x * 2 ));
j = yl;
_asm{
push es;
push ds;
pop es;
mov esi,Stmp;
mov ebx,alpha;
inc j;
xor eax,eax;
xor ecx,ecx;
loop_1:
dec j
jz exit_1; //if(SY==0)
mov edi,Dtmp;
loop_2:
cmp word ptr[esi],0xffff;
jz exit_2;
xor eax,eax;
mov ax,[esi];
add edi,eax; //0 skip
mov cx,[esi+2]; //load data num
add esi,4;
shr ecx,1;
loop_alpha:
xor eax,eax;
xor edx,edx;
mov ax,[esi];
mov dx,[edi];
cmp ax, dx
jz skip_same_color_
ror eax,11;
shl ax,10;
rol eax,6;
shl ax,5;
rol eax,5;
ror edx,11;
shl dx,10;
rol edx,6;
shl dx,5;
rol edx,5;
imul eax,ebx;
shr eax,5;
and eax,0x03e0fc1f;
add eax,edx;
imul edx,ebx;
shr edx,5;
and eax,0x03e0fc1f;
sub eax,edx;
ror eax,5;
shr ax,5;
ror eax,6;
shr ax,10;
rol eax,11;
mov [edi],ax;
skip_same_color_:
add edi,2;
add esi,2;
loop loop_alpha;
jmp loop_2;
exit_2:
add esi,2;
mov eax,Dtmp;
add eax,dDxSize;
mov Dtmp,eax;
jmp loop_1;
exit_1:
pop es;
};
}
void PutCmprsImgClipingBlendDifer555(
int x, int y, LPVOID Stmp, LPVOID dest, int lx, int rx, int ty, int by, DWORD alpha)
{
int l;
LPVOID Dtmp = (LPVOID)((char *)dest + y * wDxSize + (x * 2 ));
_asm{
mov ecx,rx;
shl ecx,1;
mov rx,ecx;
mov ecx,lx;
shl ecx,1;
mov lx,ecx;
}
_asm{
push es;
push ds;
pop es;
xor eax,eax;
mov ebx,alpha;
mov esi,Stmp;
mov ecx,ty;
or ecx,ecx;
jz exit_1;
loop_1:
cmp word ptr[esi],0xffff;
jz exit_xxxx;
mov ax,[esi+2]
add esi,4;
add esi,eax;
jmp loop_1;
exit_xxxx:
add esi,2;
loop loop_1;
exit_1:
}
_asm{
mov eax, by; //
or eax,eax;
jz exit_for1;
loop_for1:
xor edx,edx;
mov edi,Dtmp;
test lx,0xffff; //if(lx)
jz exit_if1;
loop_while1:
cmp word ptr[esi],0xffff; //while(*stmp != 0xffff)
jz exit_while1; //
add dx,[esi];
cmp edx,lx; //if(j>lx)
jle jmp_if1; //
sub edx,lx; //j-=lx
add edi,edx; //dtmp+=j
jmp jmp_0416;//****************************************************
jmp_if1:///////////////////////////////////////
mov ax,[esi + 2];
add esi,4;
add edx,eax;
add esi,eax; //
cmp edx,lx; //
jle loop_while1;
sub edx,lx;
sub esi,edx;
mov eax,edx;
xor edx,edx;
jmp jmp_0429; //4.29
exit_while1: //end while(*stmp != 0xffff)*/
exit_if1: //end if(lx)
loop_while2:
cmp word ptr[esi],0xffff;
jz exit_while2;
movzx eax,word ptr[esi];
add edi,eax; //dtmp+=*stmp
add edx,eax; //j+=*stmp
jmp_0416:
mov ax,[esi + 2];
add esi,4;
jmp_0429:
mov ecx,eax; //l=k=*stmp
mov l,eax;
add eax,edx;
cmp eax, rx;
jle exit_if0;
cmp edx, rx;
jg exit_if0;
mov ecx, rx;
sub ecx,edx;
exit_if0:
cmp edx, rx;
jg else_if;
add edx, l; //j+=l;
sub l,ecx; //l-k;
or ecx,ecx;
jz jmp_kkk;
shr ecx,1; //move DATA
push edx;
loop_alpha:
xor eax,eax;
xor edx,edx;
mov ax,[esi];
mov dx,[edi];
cmp ax, dx
jz skip_same_color_
ror eax,10;
shl ax,11;
rol eax,5;
shl ax,6;
rol eax,5;
ror edx,10;
shl dx,11;
rol edx,5;
shl dx,6;
rol edx,5;
imul eax,ebx;
shr eax,5;
and eax,0x07e0fc1f;
add eax,edx;
imul edx,ebx;
shr edx,5;
and eax,0x07e0fc1f;
sub eax,edx;
ror eax,5;
shr ax,6;
ror eax,5;
shr ax,11;
rol eax,10;
mov [edi],ax;
skip_same_color_:
add edi,2;
add esi,2;
loop loop_alpha;
pop edx;
jmp_kkk:
add esi,l;
jmp loop_while2;
else_if:
add esi,l;
ext_loop:
cmp word ptr[esi],0xffff;
jz ext;
movzx eax,[esi+2];
add esi,4;
add esi,eax;
jmp ext_loop;
ext:
exit_while2:
mov eax, dDxSize;
add esi,2;
add dword ptr Dtmp,eax;
dec dword ptr by; //for(i=0;i<by;i++)
jnz loop_for1; //
exit_for1:
pop es;
};
}
void PutCmprsImgNOTClipingBlendDifer555(int x, int y, int yl, LPVOID Stmp, LPVOID dest, DWORD alpha)
{
DWORD j;
LPVOID Dtmp = (LPVOID)((char *)dest + y * dDxSize + (x * 2 ));
j = yl;
_asm{
push es;
push ds;
pop es;
mov esi,Stmp;
mov ebx,alpha;
inc j;
xor eax,eax;
xor ecx,ecx;
loop_1:
dec j
jz exit_1; //if(SY==0)
mov edi,Dtmp;
loop_2:
cmp word ptr[esi],0xffff;
jz exit_2;
xor eax,eax;
mov ax,[esi];
add edi,eax; //0 skip
mov cx,[esi+2]; //load data num
add esi,4;
shr ecx,1;
loop_alpha:
xor eax,eax;
xor edx,edx;
mov ax,[esi];
mov dx,[edi];
cmp ax, dx
jz skip_same_color_
ror eax,10;
shl ax,11;
rol eax,5;
shl ax,6;
rol eax,5;
ror edx,10;
shl dx,11;
rol edx,5;
shl dx,6;
rol edx,5;
imul eax,ebx;
shr eax,5;
and eax,0x03e0fc1f;
add eax,edx;
imul edx,ebx;
shr edx,5;
and eax,0x03e0fc1f;
sub eax,edx;
ror eax,5;
shr ax,6;
ror eax,5;
shr ax,11;
rol eax,10;
mov [edi],ax;
skip_same_color_:
add edi,2;
add esi,2;
loop loop_alpha;
jmp loop_2;
exit_2:
add esi,2;
mov eax,Dtmp;
add eax,dDxSize;
mov Dtmp,eax;
jmp loop_1;
exit_1:
pop es;
};
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
void PutCmprsImgClipingAdd565(
int x, int y, LPVOID Stmp, LPVOID dest, int lx, int rx, int ty, int by, DWORD alpha)
{
int l;
LPVOID Dtmp = (LPVOID)(( char *)dest + y * wDxSize + (x * 2));
_asm{
mov ecx,rx;
shl ecx,1;
mov rx,ecx;
mov ecx,lx;
shl ecx,1;
mov lx,ecx;
}
_asm{
push es;
push ds;
pop es;
xor eax,eax;
mov esi,Stmp;
mov ecx,ty;
or ecx,ecx;
jz exit_1;
loop_1:
cmp word ptr[esi],0xffff;
jz exit_xxxx;
mov ax,[esi+2]
add esi,4;
add esi,eax;
jmp loop_1;
exit_xxxx:
add esi,2;
loop loop_1;
exit_1:
}
_asm{
mov ebx, by; //
or ebx,ebx;
jz exit_for1;
loop_for1:
xor edx,edx;
mov edi,Dtmp;
test lx,0xffff; //if(lx)
jz exit_if1;
loop_while1:
cmp word ptr[esi],0xffff; //while(*stmp != 0xffff)
jz exit_while1; //
add dx,[esi];
cmp edx,lx; //if(j>lx)
jle jmp_if1; //
sub edx,lx; //j-=lx
add edi,edx; //dtmp+=j
jmp jmp_0416;//****************************************************
jmp_if1:///////////////////////////////////////
mov ax,[esi + 2];
add esi,4;
add edx,eax;
add esi,eax; //
cmp edx,lx; //
jle loop_while1;
sub edx,lx;
sub esi,edx;
mov eax,edx;
xor edx,edx;
jmp jmp_0429; //4.29
exit_while1: //end while(*stmp != 0xffff)*/
exit_if1: //end if(lx)
loop_while2:
cmp word ptr[esi],0xffff;
jz exit_while2;
movzx eax,word ptr[esi];
add edi,eax; //dtmp+=*stmp
add dx,ax; //j+=*stmp // add edx,eax; //j+=*stmp 001216 KHS
jmp_0416:
mov ax,[esi + 2];
add esi,4;
jmp_0429:
mov ecx,eax; //l=k=*stmp
mov l,eax;
add eax,edx;
cmp eax, rx;
jle exit_if0;
cmp edx, rx;
jg exit_if0;
mov ecx, rx;
sub ecx,edx;
exit_if0:
cmp edx, rx;
jg else_if;
add edx, l; //j+=l;
sub l,ecx; //l-k;
or ecx,ecx;
jz jmp_kkk;
shr ecx,1; //move DATA
push edx;
loop_alpha:
movzx eax,word ptr[esi];
ror eax,11; //
shl ax,10; //
rol eax,6; //
shl ax,5;
rol eax,5;
movzx edx,word ptr[edi];
ror edx,11; //
shl dx,10; //
rol edx,6; //
shl dx,5;
rol edx,5;
imul eax,alpha;
shr eax,4;
and eax,0x07e1fc3f; //
add eax,edx;
xor edx,edx;
mov dl,al;
mov bx,word ptr[offset AddTableB + edx*2]; //
shr eax,10;
mov dl,al;
or bx,word ptr[offset AddTableG + edx*2];
shr eax,11;
mov dl,al;
or bx,word ptr[offset AddTableR + edx*2]; //
mov [edi],bx;
add edi,2;
add esi,2;
loop loop_alpha;
pop edx;
jmp_kkk:
add esi,l;
jmp loop_while2;
else_if:
add esi,l;
ext_loop:
cmp word ptr[esi],0xffff;
jz ext;
mov ax,[esi+2]; //movzx eax,[esi+2]; 001216 KHS
add esi,4;
add esi,eax;
jmp ext_loop;
ext:
exit_while2:
mov eax, dDxSize;
add esi,2;
add dword ptr Dtmp,eax;
dec dword ptr by; //for(i=0;i<by;i++)
jnz loop_for1; //
exit_for1:
pop es;
};
}
void PutCmprsImgNOTClipingAdd565(int x, int y, int yl, LPVOID Stmp, LPVOID dest, DWORD alpha)
{
static DWORD ttt = 0;
DWORD j;
LPVOID Dtmp = (LPVOID)((char *)dest + y * dDxSize + (x * 2));
j = yl;
_asm{
mov al,0xff
movsx eax,al;
push es;
push ds;
pop es;
mov esi,Stmp;
mov ebx,alpha;
inc j;
xor eax,eax;
xor ecx,ecx;
loop_1:
dec j
jz exit_1; //if(SY==0)
mov edi,Dtmp;
loop_2:
cmp word ptr[esi],0xffff;
jz exit_2;
xor eax,eax;
mov ax,[esi];
add edi,eax; //0 skip
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -