📄 nesasm.cpp
字号:
#include "stdafx.h"
DWORD ENGINE_DRAW_LINE_ALPHA_SPEED_MASK[ 2 ] = { 0x007f7f7f , 0x007f7f7f };
DWORD ENGINE_DRAW_LINE_ALPHA_QUALITY_SRCBITMAP_MASK[ 256 ][ 2 ];
DWORD ENGINE_DRAW_LINE_ALPHA_QUALITY_DESTBITMAP_MASK[ 256 ][ 2 ];
DWORD ENGINE_DRAW_LINE_ALPHA_QUALITY_COLOR_MASK1 = 0x00ff0000;
DWORD ENGINE_DRAW_LINE_ALPHA_QUALITY_COLOR_MASK2 = 0x0000ff00;
DWORD ENGINE_DRAW_LINE_ALPHA_QUALITY_COLOR_MASK3 = 0x000000ff;
DWORD ENGINE_DRAW_LINE_ALPHA_MASK[ 256 ];
DWORD ENGINE_DRAW_LINE_ALPHA_CHUANNEL_MASK[ 2 ] = { 0x00ff00ff , 0x000000ff };
//DWORD ENGIEN_ALPHA_CHUNNEL_MASK[ 2 ] = { 0x00ff00ff , 0x000000ff };
void NesDrawLineInit( void )
{
DWORD i;
for( i = 0; i < 256; i ++ )
{
ENGINE_DRAW_LINE_ALPHA_QUALITY_SRCBITMAP_MASK[ i ][ 0 ] = 0x00010001 * i;
ENGINE_DRAW_LINE_ALPHA_QUALITY_SRCBITMAP_MASK[ i ][ 1 ] = 0x00010001 * i;
ENGINE_DRAW_LINE_ALPHA_QUALITY_DESTBITMAP_MASK[ i ][ 0 ]= 0x00010001 * ( 255 - i );
ENGINE_DRAW_LINE_ALPHA_QUALITY_DESTBITMAP_MASK[ i ][ 1 ]= 0x00010001 * ( 255 - i );
ENGINE_DRAW_LINE_ALPHA_MASK[ i ] = 0x00010101 * ( 255 - i );
}
}
NESASM void NesMemSet( PVOID pDestPointer , DWORD dwDestOffset , DWORD dwValue , DWORD dwLenght )
{
__asm
{
push ebp;
mov ebp , esp;
push edi;
push ecx;
mov edi , dword ptr Value1;
mov eax , dword ptr Value3;
mov ecx , dword ptr Value4;
add edi , dword ptr Value2;
rep stosd;
pop ecx;
pop edi;
pop ebp;
ret;
}
}
NESASM void NesDrawLineNormal( 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;
rep movsd;
pop ecx;
pop esi;
pop edi;
pop ebp;
ret;
}
}
NESASM void NesDrawLineNormalColorKey( 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;
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 , dword ptr Value6;
loop_1:
lodsd;
cmp eax , ebx;
je loop_2;
stosd;
loop loop_1;
pop ebx;
pop ecx;
pop esi;
pop edi;
pop ebp;
ret;
loop_2:
add edi , 4;
loop loop_1;
pop ebx;
pop ecx;
pop esi;
pop edi;
pop ebp;
ret;
}
}
NESASM void NesDrawLineAlphaSpeed( 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;//[ Val1 ];
mov esi , dword ptr Value3;//[ Val3 ];
mov ecx , dword ptr Value5;//[ Val5 ];
add edi , dword ptr Value2;//[ Val2 ];
add esi , dword ptr Value4;//[ Val4 ];
mov eax , ecx;
shr ecx , 1;
and eax , 7;
movq mm0 , ENGINE_DRAW_LINE_ALPHA_SPEED_MASK;
cmp eax , 0;
jne loop_2;
loop_1:
movq mm1 , [ esi ];
movq mm2 , [ edi ];
psrlq mm1 , 1;
psrlq mm2 , 1;
pand mm1 , mm0;
pand mm2 , mm0;
paddb 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 ];
psrlq mm1 , 1;
psrlq mm2 , 1;
pand mm1 , mm0;
pand mm2 , mm0;
paddb 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 NesDrawLineAlphaSpeedColorKey( 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;
mov edx , 0x007f7f7f;
loop_1:
mov eax , dword ptr [ esi ];
cmp eax , dword ptr Value6;
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:
mov ebx , dword ptr [ edi ];
shr eax , 1;
shr ebx , 1;
and eax , edx;
and ebx , edx;
add eax , ebx;
mov dword ptr [ edi ] , eax;
add esi , 4;
add edi , 4;
loop loop_1;
pop edx;
pop ebx;
pop ecx;
pop esi;
pop edi;
pop ebp;
ret;
}
}
NESASM void NesDrawLineAlphaQuality( PVOID pDestPointer ,DWORD dwDestOffset , PVOID pSrcPointer , DWORD dwSrcOffset , DWORD dwLenght , DWORD dwAlpha )
{
__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;
mov eax , offset ENGINE_DRAW_LINE_ALPHA_QUALITY_SRCBITMAP_MASK;
mov edx , offset ENGINE_DRAW_LINE_ALPHA_QUALITY_DESTBITMAP_MASK;
mov ebx , dword ptr Value6;
lea eax , dword ptr [ eax + ebx * 8 ];
lea edx , dword ptr [ edx + ebx * 8 ];
// shr ecx , 2;
movq mm6 , [ eax ];
movq mm7 , [ edx ];
pxor mm0 , mm0;
loop_1:
movd mm1 , [ esi ];
movd mm2 , [ edi ];
punpcklbw mm1 , mm0;
punpcklbw mm2 , mm0;
pmullw mm1 , mm6;
pmullw mm2 , mm7;
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;
loop loop_1;
pop edx;
pop ebx;
pop ecx;
pop esi;
pop edi;
pop ebp;
ret;
emms;
}
}
NESASM void NesDrawLineAlphaQualityColorKey( PVOID pDestPointer ,DWORD dwDestOffset , PVOID pSrcPointer , DWORD dwSrcOffset , DWORD dwLenght , DWORD dwAlpha , DWORD dwColorKey )
{
__asm
{
push ebp;
mov ebp , esp;
push edi;
push esi;
push ecx;
push ebx;
push edx;
mov edi , dword ptr Value1;
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 , offset ENGINE_DRAW_LINE_ALPHA_QUALITY_SRCBITMAP_MASK;
mov edx , offset ENGINE_DRAW_LINE_ALPHA_QUALITY_DESTBITMAP_MASK;
mov ebx , dword ptr Value6;
lea eax , dword ptr [ eax + ebx * 8 ];
lea edx , dword ptr [ edx + ebx * 8 ];
// shr ecx , 2;
movq mm6 , [ eax ];
movq mm7 , [ edx ];
pxor mm0 , mm0;
mov ebx , dword ptr Value7;
loop_1:
mov eax , dword ptr [ esi ];
cmp ebx , eax;
je loop_2;
// movd mm1 , [ esi ];
movd mm1 , eax;
movd mm2 , [ edi ];
punpcklbw mm1 , mm0;
punpcklbw mm2 , mm0;
pmullw mm1 , mm6;
pmullw mm2 , mm7;
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;
loop loop_1;
pop edx;
pop ebx;
pop ecx;
pop esi;
pop edi;
pop ebp;
ret;
loop_2:
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 NesDrawLineAlphaAdd( PVOID pDestPointer ,DWORD dwDestOffset , PVOID pSrcPointer , DWORD dwSrcOffset , DWORD dwLenght )
{
__asm
{
push ebp;
mov ebp , esp;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -