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

📄 yuvrgb16.c

📁 超级解霸源代码。纯c语言写的。适合有一定编程基础的开发人员用来学习提高
💻 C
📖 第 1 页 / 共 5 页
字号:
		FastYUV2RGB16Bits1Line();
		FastYUV2RGB16Bits1Line();
		FastYUV2RGB16Bits1LineDeletePixel();//Delete one pixel
		FastYUV2RGB16Bits1Line();
		FastYUV2RGB16Bits1Line();
		FastYUV2RGB16Bits1LineDeletePixel();//Delete one pixel
		FastYUV2RGB16Bits1Line();
		FastYUV2RGB16Bits1Line();
		FastYUV2RGB16Bits1LineDeletePixel();//Delete one pixel
		FastYUV2RGB16Bits1Line();
		FastYUV2RGB16Bits1LineDeletePixel();//Delete one pixel
		asm	dec	Pixels
		asm	jnz	LoopLine288
		_EBP+=976;
		_ESI+=(800+0x480);	//2 line had draw only one
		asm	dec	Line
		asm	jz	RETURN
		asm	jmp	MoveVideoData288
		}
	RETURN:
	_AX=0;	//return 0;
}
void	PASCAL near Draw640x240Banking64K(void)
{	//Only for VESA 640x480 -> 640x240 banking VGA
	int	BankCnt=4;
	int	BankingSize=BankSize;
	int	Banking=0;	//Select Bank 0
	//Build in memory 320x240 16Bits video data
	asm	push	bp
	BuildYVURGB16Color();	//Linear = Buffer for 320x240 16bits.
	asm	pop	bp
	//Set Bank and draw 64K data
	_ESI=0;
	_ES=A000Buffer;
	_DS=Linear;	//Video shadow buffer
	DrawPicture:
		_AX=0x4F05;
		_BX=0;
		_DX=Banking;
		geninterrupt(0x10);	//Some handbook VGA system will change DX
		_DI=0;
		asm	mov	cx,16384
		Draw64KMemory:
		__emit__(0x67,0xAD);		//asm	lodsw	//32Bit address
		asm	mov 	dx,ax
		__emit__(0x66,0xC1,0xE0,0x10);	//asm	shl	eax,16
		asm	mov	ax,dx
		__emit__(0x66,0xAB);		//asm	stosd
		asm	dec	cx//asm	loop	Draw64KMemory
		asm	jnz	Draw64KMemory
	asm	mov	dx,BankingSize
	asm	add	Banking,dx
	asm	dec	BankCnt
	asm	jne	DrawPicture
	//Select Bank 5
	_AX=0x4F05;
	_BX=0;
	_DX=Banking;
	geninterrupt(0x10);
	_DI=0;
	asm	mov	cx,11264	//lept data.
	Draw64KMemoryLess:
	__emit__(0x67,0xAD);		//asm	lodsw	//32Bit address
	asm	mov 	dx,ax
	__emit__(0x66,0xC1,0xE0,0x10);	//asm	shl	eax,16
	asm	mov	ax,dx
	__emit__(0x66,0xAB);		//asm	stosd
	asm	dec	cx//asm	loop	Draw64KMemoryLess
	asm	jnz	Draw64KMemoryLess
}
\***************************************************/
////////////////// 640x240 Banking mode /////////////
void	FastYUV2RGB16BitsDouble(void);
void	FastYUV2RGB16BitsDoubleDeletePixel(void);
void	FastYUV2RGB16BitsDouble1Line(void);
void	FastYUV2RGB16BitsDouble1LineDeletePixel(void);//Delete one pixel
void	FastYUV2RGB16BitsDouble1LineOnly(void);
void	FastYUV2RGB16BitsDouble1LineOnlyDeletePixel(void);//Delete one pixel
static	void	Align2(void)
{
	asm	nop
}
void	PASCAL	near	DecodeTwoLine64KDouble(void)
{
	asm	mov	Pixels,8
	LoopLine:
	FastYUV2RGB16BitsDouble();
	FastYUV2RGB16BitsDouble();
	FastYUV2RGB16BitsDoubleDeletePixel();//Delete one pixel
	FastYUV2RGB16BitsDouble();
	FastYUV2RGB16BitsDouble();
	FastYUV2RGB16BitsDoubleDeletePixel();//Delete one pixel
	FastYUV2RGB16BitsDouble();
	FastYUV2RGB16BitsDouble();
	FastYUV2RGB16BitsDoubleDeletePixel();//Delete one pixel
	FastYUV2RGB16BitsDouble();
	FastYUV2RGB16BitsDoubleDeletePixel();//Delete one pixel
	asm	dec	Pixels		//asm	loop	LoopLine240
	asm	jnz	LoopLine
	_EBP+=976;
}
static	void	Align3(void)
{
	asm	nop
	asm	nop
}
void	PASCAL	near	DecodeOneLine64KDouble(void)
{
	asm	mov	Pixels,8
	LoopLine:
	FastYUV2RGB16BitsDouble1LineOnly();
	FastYUV2RGB16BitsDouble1LineOnly();
	FastYUV2RGB16BitsDouble1LineOnlyDeletePixel();//Delete one pixel
	FastYUV2RGB16BitsDouble1LineOnly();
	FastYUV2RGB16BitsDouble1LineOnly();
	FastYUV2RGB16BitsDouble1LineOnlyDeletePixel();//Delete one pixel
	FastYUV2RGB16BitsDouble1LineOnly();
	FastYUV2RGB16BitsDouble1LineOnly();
	FastYUV2RGB16BitsDouble1LineOnlyDeletePixel();//Delete one pixel
	FastYUV2RGB16BitsDouble1LineOnly();
	FastYUV2RGB16BitsDouble1LineOnlyDeletePixel();//Delete one pixel
	asm	dec	Pixels		//asm	loop	LoopLine240
	asm	jnz	LoopLine
	_EBP+=976;		//All Y, U, V Line len=0x480;
}
static	void	Align4(void)
{
	asm	nop
	asm	nop
}
void	PASCAL	near	DecodeOneLine64KMixDouble(void)
{
	asm	mov	Pixels,8
	LoopLine:
	FastYUV2RGB16BitsDouble1Line();
	FastYUV2RGB16BitsDouble1Line();
	FastYUV2RGB16BitsDouble1LineDeletePixel();//Delete one pixel
	FastYUV2RGB16BitsDouble1Line();
	FastYUV2RGB16BitsDouble1Line();
	FastYUV2RGB16BitsDouble1LineDeletePixel();//Delete one pixel
	FastYUV2RGB16BitsDouble1Line();
	FastYUV2RGB16BitsDouble1Line();
	FastYUV2RGB16BitsDouble1LineDeletePixel();//Delete one pixel
	FastYUV2RGB16BitsDouble1Line();
	FastYUV2RGB16BitsDouble1LineDeletePixel();//Delete one pixel
	asm	dec	Pixels		//asm	loop	LoopLine240
	asm	jnz	LoopLine
	_EBP+=976;		//All Y, U, V Line len=0x480;
}
static	void	Align5(void)
{
	asm	nop
	asm	nop
}
void	PASCAL	near	Draw40Pixel(void)
{
	FastYUV2RGB16BitsDouble1LineOnly();
	FastYUV2RGB16BitsDouble1LineOnly();
	FastYUV2RGB16BitsDouble1LineOnlyDeletePixel();//Delete one pixel
	FastYUV2RGB16BitsDouble1LineOnly();
	FastYUV2RGB16BitsDouble1LineOnly();
	FastYUV2RGB16BitsDouble1LineOnlyDeletePixel();//Delete one pixel
	FastYUV2RGB16BitsDouble1LineOnly();
	FastYUV2RGB16BitsDouble1LineOnly();
	FastYUV2RGB16BitsDouble1LineOnlyDeletePixel();//Delete one pixel
	FastYUV2RGB16BitsDouble1LineOnly();
	FastYUV2RGB16BitsDouble1LineOnlyDeletePixel();//Delete one pixel
}
static	void	Align6(void)
{
	asm	nop
}
void	PASCAL	near	Over64K1(void)
{
	Draw40Pixel();
	FastYUV2RGB16BitsDouble1LineOnly();
	FastYUV2RGB16BitsDouble1LineOnly();
	FastYUV2RGB16BitsDouble1LineOnly();
	FastYUV2RGB16BitsDouble1LineOnly();
	FastYUV2RGB16BitsDouble1LineOnly();
	FastYUV2RGB16BitsDouble1LineOnly();
	__emit__(0x66,0x33,0xFF);
	_AX=0x4F05;_BX=0;_DX=BankSize;
	geninterrupt(0x10);	//Some handbook VGA system will change DX
	FastYUV2RGB16BitsDouble1LineOnlyDeletePixel();//Delete one pixel
	FastYUV2RGB16BitsDouble1LineOnlyDeletePixel();//Delete one pixel
	FastYUV2RGB16BitsDouble1LineOnlyDeletePixel();//Delete one pixel
	FastYUV2RGB16BitsDouble1LineOnly();
	FastYUV2RGB16BitsDouble1LineOnlyDeletePixel();//Delete one pixel
	asm	mov	Pixels,6
	LoopLine:
	Draw40Pixel();
	asm	dec	Pixels		//asm	loop	LoopLine240
	asm	jnz	LoopLine
	_EBP+=976;		//All Y, U, V Line len=0x480;
}
static	void	Align7(void)
{
	asm	nop
	asm	nop
}
void	PASCAL	near	Over64K2(void)
{
	asm	mov	Pixels,3
	LoopLine:
	Draw40Pixel();
	asm	dec	Pixels		//asm	loop	LoopLine240
	asm	jnz	LoopLine
	FastYUV2RGB16BitsDouble1LineOnly();
	FastYUV2RGB16BitsDouble1LineOnly();
	__emit__(0x66,0x33,0xFF);
	_AX=0x4F05;_BX=0;_DX=BankSize;
	asm	add	dx,dx
	geninterrupt(0x10);	//Some handbook VGA system will change DX
	FastYUV2RGB16BitsDouble1LineOnlyDeletePixel();//Delete one pixel
	FastYUV2RGB16BitsDouble1LineOnly();
	FastYUV2RGB16BitsDouble1LineOnly();
	FastYUV2RGB16BitsDouble1LineOnlyDeletePixel();//Delete one pixel
	FastYUV2RGB16BitsDouble1LineOnly();
	FastYUV2RGB16BitsDouble1LineOnly();
	FastYUV2RGB16BitsDouble1LineOnlyDeletePixel();//Delete one pixel
	FastYUV2RGB16BitsDouble1LineOnly();
	FastYUV2RGB16BitsDouble1LineOnlyDeletePixel();//Delete one pixel
	asm	mov	Pixels,4
	LoopLine1:
	Draw40Pixel();
	asm	dec	Pixels		//asm	loop	LoopLine240
	asm	jnz	LoopLine1
	_EBP+=976;		//All Y, U, V Line len=0x480;
}
static	void	Align8(void)
{
}
void	PASCAL	near	Over64K3(void)
{
	asm	mov	Pixels,4
	LoopLine:
	Draw40Pixel();
	asm	dec	Pixels		//asm	loop	LoopLine240
	asm	jnz	LoopLine
	FastYUV2RGB16BitsDouble1LineOnly();
	FastYUV2RGB16BitsDouble1LineOnly();
	FastYUV2RGB16BitsDouble1LineOnlyDeletePixel();//Delete one pixel
	FastYUV2RGB16BitsDouble1LineOnly();
	FastYUV2RGB16BitsDouble1LineOnlyDeletePixel();//Delete one pixel
	FastYUV2RGB16BitsDouble1LineOnly();
	FastYUV2RGB16BitsDouble1LineOnlyDeletePixel();//Delete one pixel
	FastYUV2RGB16BitsDouble1LineOnly();
	FastYUV2RGB16BitsDouble1LineOnlyDeletePixel();//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
	FastYUV2RGB16BitsDouble1LineOnly();
	FastYUV2RGB16BitsDouble1LineOnly();
	asm	mov	Pixels,3
	LoopLine1:
	Draw40Pixel();
	asm	dec	Pixels		//asm	loop	LoopLine240
	asm	jnz	LoopLine1
	_EBP+=976;		//All Y, U, V Line len=0x480;
}
static	void	Align9(void)
{
}
void	PASCAL	near	Over64K4(void)
{
	asm	mov	Pixels,6
	LoopLine:
	Draw40Pixel();
	asm	dec	Pixels		//asm	loop	LoopLine240
	asm	jnz	LoopLine
	FastYUV2RGB16BitsDouble1LineOnly();
	FastYUV2RGB16BitsDouble1LineOnly();
	FastYUV2RGB16BitsDouble1LineOnly();
	FastYUV2RGB16BitsDouble1LineOnly();
	__emit__(0x66,0x33,0xFF);
	_AX=0x4F05;_BX=0;_DX=BankSize;
	asm	shl	dx,2
	geninterrupt(0x10);	//Some handbook VGA system will change DX
	FastYUV2RGB16BitsDouble1LineOnlyDeletePixel();//Delete one pixel
	FastYUV2RGB16BitsDouble1LineOnly();
	FastYUV2RGB16BitsDouble1LineOnlyDeletePixel();//Delete one pixel
	FastYUV2RGB16BitsDouble1LineOnly();
	FastYUV2RGB16BitsDouble1LineOnlyDeletePixel();//Delete one pixel
	FastYUV2RGB16BitsDouble1LineOnly();
	FastYUV2RGB16BitsDouble1LineOnlyDeletePixel();//Delete one pixel
	Draw40Pixel();
	_EBP+=976;		//All Y, U, V Line len=0x480;
}
void	Decode5Lines(void)
{
	DecodeTwoLine64KDouble();
	__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
	DecodeTwoLine64KDouble();
	__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
	DecodeOneLine64KMixDouble();	//Two lines mix to one line
	__emit__(0x66,0x81,0xC6,0xA0,0x07,0x00,0x00);//_ESI+=(800+0x480);
}
static	void	Align10(void)
{
	asm	nop
	asm	nop
}
void	First64KOver(void)
{//Draw 5 Line
	DecodeOneLine64KDouble();
	__emit__(0x66,0x81,0xC6,0x20,0x03,0x00,0x00);//_ESI+=800;	//1 line had draw
	_EBP-=0x480;
	Over64K1();
	__emit__(0x66,0x81,0xC6,0x20,0x03,0x00,0x00);//_ESI+=800;	//1 line had draw
	DecodeTwoLine64KDouble();
	__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
	DecodeOneLine64KMixDouble();	//Two lines mix to one line
	__emit__(0x66,0x81,0xC6,0xA0,0x07,0x00,0x00);//_ESI+=(800+0x480);
}
static	void	Align11(void)
{
}
void	Second64KOver(void)
{//Draw 5 Line
	DecodeTwoLine64KDouble();
	__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
	Over64K2();
	__emit__(0x66,0x81,0xC6,0x20,0x03,0x00,0x00);//_ESI+=800;	//1 line had draw
	_EBP-=0x480;
	DecodeOneLine64KDouble();
	__emit__(0x66,0x81,0xC6,0x20,0x03,0x00,0x00);//_ESI+=800;	//1 line had draw
	DecodeOneLine64KMixDouble();	//Two lines mix to one line
	__emit__(0x66,0x81,0xC6,0xA0,0x07,0x00,0x00);//_ESI+=(800+0x480);
}
static	void	Align12(void)
{
}
void	Third64KOver(void)
{//Draw 5 Line
	DecodeTwoLine64KDouble();
	__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
	DecodeOneLine64KDouble();
	__emit__(0x66,0x81,0xC6,0x20,0x03,0x00,0x00);//_ESI+=800;	//1 line had draw
	_EBP-=0x480;
	Over64K3();
	__emit__(0x66,0x81,0xC6,0x20,0x03,0x00,0x00);//_ESI+=800;	//1 line had draw
	DecodeOneLine64KMixDouble();	//Two lines mix to one line
	__emit__(0x66,0x81,0xC6,0xA0,0x07,0x00,0x00);//_ESI+=(800+0x480);
}
static	void	Align13(void)
{
}
void	PASCAL	near	Over64K4Mix(void)
{
	asm	mov	Pixels,6
	LoopLine:
	Draw40Pixel();
	asm	dec	Pixels		//asm	loop	LoopLine240
	asm	jnz	LoopLine
	FastYUV2RGB16BitsDouble1Line();
	FastYUV2RGB16BitsDouble1Line();
	FastYUV2RGB16BitsDouble1Line();
	FastYUV2RGB16BitsDouble1Line();
	__emit__(0x66,0x33,0xFF);
	_AX=0x4F05;_BX=0;_DX=BankSize;
	asm	shl	dx,2
	geninterrupt(0x10);	//Some handbook VGA system will change DX
	FastYUV2RGB16BitsDouble1LineDeletePixel();//Delete one pixel
	FastYUV2RGB16BitsDouble1Line();
	FastYUV2RGB16BitsDouble1LineDeletePixel();//Delete one pixel
	FastYUV2RGB16BitsDouble1Line();
	FastYUV2RGB16BitsDouble1LineDeletePixel();//Delete one pixel
	FastYUV2RGB16BitsDouble1Line();
	FastYUV2RGB16BitsDouble1LineDeletePixel();//Delete one pixel
	Draw40Pixel();
	_EBP+=976;		//All Y, U, V Line len=0x480;
}
void	Fouth64KOver(void)
{//Draw 5 Line
	DecodeTwoLine64KDouble();
	__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
	DecodeTwoLine64KDouble();
	__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
	Over64K4Mix();
	__emit__(0x66,0x81,0xC6,0x20,0x03,0x00,0x00);//_ESI+=(800);
}
DWORD	lStride;	//Video Memory Line width.
static	void	Align14(void)
{
	asm	nop
	asm	nop
}
void	PASCAL near Draw640x240Banking64K(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:
			DecodeTwoLine64KDouble();
			_ESI+=(800+0x480);_EDI+=1280;	//2 line had draw
			asm	dec	Line
			asm	jnz	near ptr MoveVideoData2401
		/////// Next Line ///////
		DecodeOneLine64KDouble();_ESI+=800;	//1 line had draw

⌨️ 快捷键说明

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