⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nesasm.cpp

📁 冰人引擎,本2d游戏引擎定位于游戏次中层引擎。他不像CDX等引擎那样
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		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 + -