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

📄 yuvrgb16.c

📁 超级解霸源代码。纯c语言写的。适合有一定编程基础的开发人员用来学习提高
💻 C
📖 第 1 页 / 共 5 页
字号:
{
	asm	mov	Pixels,8
	LoopLine:
	FastYUV2RGB15BitsDouble1Line();
	FastYUV2RGB15BitsDouble1Line();
	FastYUV2RGB15BitsDouble1LineDeletePixel();//Delete one pixel
	FastYUV2RGB15BitsDouble1Line();
	FastYUV2RGB15BitsDouble1Line();
	FastYUV2RGB15BitsDouble1LineDeletePixel();//Delete one pixel
	FastYUV2RGB15BitsDouble1Line();
	FastYUV2RGB15BitsDouble1Line();
	FastYUV2RGB15BitsDouble1LineDeletePixel();//Delete one pixel
	FastYUV2RGB15BitsDouble1Line();
	FastYUV2RGB15BitsDouble1LineDeletePixel();//Delete one pixel
	asm	dec	Pixels		//asm	loop	LoopLine240
	asm	jnz	LoopLine
	_EBP+=976;		//All Y, U, V Line len=0x480;
}
static	void	Align20(void)
{
	asm	nop
	asm	nop
}
void	PASCAL	near	Draw40Pixel32K(void)
{
	FastYUV2RGB15BitsDouble1LineOnly();
	FastYUV2RGB15BitsDouble1LineOnly();
	FastYUV2RGB15BitsDouble1LineOnlyDeletePixel();//Delete one pixel
	FastYUV2RGB15BitsDouble1LineOnly();
	FastYUV2RGB15BitsDouble1LineOnly();
	FastYUV2RGB15BitsDouble1LineOnlyDeletePixel();//Delete one pixel
	FastYUV2RGB15BitsDouble1LineOnly();
	FastYUV2RGB15BitsDouble1LineOnly();
	FastYUV2RGB15BitsDouble1LineOnlyDeletePixel();//Delete one pixel
	FastYUV2RGB15BitsDouble1LineOnly();
	FastYUV2RGB15BitsDouble1LineOnlyDeletePixel();//Delete one pixel
}
static	void	Align21(void)
{
	asm	nop
}
void	PASCAL	near	Over32K1(void)
{
	Draw40Pixel32K();
	FastYUV2RGB15BitsDouble1LineOnly();
	FastYUV2RGB15BitsDouble1LineOnly();
	FastYUV2RGB15BitsDouble1LineOnly();
	FastYUV2RGB15BitsDouble1LineOnly();
	FastYUV2RGB15BitsDouble1LineOnly();
	FastYUV2RGB15BitsDouble1LineOnly();
	__emit__(0x66,0x33,0xFF);
	_AX=0x4F05;_BX=0;_DX=BankSize;
	geninterrupt(0x10);	//Some handbook VGA system will change DX
	FastYUV2RGB15BitsDouble1LineOnlyDeletePixel();//Delete one pixel
	FastYUV2RGB15BitsDouble1LineOnlyDeletePixel();//Delete one pixel
	FastYUV2RGB15BitsDouble1LineOnlyDeletePixel();//Delete one pixel
	FastYUV2RGB15BitsDouble1LineOnly();
	FastYUV2RGB15BitsDouble1LineOnlyDeletePixel();//Delete one pixel
	asm	mov	Pixels,6
	LoopLine:
	Draw40Pixel32K();
	asm	dec	Pixels		//asm	loop	LoopLine240
	asm	jnz	LoopLine
	_EBP+=976;		//All Y, U, V Line len=0x480;
}
static	void	Align22(void)
{
	asm	nop
	asm	nop
}
void	PASCAL	near	Over32K2(void)
{
	asm	mov	Pixels,3
	LoopLine:
	Draw40Pixel32K();
	asm	dec	Pixels		//asm	loop	LoopLine240
	asm	jnz	LoopLine
	FastYUV2RGB15BitsDouble1LineOnly();
	FastYUV2RGB15BitsDouble1LineOnly();
	__emit__(0x66,0x33,0xFF);
	_AX=0x4F05;_BX=0;_DX=BankSize;
	asm	add	dx,dx
	geninterrupt(0x10);	//Some handbook VGA system will change DX
	FastYUV2RGB15BitsDouble1LineOnlyDeletePixel();//Delete one pixel
	FastYUV2RGB15BitsDouble1LineOnly();
	FastYUV2RGB15BitsDouble1LineOnly();
	FastYUV2RGB15BitsDouble1LineOnlyDeletePixel();//Delete one pixel
	FastYUV2RGB15BitsDouble1LineOnly();
	FastYUV2RGB15BitsDouble1LineOnly();
	FastYUV2RGB15BitsDouble1LineOnlyDeletePixel();//Delete one pixel
	FastYUV2RGB15BitsDouble1LineOnly();
	FastYUV2RGB15BitsDouble1LineOnlyDeletePixel();//Delete one pixel
	asm	mov	Pixels,4
	LoopLine1:
	Draw40Pixel32K();
	asm	dec	Pixels		//asm	loop	LoopLine240
	asm	jnz	LoopLine1
	_EBP+=976;		//All Y, U, V Line len=0x480;
}
static	void	Align23(void)
{
}
void	PASCAL	near	Over32K3(void)
{
	asm	mov	Pixels,4
	LoopLine:
	Draw40Pixel32K();
	asm	dec	Pixels		//asm	loop	LoopLine240
	asm	jnz	LoopLine
	FastYUV2RGB15BitsDouble1LineOnly();
	FastYUV2RGB15BitsDouble1LineOnly();
	FastYUV2RGB15BitsDouble1LineOnlyDeletePixel();//Delete one pixel
	FastYUV2RGB15BitsDouble1LineOnly();
	FastYUV2RGB15BitsDouble1LineOnlyDeletePixel();//Delete one pixel
	FastYUV2RGB15BitsDouble1LineOnly();
	FastYUV2RGB15BitsDouble1LineOnlyDeletePixel();//Delete one pixel
	FastYUV2RGB15BitsDouble1LineOnly();
	FastYUV2RGB15BitsDouble1LineOnlyDeletePixel();//Delete one pixel
	__emit__(0x66,0x33,0xFF);
	_AX=0x4F05;_BX=0;_DX=BankSize;
	asm	add	dx,dx
	asm	add	dx,BankSize
	geninterrupt(0x10);	//Some handbook VGA system will change DX
	FastYUV2RGB15BitsDouble1LineOnly();
	FastYUV2RGB15BitsDouble1LineOnly();
	asm	mov	Pixels,3
	LoopLine1:
	Draw40Pixel32K();
	asm	dec	Pixels		//asm	loop	LoopLine240
	asm	jnz	LoopLine1
	_EBP+=976;		//All Y, U, V Line len=0x480;
}
static	void	Align24(void)
{
}
void	PASCAL	near	Over32K4(void)
{
	asm	mov	Pixels,6
	LoopLine:
	Draw40Pixel32K();
	asm	dec	Pixels		//asm	loop	LoopLine240
	asm	jnz	LoopLine
	FastYUV2RGB15BitsDouble1LineOnly();
	FastYUV2RGB15BitsDouble1LineOnly();
	FastYUV2RGB15BitsDouble1LineOnly();
	FastYUV2RGB15BitsDouble1LineOnly();
	__emit__(0x66,0x33,0xFF);
	_AX=0x4F05;_BX=0;_DX=BankSize;
	asm	shl	dx,2
	geninterrupt(0x10);	//Some handbook VGA system will change DX
	FastYUV2RGB15BitsDouble1LineOnlyDeletePixel();//Delete one pixel
	FastYUV2RGB15BitsDouble1LineOnly();
	FastYUV2RGB15BitsDouble1LineOnlyDeletePixel();//Delete one pixel
	FastYUV2RGB15BitsDouble1LineOnly();
	FastYUV2RGB15BitsDouble1LineOnlyDeletePixel();//Delete one pixel
	FastYUV2RGB15BitsDouble1LineOnly();
	FastYUV2RGB15BitsDouble1LineOnlyDeletePixel();//Delete one pixel
	Draw40Pixel32K();
	_EBP+=976;		//All Y, U, V Line len=0x480;
}
void	Decode5Lines32K(void)
{
	DecodeTwoLine32KDouble();
	__emit__(0x66,0x81,0xC6,0xA0,0x07,0x00,0x00);//_ESI+=(800+0x480);
	__emit__(0x66,0x81,0xC7,0x00,0x05,0x00,0x00);//_EDI+=1280;	//2 line had draw
	DecodeTwoLine32KDouble();
	__emit__(0x66,0x81,0xC6,0xA0,0x07,0x00,0x00);//_ESI+=(800+0x480);
	__emit__(0x66,0x81,0xC7,0x00,0x05,0x00,0x00);//_EDI+=1280;	//2 line had draw
	DecodeOneLine32KMixDouble();	//Two lines mix to one line
	__emit__(0x66,0x81,0xC6,0xA0,0x07,0x00,0x00);//_ESI+=(800+0x480);
}
static	void	Align25(void)
{
	asm	nop
	asm	nop
}
void	First32KOver(void)
{//Draw 5 Line
	DecodeOneLine32KDouble();
	__emit__(0x66,0x81,0xC6,0x20,0x03,0x00,0x00);//_ESI+=800;	//1 line had draw
	_EBP-=0x480;
	Over32K1();
	__emit__(0x66,0x81,0xC6,0x20,0x03,0x00,0x00);//_ESI+=800;	//1 line had draw
	DecodeTwoLine32KDouble();
	__emit__(0x66,0x81,0xC6,0xA0,0x07,0x00,0x00);//_ESI+=(800+0x480);
	__emit__(0x66,0x81,0xC7,0x00,0x05,0x00,0x00);//_EDI+=1280;	//2 line had draw
	DecodeOneLine32KMixDouble();	//Two lines mix to one line
	__emit__(0x66,0x81,0xC6,0xA0,0x07,0x00,0x00);//_ESI+=(800+0x480);
}
static	void	Align26(void)
{
}
void	Second32KOver(void)
{//Draw 5 Line
	DecodeTwoLine32KDouble();
	__emit__(0x66,0x81,0xC6,0xA0,0x07,0x00,0x00);//_ESI+=(800+0x480);
	__emit__(0x66,0x81,0xC7,0x00,0x05,0x00,0x00);//_EDI+=1280;	//2 line had draw
	Over32K2();
	__emit__(0x66,0x81,0xC6,0x20,0x03,0x00,0x00);//_ESI+=800;	//1 line had draw
	_EBP-=0x480;
	DecodeOneLine32KDouble();
	__emit__(0x66,0x81,0xC6,0x20,0x03,0x00,0x00);//_ESI+=800;	//1 line had draw
	DecodeOneLine32KMixDouble();	//Two lines mix to one line
	__emit__(0x66,0x81,0xC6,0xA0,0x07,0x00,0x00);//_ESI+=(800+0x480);
}
static	void	Align27(void)
{
}
void	Third32KOver(void)
{//Draw 5 Line
	DecodeTwoLine32KDouble();
	__emit__(0x66,0x81,0xC6,0xA0,0x07,0x00,0x00);//_ESI+=(800+0x480);
	__emit__(0x66,0x81,0xC7,0x00,0x05,0x00,0x00);//_EDI+=1280;	//2 line had draw
	DecodeOneLine32KDouble();
	__emit__(0x66,0x81,0xC6,0x20,0x03,0x00,0x00);//_ESI+=800;	//1 line had draw
	_EBP-=0x480;
	Over32K3();
	__emit__(0x66,0x81,0xC6,0x20,0x03,0x00,0x00);//_ESI+=800;	//1 line had draw
	DecodeOneLine32KMixDouble();	//Two lines mix to one line
	__emit__(0x66,0x81,0xC6,0xA0,0x07,0x00,0x00);//_ESI+=(800+0x480);
}
static	void	Align28(void)
{
}
void	PASCAL	near	Over32K4Mix(void)
{
	asm	mov	Pixels,6
	LoopLine:
	Draw40Pixel32K();
	asm	dec	Pixels		//asm	loop	LoopLine240
	asm	jnz	LoopLine
	FastYUV2RGB15BitsDouble1Line();
	FastYUV2RGB15BitsDouble1Line();
	FastYUV2RGB15BitsDouble1Line();
	FastYUV2RGB15BitsDouble1Line();
	__emit__(0x66,0x33,0xFF);
	_AX=0x4F05;_BX=0;_DX=BankSize;
	asm	shl	dx,2
	geninterrupt(0x10);	//Some handbook VGA system will change DX
	FastYUV2RGB15BitsDouble1LineDeletePixel();//Delete one pixel
	FastYUV2RGB15BitsDouble1Line();
	FastYUV2RGB15BitsDouble1LineDeletePixel();//Delete one pixel
	FastYUV2RGB15BitsDouble1Line();
	FastYUV2RGB15BitsDouble1LineDeletePixel();//Delete one pixel
	FastYUV2RGB15BitsDouble1Line();
	FastYUV2RGB15BitsDouble1LineDeletePixel();//Delete one pixel
	Draw40Pixel32K();
	_EBP+=976;		//All Y, U, V Line len=0x480;
}
void	Fouth32KOver(void)
{//Draw 5 Line
	DecodeTwoLine32KDouble();
	__emit__(0x66,0x81,0xC6,0xA0,0x07,0x00,0x00);//_ESI+=(800+0x480);
	__emit__(0x66,0x81,0xC7,0x00,0x05,0x00,0x00);//_EDI+=1280;	//2 line had draw
	DecodeTwoLine32KDouble();
	__emit__(0x66,0x81,0xC6,0xA0,0x07,0x00,0x00);//_ESI+=(800+0x480);
	__emit__(0x66,0x81,0xC7,0x00,0x05,0x00,0x00);//_EDI+=1280;	//2 line had draw
	Over32K4Mix();
	__emit__(0x66,0x81,0xC6,0x20,0x03,0x00,0x00);//_ESI+=(800);
}
DWORD	lStride;	//Video Memory Line width.
static	void	Align29(void)
{
	asm	nop
	asm	nop
}
void	PASCAL near Draw640x240Banking32K(void)
{	//Only for VESA 640x480 -> 640x240 banking VGA
	_AX=0x4F05;
	_BX=0;_DX=0;
	geninterrupt(0x10);	//Some handbook VGA system will change DX
	asm	mov	es,OffScrSel;
	asm	xor	di,di
	Counter=0;
	if(DeleteLine==5)
		{
		/////////////352x240/////////////
		_DX=A000Buffer;
		__emit__(0x26,0x66,0x8B,0x75,0x04);//asm mov esi,es:[di+4]
		__emit__(0x26,0x66,0x8B,0x6D,0x08);//asm mov ebp,es:[di+8]
		__emit__(0x26,0x8E,0x6D,0x10);//asm	mov	gs,es:[di+0x10]	//GS-> Video data
		asm	mov	es,dx
		_EDI=0;
		////// First 50 Lines /////////
		Line=25;
		MoveVideoData2401:
			DecodeTwoLine32KDouble();
			_ESI+=(800+0x480);_EDI+=1280;	//2 line had draw
			asm	dec	Line
			asm	jnz	near ptr MoveVideoData2401
		/////// Next Line ///////
		DecodeOneLine32KDouble();_ESI+=800;	//1 line had draw
		_EBP-=0x480;
		Over32K1(); _ESI+=800;// Full 64K
		////// 2nd 50 Lines /////////
		Line=25;
		MoveVideoData2402:
			DecodeTwoLine32KDouble();
			_ESI+=(800+0x480);_EDI+=1280;	//2 line had draw
			asm	dec	Line
			asm	jnz	near ptr MoveVideoData2402
		/////// Next Line ///////
		Over32K2();_ESI+=800;// Full 64K
		_EBP-=0x480;
		DecodeOneLine32KDouble();_ESI+=800;
		////// 3rd 48 Lines /////////
		Line=24;
		MoveVideoData2403:
			DecodeTwoLine32KDouble();
			_ESI+=(800+0x480);_EDI+=1280;	//2 line had draw
			asm	dec	Line
			asm	jnz	near ptr MoveVideoData2403
		/////// Next Line ///////
		DecodeOneLine32KDouble();_ESI+=800;
		_EBP-=0x480;
		Over32K3();	_ESI+=800;// Full 64K
		////// 4th 50 Lines /////////
		Line=25;
		MoveVideoData2404:
			DecodeTwoLine32KDouble();
			_ESI+=(800+0x480);_EDI+=1280;	//2 line had draw
			asm	dec	Line
			asm	jnz	near ptr MoveVideoData2404
		/////// Next Line ///////
		Over32K4();_ESI+=800;// Full 64K
		_EBP-=0x480;
		DecodeOneLine32KDouble();_ESI+=800;
		////// First 34 Lines /////////
		Line=17;
		MoveVideoData240:
			DecodeTwoLine32KDouble();
			_ESI+=(800+0x480);_EDI+=1280;	//2 line had draw
			asm	dec	Line
			asm	jnz	near ptr MoveVideoData240
		}
	else	{// 288 - > 240 6/5 delete 1 lines.
		/////////////352x288/////////
		_DX=A000Buffer;
		__emit__(0x26,0x66,0x8B,0x75,0x04);//asm mov esi,es:[di+4]
		__emit__(0x26,0x66,0x8B,0x6D,0x08);//asm mov ebp,es:[di+8]
		__emit__(0x26,0x8E,0x6D,0x10);//asm	mov	gs,es:[di+0x10]	//GS-> Video data
		asm	mov	es,dx
		_EDI=0;
		Line=10;
		Draw50Lines288:
			Decode5Lines32K();
			asm	dec	Line
			asm	jnz	near ptr Draw50Lines288
		First32KOver();	//First 64K
		Line=9;
		Draw45Lines2881:
			Decode5Lines32K();
			asm	dec	Line
			asm	jnz	near ptr Draw45Lines2881
		Second32KOver();	//2nd 64K
		Line=9;
		Draw45Lines2882:
			Decode5Lines32K();
			asm	dec	Line
			asm	jnz	near ptr Draw45Lines2882
		Third32KOver();
		Line=9;
		Draw45Lines2883:
			Decode5Lines32K();
			asm	dec	Line
			asm	jnz	near ptr Draw45Lines2883
		Fouth32KOver();
		Line=7;
		Draw35Lines288:
			Decode5Lines32K();
			asm	dec	Line
			asm	jnz	near ptr Draw35Lines288
		}
	_AX=0;	//return 0;
}
static	void	Align30(void)
{
	asm	nop
}
void	PASCAL near BuildYVURGB15DoubleColor(void)
{	//for 320x240 32K Color in memory
	asm	mov	es,OffScrSel;
	asm	xor	di,di
	Counter=0;
	if(DeleteLine==5)
		{
		/////////////352x240/////////////
		_DX=LinearSelSurface;
		__emit__(0x26,0x66,0x8B,0x75,0x04);//asm mov esi,es:[di+4]
		__emit__(0x26,0x66,0x8B,0x6D,0x08);//asm mov ebp,es:[di+8]
		__emit__(0x26,0x8E,0x6D,0x10);//asm	mov	gs,es:[di+0x10]	//GS-> Video data
		asm	mov	es,dx
		_EDI=LinearOffSurface;
		Line=120;
		MoveVideoData240:
		////// 352 bytes 32 times.
		Pixels=8;
		LoopLine240:
		FastYUV2RGB15BitsDouble();
		FastYUV2RGB15BitsDouble();
		FastYUV2RGB15BitsDoubleDeletePixel();//Delete one pixel
		FastYUV2RGB15BitsDouble();
		FastYUV2RGB15BitsDouble();
		FastYUV2RGB15BitsDoubleDeletePixel();//Delete one pixel
		FastYUV2RGB15BitsDouble();
		FastYUV2RGB15BitsDouble();
		FastYUV2RGB15BitsDoubleDeletePixel();//Delete one pixel
		FastYUV2RGB15BitsDouble();
		FastYUV2RGB15BitsDoubleDeletePixel();//Delete one pixel
		asm	dec	Pixels		//asm	loop	LoopLine240
		asm	jnz	LoopLine240
		_EBP+=976;
		_ESI+=(800+0x480);	//2 line had draw
		_EDI+=lStride;
		_EDI+=1280;	//640*2
		_EDI+=lStride;
		asm	dec	Line
		asm	jnz	near ptr MoveVideoData240
		}
	else	{// 288 - > 240 6/5 delete 1 lines.
		/////////////352x288/////////
		_DX=LinearSelSurface;
		__emit__(0x26,0x66,0x8B,0x75,0x04);//asm mov esi,es:[di+4]

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -