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

📄 yuvrgb16.c

📁 超级解霸源代码。纯c语言写的。适合有一定编程基础的开发人员用来学习提高
💻 C
📖 第 1 页 / 共 5 页
字号:
		__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=144;//=288/2
		MoveVideoData288:
		asm	inc	Counter
		asm	cmp	Counter,3
		asm	je	DeleteLine288
		////// 352 bytes 32 times.
		Pixels=8;	//Draw 2 lines
		LoopLine288Delete:
		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	jnz	LoopLine288Delete
		_EBP+=976;
		_ESI+=(800+0x480);	//2 line had draw
		_EDI+=lStride;
		_EDI+=1280;	//2 line had draw
		_EDI+=lStride;
		asm	dec	Line
		asm	jnz	near ptr MoveVideoData288
		goto	RETURN;
		DeleteLine288://Draw 1 lines
		Counter=0;
		Pixels=8;
		LoopLine288:
		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	jnz	LoopLine288
		_EBP+=976;
		_ESI+=(800+0x480);	//2 line had draw only one
		_EDI+=lStride;
		asm	dec	Line
		asm	jz	RETURN
		asm	jmp	MoveVideoData288
		}
	RETURN:
	_AX=0;	//return 0;
}
static	void	Align31(void)
{
}
void	PASCAL near Draw640x240Banking32KLinear(void)
{	//Only for VESA 640x480 -> 640x240 Linear VGA Primary DCI
//	LPDCIOFFSCREEN	DCISurfaceScreenPtr;
	DCIRVAL	(CALLBACK *EndAccess)(LPVOID);		//EndAccess Fn

//	DCISurfaceScreenPtr=&DCISurfaceScreen;
	EndAccess=DCISurfaceScreen.dciInfo.EndAccess;
	if(DCISurfaceScreen.dciInfo.BeginAccess!=NULL)
		(*DCISurfaceScreen.dciInfo.BeginAccess)(DCISurfaceScreenPtr,&VideoRc);
	//Build in memory 320x240 15Bits video data
	asm	push	bp
	BuildYVURGB15DoubleColor();	//Linear = Buffer for 320x240 15bits.
	asm	pop	bp
	//Draw Primary on linear video memory
	if(EndAccess!=NULL)
		(*EndAccess)(DCISurfaceScreenPtr);
}
////////////////////// 320 X 240 Banking //////////////////////
////////////////////// S3 86 banking //////////////////////////
static	void	Align32(void)
{
	asm	nop
	asm	nop
}
void	PASCAL near DrawYVU16S3BankingColor(void)
{	//Only for 320x200 64K Color S3 86

	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;
		Line=120;
		MoveVideoData240:
		asm	inc	Counter
		asm	cmp	Counter,2
		asm	je	DeleteLine240
		////// 352 bytes 32 times.
		if(Counter==3) Counter=0;
		Pixels=8;
		LoopLine240:
		FastYUV2RGB16Bits();
		FastYUV2RGB16Bits();//Full 64K data here
		FastYUV2RGB16BitsDeletePixel();//Delete one pixel
		FastYUV2RGB16Bits();
		FastYUV2RGB16Bits();
		FastYUV2RGB16BitsDeletePixel();//Delete one pixel
		FastYUV2RGB16Bits();
		FastYUV2RGB16Bits();
		FastYUV2RGB16BitsDeletePixel();//Delete one pixel
		FastYUV2RGB16Bits();
		FastYUV2RGB16BitsDeletePixel();//Delete one pixel
		asm	dec	Pixels		//asm	loop	LoopLine240
		asm	jnz	LoopLine240
		_EBP+=976;
		_ESI+=(800+0x480);	//2 line had draw
		_EDI+=640;
		asm	dec	Line
		asm	jnz	near ptr MoveVideoData240
		goto	RETURN;
		Banking1:
		/////////Select Bank 1 ///////////
		_AX=0x4F05;
		_BX=0;
		_DX=BankSize;//Select Bank 1
		geninterrupt(0x10);
		_EDI=0;
		goto	Banking1Next;
		//////////////////////////////////
		DeleteLine240:
		Pixels=8;
		LoopLine240Delete:
		FastYUV2RGB16Bits1Line();
		FastYUV2RGB16Bits1Line();
		if(_EDI==65536) goto	Banking1;
		Banking1Next:
		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	loop	LoopLine240
		asm	jnz	LoopLine240Delete
		_EBP+=976;
		_ESI+=(800+0x480);//2 line had draw only one
		asm	dec	Line
		asm	jz	NextRet240
		asm	jmp	MoveVideoData240
		asm	jmp	MoveVideoData240
		NextRet240:
		}
	else	{// 288 - > 200 36/25 delete 11 lines.
		TimesColor=0;
		/////////////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=144;//=288/2
		MoveVideoData288:
		asm	inc	TimesColor
		if(TimesColor>18) TimesColor=1;
		asm	inc	Counter
		asm	cmp	Counter,1
		asm	je	NoDeleteLine288
		////// 352 bytes 32 times.
		if(TimesColor>12 || Counter>=3) Counter=0;
		Pixels=8;	//Draw 1 lines
		LoopLine288Delete:
		FastYUV2RGB16Bits1Line();
		FastYUV2RGB16Bits1Line();
		if(_EDI==65536) goto	Banking1L288;
		Banking1Next288:
		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	LoopLine288Delete
		_EBP+=976;
		_ESI+=(800+0x480);	//2 line had draw only one
		asm	dec	Line
		asm	jnz	near ptr MoveVideoData288
		goto	RETURN;
		Banking1L288:
		/////////Select Bank 1 ///////////
		_AX=0x4F05;
		_BX=0;
		_DX=BankSize;//Select Bank 1
		geninterrupt(0x10);
		_EDI=0;
		goto	Banking1Next288;
		NoDeleteLine288://Draw 2 lines
		Pixels=8;
		LoopLine288:
		FastYUV2RGB16Bits();
		FastYUV2RGB16Bits();
		FastYUV2RGB16BitsDeletePixel();//Delete one pixel
		FastYUV2RGB16Bits();
		FastYUV2RGB16Bits();
		FastYUV2RGB16BitsDeletePixel();//Delete one pixel
		FastYUV2RGB16Bits();
		FastYUV2RGB16Bits();
		FastYUV2RGB16BitsDeletePixel();//Delete one pixel
		FastYUV2RGB16Bits();
		FastYUV2RGB16BitsDeletePixel();//Delete one pixel
		asm	dec	Pixels
		asm	jnz	LoopLine288
		_EBP+=976;
		_ESI+=(800+0x480);	//2 line had draw
		_EDI+=640;	//2 line had draw
		asm	dec	Line
		asm	jz	RETURN
		asm	jmp	MoveVideoData288
		}
	RETURN:
	_AX=0;	//return 0;
}
static	void	Align33(void)
{
	asm	nop
}
void	PASCAL near DrawS3BankColor(void)
{	//Only for S3 86 320x200 banking VGA
	/////// Set Bank 0 //////////////
	_AX=0x4F05;
	_BX=0;
	_DX=0;//Select Bank 0
	geninterrupt(0x10);
	DrawYVU16S3BankingColor();	//Linear = Buffer for 320x200 16bits.
}
static	void	Align34(void)
{
	asm	nop
	asm	nop
}
void	PASCAL near Draw32KColorBanking(void)
{	//Only for 320x200 32K Color banking

	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;
		Line=120;
		MoveVideoData240:
		asm	inc	Counter
		asm	cmp	Counter,2
		asm	je	DeleteLine240
		////// 352 bytes 32 times.
		if(Counter==3) Counter=0;
		Pixels=8;
		LoopLine240:
		FastYUV2RGB15Bits();
		FastYUV2RGB15Bits();//Full 64K data here
		FastYUV2RGB15BitsDeletePixel();//Delete one pixel
		FastYUV2RGB15Bits();
		FastYUV2RGB15Bits();
		FastYUV2RGB15BitsDeletePixel();//Delete one pixel
		FastYUV2RGB15Bits();
		FastYUV2RGB15Bits();
		FastYUV2RGB15BitsDeletePixel();//Delete one pixel
		FastYUV2RGB15Bits();
		FastYUV2RGB15BitsDeletePixel();//Delete one pixel
		asm	dec	Pixels		//asm	loop	LoopLine240
		asm	jnz	LoopLine240
		_EBP+=976;
		_ESI+=(800+0x480);	//2 line had draw
		_EDI+=640;
		asm	dec	Line
		asm	jnz	near ptr MoveVideoData240
		goto	RETURN;
		Banking1:
		/////////Select Bank 1 ///////////
		_AX=0x4F05;
		_BX=0;
		_DX=BankSize;//Select Bank 1
		geninterrupt(0x10);
		_EDI=0;
		goto	Banking1Next;
		//////////////////////////////////
		DeleteLine240:
		Pixels=8;
		LoopLine240Delete:
		FastYUV2RGB15Bits1Line();
		FastYUV2RGB15Bits1Line();
		if(_EDI==65536) goto	Banking1;
		Banking1Next:
		FastYUV2RGB15Bits1LineDeletePixel();//Delete one pixel
		FastYUV2RGB15Bits1Line();
		FastYUV2RGB15Bits1Line();
		FastYUV2RGB15Bits1LineDeletePixel();//Delete one pixel
		FastYUV2RGB15Bits1Line();
		FastYUV2RGB15Bits1Line();
		FastYUV2RGB15Bits1LineDeletePixel();//Delete one pixel
		FastYUV2RGB15Bits1Line();
		FastYUV2RGB15Bits1LineDeletePixel();//Delete one pixel
		asm	dec	Pixels		//asm	loop	LoopLine240
		asm	jnz	LoopLine240Delete
		_EBP+=976;
		_ESI+=(800+0x480);//2 line had draw only one
		asm	dec	Line
		asm	jz	NextRet240
		asm	jmp	MoveVideoData240
		asm	jmp	MoveVideoData240
		NextRet240:
		}
	else	{// 288 - > 200 36/25 delete 11 lines.
		TimesColor=0;
		/////////////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=144;//=288/2
		MoveVideoData288:
		asm	inc	TimesColor
		if(TimesColor>18) TimesColor=1;
		asm	inc	Counter
		asm	cmp	Counter,1
		asm	je	NoDeleteLine288
		////// 352 bytes 32 times.
		if(TimesColor>12 || Counter>=3) Counter=0;
		Pixels=8;	//Draw 1 lines
		LoopLine288Delete:
		FastYUV2RGB15Bits1Line();
		FastYUV2RGB15Bits1Line();
		if(_EDI==65536) goto	Banking1L288;
		Banking1Next288:
		FastYUV2RGB15Bits1LineDeletePixel();//Delete one pixel
		FastYUV2RGB15Bits1Line();
		FastYUV2RGB15Bits1Line();
		FastYUV2RGB15Bits1LineDeletePixel();//Delete one pixel
		FastYUV2RGB15Bits1Line();
		FastYUV2RGB15Bits1Line();
		FastYUV2RGB15Bits1LineDeletePixel();//Delete one pixel
		FastYUV2RGB15Bits1Line();
		FastYUV2RGB15Bits1LineDeletePixel();//Delete one pixel
		asm	dec	Pixels
		asm	jnz	LoopLine288Delete
		_EBP+=976;
		_ESI+=(800+0x480);	//2 line had draw only one
		asm	dec	Line
		asm	jnz	near ptr MoveVideoData288
		goto	RETURN;
		Banking1L288:
		/////////Select Bank 1 ///////////
		_AX=0x4F05;
		_BX=0;
		_DX=BankSize;//Select Bank 1
		geninterrupt(0x10);
		_EDI=0;
		goto	Banking1Next288;
		NoDeleteLine288://Draw 2 lines
		Pixels=8;
		LoopLine288:
		FastYUV2RGB15Bits();
		FastYUV2RGB15Bits();
		FastYUV2RGB15BitsDeletePixel();//Delete one pixel
		FastYUV2RGB15Bits();
		FastYUV2RGB15Bits();
		FastYUV2RGB15BitsDeletePixel();//Delete one pixel
		FastYUV2RGB15Bits();
		FastYUV2RGB15Bits();
		FastYUV2RGB15BitsDeletePixel();//Delete one pixel
		FastYUV2RGB15Bits();
		FastYUV2RGB15BitsDeletePixel();//Delete one pixel
		asm	dec	Pixels
		asm	jnz	LoopLine288
		_EBP+=976;
		_ESI+=(800+0x480);	//2 line had draw
		_EDI+=640;	//2 line had draw
		asm	dec	Line
		asm	jz	RETURN
		asm	jmp	MoveVideoData288
		}
	RETURN:
	_AX=0;	//return 0;
}
static	void	Align35(void)
{
	asm	nop
}
void	PASCAL near Draw15BitsBanking(void)
{	//Only for 320x200 32K banking VGA
	/////// Set Bank 0 //////////////
	_AX=0x4F05;
	_BX=0;
	_DX=0;//Select Bank 0
	geninterrupt(0x10);
	Draw32KColorBanking();	//Linear = Buffer for 320x200 15bits.
}

⌨️ 快捷键说明

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