📄 nesasm.cpp
字号:
push edi;
push esi;
push ecx;
mov edi , dword ptr Value1;
mov esi , dword ptr Value3;
mov ecx , dword ptr Value5;
add edi , dword ptr Value2;
add esi , dword ptr Value4;
mov eax , ecx;
// shr ecx , 3;
shr ecx , 1;
// and eax , 7;
and eax , 3;
movq mm0 , ENGINE_DRAW_LINE_ALPHA_SPEED_MASK;
cmp eax , 0;
jne loop_2;
loop_1:
movq mm1 , [ esi ];
movq mm2 , [ edi ];
paddusb mm1 , mm2;
movq [ edi ] , mm1;
add edi , 8;
add esi , 8;
loop loop_1;
pop ecx;
pop esi;
pop edi;
pop ebp;
ret;
emms;
loop_2:
cmp ecx ,0;
je loop_3;
movq mm1 , [ esi ];
movq mm2 , [ edi ];
paddusb mm1 , mm2;
movq [ edi ] , mm1;
add edi , 8;
add esi , 8;
loop loop_1;
loop_3:
movd mm1 , [ esi ];
movd mm2 , [ edi ];
psrlq mm1 , 1;
psrlq mm2 , 1;
pand mm1 , mm0;
pand mm2 , mm0;
paddb mm1 , mm2;
movd [ edi ] , mm1;
pop ecx;
pop esi;
pop edi;
pop ebp;
ret;
emms;
}
}
NESASM void NesDrawLineAlphaAddColorKey( PVOID pDestPointer ,DWORD dwDestOffset , PVOID pSrcPointer , DWORD dwSrcOffset , DWORD dwLenght , DWORD dwColorKey )
{
__asm
{
push ebp;
mov ebp , esp;
push edi;
push esi;
push ecx;
push ebx;
push edx;
mov edi , dword ptr Value1;
mov esi , dword ptr Value3;
mov ecx , dword ptr Value5;
add edi , dword ptr Value2;
add esi , dword ptr Value4;
// shr ecx , 2;
mov edx , 0x007f7f7f;
loop_1:
mov eax , dword ptr [ esi ];
cmp eax , dword ptr Value6;//[ Val6 ];
jne loop_2;
add esi , 4;
add edi , 4;
loop loop_1;
pop edx;
pop ebx;
pop ecx;
pop esi;
pop edi;
pop ebp;
ret;
loop_2:
movd mm1 , [ esi ];
movd mm2 , [ edi ];
paddusb mm1 , mm2;
movd [ edi ] , mm1;
add esi , 4;
add edi , 4;
loop loop_1;
pop edx;
pop ebx;
pop ecx;
pop esi;
pop edi;
pop ebp;
ret;
emms;
}
}
NESASM void NesDrawLineAlphaChannels( PVOID pDestPointer , DWORD dwDestOffset , PVOID pSrcPointer , DWORD dwSrcOffset , PVOID pAlphaPointer , DWORD dwLenght )
{
__asm
{
push ebp;
mov ebp , esp;
push edi;
push esi;
push ecx;
push ebx;
push edx;
mov edi , dword ptr Value1;//[ Val1 ];
mov esi , dword ptr Value3;//[ Val3 ];
mov ecx , dword ptr Value6;//[ Val7 ];
add edi , dword ptr Value2;//[ Val2 ];
add esi , dword ptr Value4;//[ Val4 ];
mov edx , dword ptr Value5;//[ Val5 ];
// shr ecx , 2;
add edx , dword ptr Value4;//[ Val6 ];
pxor mm0 , mm0;
movq mm7 , ENGINE_DRAW_LINE_ALPHA_CHUANNEL_MASK;
loop_1:
movd mm1 , [ esi ];
movd mm3 , [ edx ];
movd mm2 , [ edi ];
punpcklbw mm1 , mm0;
punpcklbw mm3 , mm0;
punpcklbw mm2 , mm0;
movq mm6 , mm7;
psubusb mm6 , mm3;
pmullw mm1 , mm6;
pmullw mm2 , mm3;
paddb mm1 , mm2;
movq mm2 , mm1;
movq mm3 , mm1;
psrlq mm1 , 24;
psrlq mm2 , 16;
psrlq mm3 , 8;
pand mm1 , ENGINE_DRAW_LINE_ALPHA_QUALITY_COLOR_MASK1;
pand mm2 , ENGINE_DRAW_LINE_ALPHA_QUALITY_COLOR_MASK2;
pand mm3 , ENGINE_DRAW_LINE_ALPHA_QUALITY_COLOR_MASK3;
por mm1 , mm2;
por mm1 , mm3;
movd [ edi ] ,mm1;
add esi , 4;
add edi , 4;
add edx , 4;
loop loop_1;
pop edx;
pop ebx;
pop ecx;
pop esi;
pop edi;
pop ebp;
ret;
emms;
}
}
NESASM void NesDrawLine32To16( PVOID pDestPointer ,DWORD dwDestOffset , PVOID pSrcPointer , DWORD dwSrcOffset , DWORD dwLenght )
{
__asm
{
push ebp;
mov ebp , esp;
push edi;
push esi;
push edx;
push ecx;
push ebx;
mov edi , dword ptr Value1;
mov esi , dword ptr Value3;
mov ecx , dword ptr Value5;
add edi , dword ptr Value2;
add esi , dword ptr Value4;
loop_1:
mov eax , dword ptr [ esi ];
mov ebx , dword ptr [ esi ];
mov edx , dword ptr [ esi ];
shr eax , 3;
shr ebx , 5;
shr edx , 8;
and eax , 0x001f;
and ebx , 0x07e0;
and edx , 0xf800;
or eax , ebx;
or eax , edx;
mov word ptr [ edi ] , ax;
add esi , 4;
add edi , 2;
loop loop_1;
pop ebx;
pop ecx;
pop edx;
pop esi;
pop edi;
pop ebp;
ret;
}
}
NESASM void NesDrawLine32To24( PVOID pDestPointer ,DWORD dwDestOffset , PVOID pSrcPointer , DWORD dwSrcOffset , DWORD dwLenght )
{
__asm
{
push ebp;
mov ebp , esp;
push edi;
push esi;
push ecx;
mov edi , dword ptr Value1;
mov esi , dword ptr Value3;
mov ecx , dword ptr Value5;
add edi , dword ptr Value2;
add esi , dword ptr Value4;
loop_1:
movsw;
movsb;
inc esi;
loop loop_1;
pop ecx;
pop esi;
pop edi;
pop ebp;
ret;
}
}
NESASM void NesDrawLine24To32( PVOID pDestPointer ,DWORD dwDestOffset , PVOID pSrcPointer , DWORD dwSrcOffset , DWORD dwLenght )
{
__asm
{
push ebp;
mov ebp , esp;
push edi;
push esi;
push ecx;
mov edi , dword ptr Value1;
mov esi , dword ptr Value3;
mov ecx , dword ptr Value5;
add edi , dword ptr Value2;
add esi , dword ptr Value4;
loop_1:
movsw;
movsb;
inc edi;
loop loop_1;
pop ecx;
pop esi;
pop edi;
pop ebp;
ret;
}
}
NESASM void NesDrawLine15To32( PVOID pDestPointer ,DWORD dwDestOffset , PVOID pSrcPointer , DWORD dwSrcOffset , DWORD dwLenght )
{
__asm
{
push ebp;
mov ebp , esp;
push edi;
push esi;
push edx;
push ecx;
push ebx;
mov edi , dword ptr Value1;
mov esi , dword ptr Value3;
mov ecx , dword ptr Value5;
add edi , dword ptr Value2;
add esi , dword ptr Value4;
loop_1:
xor eax , eax;
lodsw;
mov ebx , eax;
mov edx , eax;
and eax , 0x7f00;
and ebx , 0x03e0;
and edx , 0x001f;
shl eax , 9;
shl ebx , 6;
shl edx , 3;
or eax , ebx;
or eax , edx;
stosd;
inc esi;
loop loop_1;
pop ebx;
pop ecx;
pop edx;
pop esi;
pop edi;
pop ebp;
ret;
}
}
NESASM void NesDrawLineAlphaMask( PVOID pDestPointer ,DWORD dwDestOffset , PVOID pSrcPointer , DWORD dwSrcOffset , DWORD dwLenght )
{
__asm
{
push ebp;
mov ebp , esp;
push edi;
push esi;
push edx;
push ecx;
push ebx;
mov edi , dword ptr Value1;
mov esi , dword ptr Value3;
mov ecx , dword ptr Value5;
add edi , dword ptr Value2;
add esi , dword ptr Value4;
mov ebx , offset ENGINE_DRAW_LINE_ALPHA_MASK;
loop_1:
mov eax , dword ptr [ esi ];
mov edx , eax;
and eax , 0x00ffffff;
and edx , 0xff000000;
shr edx , 24;
mov dword ptr [ esi ] , eax;
mov eax , dword ptr [ ebx + edx * 4 ];
mov dword ptr [ edi ] , eax;
add edi , 4;
add esi , 4;
loop loop_1;
pop ebx;
pop ecx;
pop edx;
pop esi;
pop edi;
pop ebp;
ret;
}
}
NESASM DWORD NesMemReadByte( PVOID pSrcPointer , DWORD dwOffset )
{
__asm
{
mov eax , dword ptr [ esp + 4 ];
add eax , dword ptr [ esp + 8 ];
mov al , byte ptr [ eax ];
and eax , 0xff;
ret;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -