📄 mqmacros.blt
字号:
#ifndef __MQMACROS_BLT_
#define __MQMACROS_BLT_
//$$$$ Routine: Intensive Src FIFO pumping $$$$$$$$$$$$$$$$$$$$$$$$$
//Intensive 16 dwords pumps
#define geSRCFIFO16(pSrc) \
{\
geWAITSRCFIFO( 16 ); \
geREG(SRC_IMAGE_DATA, *pSrc++); \
}
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//$$$$ Routine: Lookup Table Conversion for 8Bpp $$$$$$$$$$$$$$$$$$$
#define LOOKUP_8BPP(ulData, ulRData, pLookup) \
ulData = pLookup[ulRData & 0xFFUL] \
| (pLookup[(ulRData >> 8) & 0xFFUL] << 8) \
| (pLookup[(ulRData >> 16) & 0xFFUL] << 16) \
| (pLookup[(ulRData >> 24) & 0xFFUL] << 24)
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//$$$$ Routine: Lookup Table Conversion for 16Bpp $$$$$$$$$$$$$$$$$$$
#define LOOKUP_16BPP(ulData, ulRData, pLookup) \
ulData = pLookup[ulRData & 0xFFFFUL] \
| (pLookup[(ulRData >> 16) & 0xFFFFUL] << 16)
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//$$$$ Routine: Lookup Table Conversion for 32Bpp $$$$$$$$$$$$$$$$$$$
#define LOOKUP_32BPP(ulData, ulRData, pLookup) \
ulData = pLookup[ulRData]
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//$$$$ Routine: Lookup Table Conversion for 4_8Bpp $$$$$$$$$$$$$$$$$$$
#define LOOKUP4_8BPP(ulData, ulRData, pLookup) \
ulData = (pLookup[(ulRData >> 4) & 0x0FUL] ) \
| (pLookup[ ulRData & 0x0FUL] << 8) \
| (pLookup[(ulRData >> 12) & 0x0FUL] << 16) \
| (pLookup[(ulRData >> 8) & 0x0FUL] << 24)
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//$$$$ Routine: Lookup Table Conversion for 4_16Bpp $$$$$$$$$$$$$$$$$$$
#define LOOKUP4_16BPP(ulData, ulRData, pLookup) \
ulData = (pLookup[(ulRData >> 4) & 0x0FUL]) \
| (pLookup[ulRData & 0x0FUL] << 16)
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//$$$$ Routine: Lookup Table Conversion for 4_32Bpp $$$$$$$$$$$$$$$$$$$
#define LOOKUP4_32BPP(ulRData, pLookup) \
geREG(SRC_IMAGE_DATA, pLookup[(ulRData >> 4) & 0x0FUL]); \
geREG(SRC_IMAGE_DATA, pLookup[ulRData & 0x0FUL])
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//$$$$ Routine: Pump Packed Src FIFO $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
#ifdef CHECK_SRCFIFO
#define MACRO_PUMP_PACKED_SRCFIFO(pSrcBits, ulDWords, ulExtras, \
ulDWordsTotal, lSrcStride, height) \
PULONG pulData; \
ULONG i, j; \
while( height-- ) \
{ \
pulData = (PULONG)(((ULONG)pSrcBits + 3UL) & ~0x03UL); \
j = ulDWords; \
while ( j >= SRC_FIFO_MAX_DWORDS ) \
{ \
geWAITSRCFIFO( SRC_FIFO_MAX_DWORDS ); \
for ( i = 0; i < SRC_FIFO_MAX_DWORDS; i++ ) \
geREG(SRC_IMAGE_DATA, *pulData++); \
j -= SRC_FIFO_MAX_DWORDS; \
}\
geWAITSRCFIFO( j ); \
while( j-- ) \
geREG(SRC_IMAGE_DATA, *pulData++); \
pSrcBits += lSrcStride; \
} \
geWAITSRCFIFO( ulExtras ); \
while( ulExtras-- ) \
geREG(SRC_IMAGE_DATA, 0UL);
#if 1 // No fifo check version
#define MACRO_PUMP_PACKED_SRCFIFO180(pSrcBits, ulDWords, ulExtras, \
ulDWordsTotal, lSrcStride, height) \
PULONG pulData;\
ULONG ulDataTmp,ulData; \
ULONG i;\
while( height-- ) \
{ \
pulData = (PULONG)(((ULONG)pSrcBits) & ~0x03UL); \
for ( i = 0; i < ulDWords; i++ ) \
{\
ulDataTmp = *pulData--;\
ulData = (ulDataTmp >> 24) | (ulDataTmp&0x00FF0000) >> 8 \
| (ulDataTmp&0x0000FF00) << 8 | (ulDataTmp &0x000000FF)<<24;\
geREG(SRC_IMAGE_DATA, ulData); \
}\
pSrcBits += lSrcStride; \
} \
while( ulExtras-- ) \
geREG(SRC_IMAGE_DATA, 0UL);
#else // check fifo version
#define MACRO_PUMP_PACKED_SRCFIFO180(pSrcBits, ulDWords, ulExtras, \
ulDWordsTotal, lSrcStride, height) \
PULONG pulData;\
ULONG ulDataTmp,ulData; \
ULONG i,j;\
while( height-- ) \
{ \
pulData = (PULONG)(((ULONG)pSrcBits) & ~0x03UL); \
j = ulDWords; \
while ( j >= SRC_FIFO_MAX_DWORDS ) \
{ \
geWAITSRCFIFO( SRC_FIFO_MAX_DWORDS ); \
for ( i = 0; i < SRC_FIFO_MAX_DWORDS; i++ ) \
{ \
ulDataTmp = *pulData--;\
ulData = (ulDataTmp >> 24) | (ulDataTmp&0x00FF0000) >> 8 \
| (ulDataTmp&0x0000FF00) << 8 | (ulDataTmp &0x000000FF)<<24;\
geREG(SRC_IMAGE_DATA, ulData); \
}\
j -= SRC_FIFO_MAX_DWORDS; \
}\
geWAITSRCFIFO( j ); \
while( j-- ) \
{\
ulDataTmp = *pulData--;\
ulData = (ulDataTmp >> 24) | (ulDataTmp&0x00FF0000) >> 8 \
| (ulDataTmp&0x0000FF00) << 8 | (ulDataTmp &0x000000FF)<<24;\
geREG(SRC_IMAGE_DATA, ulData); \
}\
pSrcBits += lSrcStride; \
} \
geWAITSRCFIFO( ulExtras ); \
while( ulExtras-- ) \
geREG(SRC_IMAGE_DATA, 0UL);
#endif
#if 1 // No fifo check version
#define MACRO_PUMP_PACKED_SRCFIFO90_270(pSrcBits, width, height, LineInc,\
PixelInc,ulExtras)\
ULONG w;\
PBYTE pByte;\
ULONG ulData;\
while( height-- ) \
{ \
w = width;\
pByte = (PBYTE)pSrcBits;\
pSrcBits += LineInc; \
while ( w >= 4) \
{ \
ulData = (ULONG)(*pByte); \
pByte += PixelInc;\
ulData |= ( (ULONG )(*pByte) << 8);\
pByte += PixelInc;\
ulData |= ( (ULONG )(*pByte) << 16);\
pByte += PixelInc;\
ulData |= ( (ULONG )(*pByte) << 24);\
pByte += PixelInc;\
geREG(SRC_IMAGE_DATA,ulData);\
w -= 4;\
}\
if(w)\
{\
switch(w)\
{\
default:\
break;\
case 1: \
ulData = (ULONG)(*pByte); \
break;\
case 2:\
ulData = (ULONG)(*pByte); \
pByte += PixelInc;\
ulData |= ( (ULONG )(*pByte) << 8);\
break;\
case 3:\
ulData = (ULONG)(*pByte); \
pByte += PixelInc;\
ulData |= ( (ULONG )(*pByte) << 8);\
pByte += PixelInc;\
ulData |= ( (ULONG )(*pByte) << 16);\
break;\
}\
geREG(SRC_IMAGE_DATA,ulData);\
}\
}\
while(ulExtras--)\
{\
geREG(SRC_IMAGE_DATA,0UL);\
}
#else
#define MACRO_PUMP_PACKED_SRCFIFO90_270(pSrcBits, width, height, LineInc,\
PixelInc,ulExtras)\
ULONG i,j;\
PBYTE pByte;\
ULONG ulData;\
ULONG w=(width&0x03UL);\
while( height-- ) \
{ \
j = width>>2;\
pByte = (PBYTE)pSrcBits;\
pSrcBits += LineInc; \
while ( j >= SRC_FIFO_MAX_DWORDS ) \
{\
geWAITSRCFIFO( SRC_FIFO_MAX_DWORDS ); \
for ( i = 0; i < SRC_FIFO_MAX_DWORDS; i++ ) \
{ \
ulData = (ULONG)(*pByte); \
pByte += PixelInc;\
ulData |= ( (ULONG )(*pByte) << 8);\
pByte += PixelInc;\
ulData |= ( (ULONG )(*pByte) << 16);\
pByte += PixelInc;\
ulData |= ( (ULONG )(*pByte) << 24);\
pByte += PixelInc;\
geREG(SRC_IMAGE_DATA,ulData);\
}\
j -= SRC_FIFO_MAX_DWORDS; \
}\
geWAITSRCFIFO( j ); \
while(j) \
{ \
--j;\
ulData = (ULONG)(*pByte); \
pByte += PixelInc;\
ulData |= ( (ULONG )(*pByte) << 8);\
pByte += PixelInc;\
ulData |= ( (ULONG )(*pByte) << 16);\
pByte += PixelInc;\
ulData |= ( (ULONG )(*pByte) << 24);\
pByte += PixelInc;\
geREG(SRC_IMAGE_DATA,ulData);\
}\
if(w)\
{\
switch(w)\
{\
default:\
break;\
case 1: \
ulData = (ULONG)(*pByte); \
break;\
case 2:\
ulData = (ULONG)(*pByte); \
pByte += PixelInc;\
ulData |= ( (ULONG )(*pByte) << 8);\
break;\
case 3:\
ulData = (ULONG)(*pByte); \
pByte += PixelInc;\
ulData |= ( (ULONG )(*pByte) << 8);\
pByte += PixelInc;\
ulData |= ( (ULONG )(*pByte) << 16);\
break;\
}\
geWAITSRCFIFO( 1 ); \
geREG(SRC_IMAGE_DATA,ulData);\
}\
}\
geWAITSRCFIFO( ulExtras ); \
while(ulExtras--)\
{\
geREG(SRC_IMAGE_DATA,0UL);\
}
#endif
#if 1 // no FIFO check version
#define MACRO_PUMP_PACKED_SRCFIFO16BPP180(pSrcBits, ulDWords, ulExtras, \
ulDWordsTotal, lSrcStride, height) \
PULONG pulData;\
ULONG ulDataTmp,ulData; \
ULONG i,j;\
while( height-- ) \
{ \
pulData = (PULONG)(((ULONG)pSrcBits) & ~0x03UL); \
j = ulDWords; \
while ( j >= SRC_FIFO_MAX_DWORDS ) \
{ \
for ( i = 0; i < SRC_FIFO_MAX_DWORDS; i++ ) \
{ \
ulDataTmp = *pulData--;\
ulData = (ulDataTmp >> 16) | (ulDataTmp&0x0000FFFF) <<16;\
geREG(SRC_IMAGE_DATA, ulData); \
}\
j -= SRC_FIFO_MAX_DWORDS; \
}\
while( j-- ) \
{\
ulDataTmp = *pulData--;\
ulData = (ulDataTmp >> 16) | (ulDataTmp&0x0000FFFF) <<16;\
geREG(SRC_IMAGE_DATA, ulData); \
}\
pSrcBits += lSrcStride; \
} \
while( ulExtras-- ) \
geREG(SRC_IMAGE_DATA, 0UL);
#else // Check FIFO version
#define MACRO_PUMP_PACKED_SRCFIFO16BPP180(pSrcBits, ulDWords, ulExtras, \
ulDWordsTotal, lSrcStride, height) \
PULONG pulData;\
ULONG ulDataTmp,ulData; \
ULONG i,j;\
while( height-- ) \
{ \
pulData = (PULONG)(((ULONG)pSrcBits) & ~0x03UL); \
j = ulDWords; \
while ( j >= SRC_FIFO_MAX_DWORDS ) \
{ \
geWAITSRCFIFO( SRC_FIFO_MAX_DWORDS ); \
for ( i = 0; i < SRC_FIFO_MAX_DWORDS; i++ ) \
{ \
ulDataTmp = *pulData--;\
ulData = (ulDataTmp >> 16) | (ulDataTmp&0x0000FFFF) <<16;\
geREG(SRC_IMAGE_DATA, ulData); \
}\
j -= SRC_FIFO_MAX_DWORDS; \
}\
geWAITSRCFIFO( j ); \
while( j-- ) \
{\
ulDataTmp = *pulData--;\
ulData = (ulDataTmp >> 16) | (ulDataTmp&0x0000FFFF) <<16;\
geREG(SRC_IMAGE_DATA, ulData); \
}\
pSrcBits += lSrcStride; \
} \
geWAITSRCFIFO( ulExtras ); \
while( ulExtras-- ) \
geREG(SRC_IMAGE_DATA, 0UL);
#endif
#if 1 // no FIFO check version
#define MACRO_PUMP_PACKED_SRCFIFO16BPP90_270(pSrcBits, width, height, LineInc,\
PixelInc,ulExtras)\
ULONG w;\
PDWORD pDWord;\
ULONG ulData;\
ULONG ulData1;\
ULONG i;\
ULONG ulWordStart;\
PDWORD pBuffer=(PDWORD)MM_GetMemory(width*4);\
ulWordStart = (ULONG)pSrcBits & 0x03UL;\
if(ulWordStart)\
{\
--height;\
w = width;\
pDWord = (PDWORD)(((ULONG)pSrcBits) & ~0x03UL); \
pSrcBits += LineInc; \
while ( w >= 2) \
{ \
ulData = *pDWord; \
pDWord = (PDWORD)((PWORD)(pDWord) + PixelInc);\
ulData1 = *pDWord; \
pDWord = (PDWORD)((PWORD)(pDWord) + PixelInc);\
ulData = (ulData>>16) + (ulData1&0xFFFF0000);\
geREG(SRC_IMAGE_DATA,ulData);\
w -= 2;\
}\
if(w)\
{\
ulData = (ulData>>16);\
geREG(SRC_IMAGE_DATA,ulData);\
}\
}\
while(height)\
{ \
--height;\
i=0;\
w = width;\
pDWord = (PDWORD)(((ULONG)pSrcBits) & ~0x03UL); \
pSrcBits += LineInc; \
while ( w >= 2) \
{ \
ulData = *pDWord; \
pDWord = (PDWORD)((PWORD)(pDWord) + PixelInc);\
ulData1 = *pDWord; \
pDWord = (PDWORD)((PWORD)(pDWord) + PixelInc);\
pBuffer[i++]= (ulData>>16) + (ulData1&0xFFFF0000);\
ulData = (ulData & 0x0000FFFF) +(ulData1<<16);\
geREG(SRC_IMAGE_DATA,ulData);\
w -= 2;\
}\
if(w)\
{\
ulData = *pDWord; \
pBuffer[i]= (ulData>>16);\
geREG(SRC_IMAGE_DATA,ulData);\
}\
i=0;\
pSrcBits += LineInc; \
if(height)\
{\
--height;\
w = width;\
while ( w >= 2) \
{ \
ulData = pBuffer[i++]; \
geREG(SRC_IMAGE_DATA,ulData);\
w -= 2;\
}\
if(w)\
{\
ulData = pBuffer[i];\
geREG(SRC_IMAGE_DATA,ulData);\
}\
}\
}\
MM_ReturnMemory((ADDRESS)pBuffer);\
while(ulExtras--)\
{\
geREG(SRC_IMAGE_DATA,0UL);\
}
#else // check fifo version
#define MACRO_PUMP_PACKED_SRCFIFO16BPP90_270(pSrcBits, width, height, LineInc,\
PixelInc,ulExtras)\
ULONG w;\
PDWORD pDWord;\
ULONG ulData;\
ULONG ulData1;\
ULONG i,j;\
ULONG ulWordStart;\
PDWORD pBuffer=(PDWORD)MM_GetMemory(width*4);\
ulWordStart = (ULONG)pSrcBits & 0x03UL;\
if(ulWordStart)\
{\
--height;\
w = width;\
pDWord = (PDWORD)(((ULONG)pSrcBits) & ~0x03UL); \
pSrcBits += LineInc; \
while ( w >= 2) \
{ \
ulData = *pDWord; \
pDWord = (PDWORD)((PWORD)(pDWord) + PixelInc);\
ulData1 = *pDWord; \
pDWord = (PDWORD)((PWORD)(pDWord) + PixelInc);\
ulData = (ulData>>16) + (ulData1&0xFFFF0000);\
geREG(SRC_IMAGE_DATA,ulData);\
w -= 2;\
}\
if(w)\
{\
ulData = (ulData>>16);\
geREG(SRC_IMAGE_DATA,ulData);\
}\
}\
while(height)\
{ \
--height;\
i=0;\
w = width;\
pDWord = (PDWORD)(((ULONG)pSrcBits) & ~0x03UL); \
pSrcBits += LineInc; \
while ( w >= 2) \
{ \
ulData = *pDWord; \
pDWord = (PDWORD)((PWORD)(pDWord) + PixelInc);\
ulData1 = *pDWord; \
pDWord = (PDWORD)((PWORD)(pDWord) + PixelInc);\
pBuffer[i++]= (ulData>>16) + (ulData1&0xFFFF0000);\
ulData = (ulData & 0x0000FFFF) +(ulData1<<16);\
geREG(SRC_IMAGE_DATA,ulData);\
w -= 2;\
}\
if(w)\
{\
ulData = *pDWord; \
pBuffer[i]= (ulData>>16);\
geREG(SRC_IMAGE_DATA,ulData);\
}\
i=0;\
pSrcBits += LineInc; \
if(height)\
{\
--height;\
w = (width>>1);\
while ( w >= SRC_FIFO_MAX_DWORDS ) \
{ \
geWAITSRCFIFO( SRC_FIFO_MAX_DWORDS ); \
for ( j = 0; j < SRC_FIFO_MAX_DWORDS; j++ ) \
{ \
ulData = pBuffer[i++]; \
geREG(SRC_IMAGE_DATA, ulData); \
}\
w -= SRC_FIFO_MAX_DWORDS; \
}\
geWAITSRCFIFO( w ); \
while (w) \
{ \
ulData = pBuffer[i++]; \
geREG(SRC_IMAGE_DATA,ulData);\
--w;\
}\
if(width&0x01L)\
{\
ulData = pBuffer[i];\
geREG(SRC_IMAGE_DATA,ulData);\
}\
}\
}\
MM_ReturnMemory((ADDRESS)pBuffer);\
geWAITSRCFIFO( ulExtras ); \
while(ulExtras--)\
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -