📄 mqmacros.blt
字号:
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 + -