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

📄 mqmacros.blt

📁 WinCE 3.0 BSP, 包含Inter SA1110, Intel_815E, Advantech_PCM9574 等
💻 BLT
📖 第 1 页 / 共 5 页
字号:
					geREG(SRC_IMAGE_DATA, ulData); \
				} \
			} \
			ulCount -= SRC_FIFO_MAX_DWORDS; \
		} \
		geWAITSRCFIFO(ulCount); \
		while (ulCount) \
		{ \
			if (ulOffset) \
			{ \
				ulRData2 = *pulData++; \
				ulRData3 = (ulRData2 << msb)|(ulRData1 >> lsb); \
				ulRData1 = ulRData2; \
			} \
			else \
			{ \
				ulRData3 = *pulData++; \
			} \
			for (i=0; (i < 32) && (ulCount > 0); i+=16) \
			{ \
				ulData = (pLookup[(ulRData3 >> i) & 0xFFUL]) \
				 		| ((pLookup[(ulRData3 >> (i+8)) & 0xFFUL]) << 16); \
				geREG(SRC_IMAGE_DATA, ulData); \
				ulCount--; \
			} \
		} \
		pSrcBits += lSrcStride; \
	} \
	geWAITSRCFIFO( ulExtras ); \
	while( ulExtras-- ) \
		geREG(SRC_IMAGE_DATA, 0UL);
	 

#define	MACRO_PUMP_PACKED_SRCFIFO_LOOKUP8_32BPP(pSrcBits, ulDWords, ulExtras, \
										ulOffset, lSrcStride, height, pLookup) \
	PULONG  pulData; \
	ULONG  ulCount, ulRData, i, j, skip, numbyte; \
	while( height-- ) \
	{ \
		pulData = (PULONG)pSrcBits; \
		skip = ulOffset; \
		ulCount = ulDWords + skip; \
		while (ulCount >= SRC_FIFO_MAX_DWORDS) \
		{ \
			geWAITSRCFIFO( SRC_FIFO_MAX_DWORDS ); \
			i = SRC_FIFO_MAX_DWORDS; \
			while (i) \
			{ \
				ulRData = *pulData++; \
				for ( j = 0; j < 32; j+=8 ) \
				{ \
					if (!skip) \
						geREG(SRC_IMAGE_DATA, (pLookup[(ulRData>>j) & 0xFF])); \
					else \
						skip--; \
				} \
				i -= 4; \
			} \
			ulCount -= SRC_FIFO_MAX_DWORDS; \
		} \
		geWAITSRCFIFO(ulCount); \
		while (ulCount) \
		{ \
			ulRData = *pulData++; \
			if (ulCount > 3) \
			{ \
				numbyte = 4; \
			} \
			else \
			{ \
				numbyte = ulCount; \
			} \
			for ( j = 0; j < (numbyte*8); j+=8 ) \
			{ \
				if (!skip) \
					geREG(SRC_IMAGE_DATA, (pLookup[(ulRData>>j) & 0xFF])); \
				else \
					skip--; \
			} \
			ulCount -= numbyte; \
		} \
		pSrcBits += lSrcStride; \
	} \
	geWAITSRCFIFO( ulExtras ); \
	while( ulExtras-- ) \
		geREG(SRC_IMAGE_DATA, 0UL);
	
#else /* CHECK_SRCFIFO DISABLED */

#define	MACRO_PUMP_PACKED_SRCFIFO_LOOKUP8_16BPP(pSrcBits, ulDWords, ulExtras, \
										ulOffset, lSrcStride, height, pLookup) \
	PULONG  pulData; \
	ULONG  ulRData1,ulRData2,ulRData3,ulData,ulCount,i,lsb=0,msb=0; \
	lsb = ulOffset << 3; \
	msb = 0x20UL - lsb; \
	while( height-- ) \
	{ \
		pulData = (PULONG)pSrcBits; \
		if (ulOffset) \
		{ \
			ulRData1 = *pulData++; \
		} \
		ulCount = ulDWords; \
		while (ulCount) \
		{ \
		   if (ulOffset) \
			{ \
				ulRData2 = *pulData++; \
				ulRData3 = (ulRData2 << msb)|(ulRData1 >> lsb); \
				ulRData1 = ulRData2; \
			} \
			else \
			{ \
				ulRData3 = *pulData++; \
			} \
			for (i=0; (i < 32) && (ulCount > 0); i+=16) \
			{ \
				ulData = (pLookup[(ulRData3 >> i) & 0xFFUL]) \
					 		| ((pLookup[(ulRData3 >> (i+8)) & 0xFFUL]) << 16); \
				geREG(SRC_IMAGE_DATA, ulData); \
				ulCount--; \
			} \
		} \
		pSrcBits += lSrcStride; \
	} \
	while( ulExtras-- ) \
		geREG(SRC_IMAGE_DATA, 0UL);


#define	MACRO_PUMP_PACKED_SRCFIFO_LOOKUP8_32BPP(pSrcBits, ulDWords, ulExtras, \
										ulOffset, lSrcStride, height, pLookup) \
	PULONG	pulData; \
	ULONG   ulRData,ulCount,skip,j,numbyte; \
	while( height-- ) \
	{ \
		pulData = (PULONG)pSrcBits; \
		skip = ulOffset; \
		ulCount = ulDWords + skip; \
		while (ulCount) \
		{ \
			ulRData = *pulData++; \
			if (ulCount > 3) \
			{ \
				numbyte = 4; \
			} \
			else \
			{ \
				numbyte = ulCount; \
			} \
			for ( j = 0; j < (numbyte<<3); j+=8 ) \
			{ \
				if (!skip) \
					geREG(SRC_IMAGE_DATA, (pLookup[(ulRData>>j) & 0xFF])); \
				else \
					skip--; \
			} \
			ulCount -= numbyte; \
		} \
		pSrcBits += lSrcStride; \
	} \
	while( ulExtras-- ) \
		geREG(SRC_IMAGE_DATA, 0UL);
		
#endif

//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//$$$$ Routine: Pump Packed Src FIFO LKUP 16BPP $$$$$$$$$$$$$$$$$$$$$
#define	MACRO_PUMP_PACKED_SRCFIFO_LOOKUP16_8BPP(pSrcBits, ulDWords, ulExtras, \
										ulOffset, lSrcStride, height, pLookup) \
	PUSHORT	puwData; \
	ULONG   ulData,i; \
	while( height-- ) \
	{ \
		puwData = (PUSHORT)pSrcBits; \
		for ( i = 0; i < ulDWords; i++ ) \
		{ \
			ulData = (pLookup[*puwData++] & 0xFFUL) \
				| ((pLookup[*puwData++] & 0xFFUL) << 8) \
				| ((pLookup[*puwData++] & 0xFFUL) << 16) \
				| ((pLookup[*puwData++] & 0xFFUL) << 24); \
			geREG(SRC_IMAGE_DATA, ulData); \
		} \
		pSrcBits += lSrcStride; \
	} \
	while( ulExtras-- ) \
		geREG(SRC_IMAGE_DATA, 0UL);

#define	MACRO_PUMP_PACKED_SRCFIFO_LOOKUP16_32BPP(pSrcBits, ulDWords, ulExtras, \
										ulOffset, lSrcStride, height, pLookup) \
	PUSHORT	puwData; \
	ULONG   i; \
	while( height-- ) \
	{ \
		puwData = (PUSHORT)pSrcBits; \
		for ( i = 0; i < ulDWords; i++ ) \
		{ \
			geREG(SRC_IMAGE_DATA, (pLookup[*puwData++])); \
		} \
		pSrcBits += lSrcStride; \
	} \
	while( ulExtras-- ) \
		geREG(SRC_IMAGE_DATA, 0UL);

//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//$$$$ Routine: Pump Packed Src FIFO LKUP 24BPP $$$$$$$$$$$$$$$$$$$$$
#define	MACRO_PUMP_PACKED_SRCFIFO_LOOKUP24_8BPP(pSrcBits, ulDWords, ulExtras, \
										ulOffset, lSrcStride, height, pLookup) \
	PUCHAR	pubData; \
	ULONG   ulData, i; \
	while( height-- ) \
	{ \
		pubData = pSrcBits; \
		for ( i = 0; i < ulDWords; i++) \
		{ \
			ulData=(pLookup[*pubData++|(*pubData++ << 8)|(*pubData++ << 16)] & 0xFFUL) \
			 |((pLookup[*pubData++|(*pubData++ << 8)|(*pubData++ << 16)] & 0xFFUL)<<8) \
			 |((pLookup[*pubData++|(*pubData++ << 8)|(*pubData++ << 16)] & 0xFFUL)<<16) \
			 |((pLookup[*pubData++|(*pubData++ << 8)|(*pubData++ << 16)] & 0xFFUL)<<24); \
			geREG(SRC_IMAGE_DATA, ulData); \
		} \
		pSrcBits += lSrcStride; \
	} \
	while( ulExtras-- ) \
		geREG(SRC_IMAGE_DATA, 0UL);

#define	MACRO_PUMP_PACKED_SRCFIFO_LOOKUP24_16BPP(pSrcBits, ulDWords, ulExtras, \
										ulOffset, lSrcStride, height, pLookup) \
	PUCHAR	pubData; \
	ULONG   ulData, i; \
	while( height-- ) \
	{ \
		pubData = (PUCHAR)pSrcBits; \
		for ( i = 0; i < ulDWords; i++) \
		{ \
			ulData=(pLookup[*pubData++|(*pubData++ << 8)|(*pubData++ << 16)] & 0xFFFFUL) \
			 |((pLookup[*pubData++|(*pubData++ << 8)|(*pubData++ << 16)]) << 16); \
			geREG(SRC_IMAGE_DATA, ulData); \
		} \
		pSrcBits += lSrcStride; \
	} \
	while( ulExtras-- ) \
		geREG(SRC_IMAGE_DATA, 0UL);

#define	MACRO_PUMP_PACKED_SRCFIFO_LOOKUP24_32BPP(pSrcBits, ulDWords, ulExtras, \
										ulOffset, lSrcStride, height, pLookup) \
	PUCHAR	pubData; \
	ULONG   i; \
	while( height-- ) \
	{ \
		pubData = (PUCHAR)pSrcBits; \
		for ( i = 0; i < ulDWords; i++) \
		{ \
			geREG(SRC_IMAGE_DATA, \
					pLookup[*pubData++|(*pubData++ << 8)|(*pubData++ << 16)]); \
		} \
		pSrcBits += lSrcStride; \
	} \
	while( ulExtras-- ) \
		geREG(SRC_IMAGE_DATA, 0UL);

//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//$$$$ Routine: Pump Packed Src FIFO LKUP 32BPP $$$$$$$$$$$$$$$$$$$$$
#define	MACRO_PUMP_PACKED_SRCFIFO_LOOKUP32_8BPP(pSrcBits, ulDWords, ulExtras, \
										ulOffset, lSrcStride, height, pLookup) \
	PULONG	pulData; \
	ULONG   ulData,i; \
	while( height-- ) \
	{ \
		pulData = (PULONG)pSrcBits; \
		for ( i = 0; i < ulDWords; i++ ) \
		{ \
			ulData = (pLookup[*pulData++] & 0xFFUL) \
				| ((pLookup[*pulData++] & 0xFFUL) << 8) \
				| ((pLookup[*pulData++] & 0xFFUL) << 16) \
				| ((pLookup[*pulData++] & 0xFFUL) << 24); \
			geREG(SRC_IMAGE_DATA, ulData); \
		} \
		pSrcBits += lSrcStride; \
	} \
	while( ulExtras-- ) \
		geREG(SRC_IMAGE_DATA, 0UL);

#define	MACRO_PUMP_PACKED_SRCFIFO_LOOKUP32_16BPP(pSrcBits, ulDWords, ulExtras, \
										ulOffset, lSrcStride, height, pLookup) \
	PULONG	pulData; \
	ULONG   ulData,i; \
	while( height-- ) \
	{ \
		pulData = (PULONG)pSrcBits; \
		for ( i = 0; i < ulDWords; i++ ) \
		{ \
			ulData = (pLookup[*pulData++]) & 0xFFFFUL; \
			ulData |= (pLookup[*pulData++] << 16); \
			geREG(SRC_IMAGE_DATA, ulData); \
		} \
		pSrcBits += lSrcStride; \
	} \
	while( ulExtras-- ) \
		geREG(SRC_IMAGE_DATA, 0UL);

//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
#ifdef	ALWAYS_SET_DEST_STRIDE	

#define	SET_GE_DEST_STRIDE(n)	\
			geREG(DEST_STRIDE, n);
#else

#define	SET_GE_DEST_STRIDE(n)

#endif // ALWAYS_SET_DEST_STRIDE


#ifdef SUPPORT_ROTATE

#define	pEMULATED_BLT	\
		(SCODE (GPE::*)(struct GPEBltParms *))MQEmulatedBlt
#define EMULATED_BLT(p)  \
		MQEmulatedBlt(p)
#define	ROTATE_PARAMS(p)	\
	if(m_nRotate)			\
	{						\
		RotateParms(p);		\
	}		
	
#define	ROTATE_PARAMS_BACK(p)	\
	if(m_nRotate)			\
	{						\
		RotateParmsBack(p);	\
	}		
#define	pEMULATED_LINE	\
		(SCODE (GPE::*)(struct GPELineParms *))MQEmulatedLine
#define EMULATED_LINE(p)  \
		MQEmulatedLine(p)
#define	ROTATE_LINE_PARAMS(p)	\
	if(m_nRotate)			\
	{						\
		RotateLineParms(p);		\
	}		
	
#define	ROTATE_LINE_PARAMS_BACK(p)	\
	if(m_nRotate)			\
	{						\
		RotateLineParmsBack(p);	\
	}		
	
#define	ROTATE_RFILLBLT_PARAMS( p, xy, wh )		\
		if(m_nRotate)							\
		{										\
			RotateRectFillParms(p,&xy,&wh);		\
		}
	
#define	ROTATE_RFILLBLT_PARAMS_BACK(p)			\
		if(m_nRotate)							\
		{										\
			RotateRectFillParmsBack(p);			\
		}
#else

#define	pEMULATED_BLT				EmulatedBlt
#define EMULATED_BLT(p)				EmulatedBlt(p)
		
#define	ROTATE_PARAMS(p)	
#define	ROTATE_PARAMS_BACK(p)	

#define	pEMULATED_LINE				EmulatedLine
#define EMULATED_LINE(p)  			EmulatedLine(p)
#define	ROTATE_LINE_PARAMS(p)	
#define	ROTATE_LINE_PARAMS_BACK(p)
#define	ROTATE_RFILLBLT_PARAMS(p,xy,wh)	
#define	ROTATE_RFILLBLT_PARAMS_BACK(p)

#endif // SUPPORT_ROTATE

#ifdef HW_ROTATE
#define	HW_ROTATE_SWAP(pWH)						\
		*pWH = (ULONG) ((*pWH << 16) | (( *pWH >> 16) & 0x0000FFFF)) 
		
#define HW_ROTATE_XY90(pXY)						\
		*pXY = (ULONG) ((*pXY << 16) | ( m_nScreenHeight - (*pXY >> 16) -1))

#define HW_ROTATE_DIR90(pCMD)						\
		*pCMD = (*pCMD & ~(X_DIR|Y_DIR)) | (*pCMD & X_DIR ? Y_DIR : 0) | (*pCMD & Y_DIR ? 0 :X_DIR)

#define HW_ROTATE_XY180(pXY)					\
		{										\
			ULONG X,Y;							\
			X = (*pXY) & 0x0000FFFF;			\
			Y = ((*pXY) >> 16)&0x0000FFFF;		\
			if(Y < (ULONG)(m_nScreenHeight+m_ulTopOffset))				\
			{									\
				Y = (m_nScreenHeight) - Y - 1+(m_ulTopOffset*2);	\
			}									\
			X = m_nScreenWidth -X -1;			\
			*pXY = (ULONG) ((Y << 16) | X);		\
		}

#define HW_ROTATE_DIR180(pCMD)						\
		*pCMD = (*pCMD & ~(X_DIR|Y_DIR)) | (*pCMD & X_DIR ? 0 : X_DIR) | (*pCMD & Y_DIR ? 0 :Y_DIR)

#define HW_ROTATE_XY270(pXY)					\
		{										\
			ULONG X,Y;							\
			X = (*pXY) & 0x0000FFFF;			\
			Y = ((*pXY) >> 16)&0x0000FFFF;		\
			if(X < (ULONG)m_nScreenWidth)				\
			{									\
				Y = m_nScreenWidth - X - 1;		\
			}else{								\
				Y = X;							\
			}									\
			X = ((*pXY)>>16)&0x0000FFFF;		\
			*pXY = (ULONG) ((Y << 16) | X);		\
		}

#define HW_ROTATE_DIR270(pCMD)						\
		*pCMD = (*pCMD & ~(X_DIR|Y_DIR)) | (*pCMD & Y_DIR ? X_DIR : 0) | (*pCMD & X_DIR ? 0 : Y_DIR)

#define	HW_ROTATE_RECTANGLE(pdstxy, pwh ,pcmd ) \
		switch(m_nRotate)						\
		{										\
			case	R_90:						\
					HW_ROTATE_SWAP(pwh);		\
					HW_ROTATE_XY90(pdstxy);		\
					HW_ROTATE_DIR90(pcmd);		\
					break;						\
												\
			case	R_180:						\
					HW_ROTATE_XY180(pdstxy);	\
					HW_ROTATE_DIR180(pcmd);		\
					break;						\
												\
			case	R_270:						\
					HW_ROTATE_SWAP(pwh);		\
					HW_ROTATE_XY270(pdstxy);	\
					HW_ROTATE_DIR270(pcmd);		\
					break;						\
												\
		}

#if 1
#define	HW_ROTATE_S2S(psrcxy,pdstxy,pwh,pxpositive,pypositive) \
		{											\
		switch(m_nRotate)						\
		{										\
			case	R_90:						\
					*pdstxy = *pdstxy + (*pwh & 0xFFFF0000) - 0x00010000;	\
					*psrcxy = *psrcxy + (*pwh & 0xFFFF0000) - 0x00010000;	\
					HW_ROTATE_XY90(pdstxy);		\
					HW_ROTATE_XY90(psrcxy);		\
					HW_ROTATE_SWAP(pwh);		\
					break;						\
			case	R_180:						\
					*pdstxy = *pdstxy + *pwh - 0x00010001;	\
					*psrcxy = *psrcxy + *pwh - 0x00010001;	\
					HW_ROTATE_XY180(pdstxy);	\
					HW_ROTATE_XY180(psrcxy);	\
					break;						\
			case	R_270:						\
					*pdstxy = *pdstxy + (*pwh & 0x0000FFFF) - 0x00000001;	\
					*psrcxy = *psrcxy + (*pwh & 0x0000FFFF) - 0x00000001;	\
					HW_ROTATE_XY270(pdstxy);	\
					HW_ROTATE_XY270(psrcxy);	\
					HW_ROTATE_SWAP(pwh);		\
					break;						\
		}										\
		if(((*pdstxy)&0x0000FFFF) > ((*psrcxy)&0x0000FFFF))			\
			*pxpositive = 0;					\
		else									\
			*pxpositive = 1;					\
		if(((*pdstxy)&0xFFFF0000) > ((*psrcxy)&0xFFFF0000))			\
			*pypositive = 0;					\
		else									\
			*pypositive = 1;					\
		}
#else
#define	HW_ROTATE_S2S(psrcxy,pdstxy,pwh,pxpositive,pypositive) \
		{											\
			ULONG	srcx = (*psrcxy) & 0x0000FFFF;	\
			ULONG	srcy = ((*psrcxy)>>16) & 0x0000FFFF;\
			ULONG	dstx = (*pdstxy) & 0x0000FFFF;	\
			ULONG	dsty = ((*pdstxy>>16)) & 0x0000FFFF;\
		switch(m_nRotate)						\
		{										\
			case	R_90:						\
					*pdstxy = *pdstxy + (*pwh & 0xFFFF0000) - 0x00010000;	\
					*psrcxy = *psrcxy + (*pwh & 0xFFFF0000) - 0x00010000;	\
					HW_ROTATE_XY90(pdstxy);		\
					HW_ROTATE_XY90(psrcxy);		\
					HW_ROTATE_SWAP(pwh);		\
					if(srcx == dstx)						\
					{										\
						*pxpositive = (*pypositive ? 0 : 1);\
					}										\
					if(srcy == dsty)						\
					{										\
						*pypositive = *pxpositive;			\
					}										\
					if( ((srcx > dstx) && (srcy < dsty) ) ||	\
						((srcx < dstx ) && (srcy > dsty )) )	\
					{										\
						*pypositive = (*pypositive ? 0 : 1);	\
					}										\
					break;						\
			case	R_180:						\
					*pdstxy = *pdstxy + *pwh - 0x00010001;	\

⌨️ 快捷键说明

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