config.cpp
来自「WinCE 3.0 BSP, 包含Inter SA1110, Intel_815」· C++ 代码 · 共 653 行 · 第 1/2 页
CPP
653 行
DEBUGMSG (GPE_ZONE_ERROR, (TEXT("Memory read=0x%X\r\n"), bTemp));
} else {
DEBUGMSG (GPE_ZONE_INIT, (TEXT("!!Success, can write/read memory\r\n")));
}
#ifdef TEST_PERFORMANCE
#define TEST_LOOP (1024*1024)
ULONG loopCount;
ULONG loops;
LARGE_INTEGER startTime;
LARGE_INTEGER endTime;
LARGE_INTEGER frequency;
ULONGLONG delta;
QueryPerformanceFrequency(&frequency);
for (loops = 0; loops < 2; loops++) {
// test byte writes
QueryPerformanceCounter(&startTime);
for (loopCount = 0; loopCount < TEST_LOOP; loopCount++) {
*(volatile PUCHAR)m_pLAW = (UCHAR)0x55;
}
QueryPerformanceCounter(&endTime);
// compute the time in us
delta = (ULONGLONG)(((endTime.QuadPart - startTime.QuadPart) * 1000 * 1000) / frequency.QuadPart);
// compute KB/s
delta = ((((ULONGLONG)TEST_LOOP) * 1000 * 1000) / delta) / 1024;
DEBUGMSG (1, (TEXT("Byte throughput %dkbs\r\n"), (ULONG)delta));
// test long writes
QueryPerformanceCounter(&startTime);
for (loopCount = 0; loopCount < TEST_LOOP; loopCount++) {
*(volatile PULONG)m_pLAW = (ULONG)0x55;
}
QueryPerformanceCounter(&endTime);
// compute the time in us
delta = (ULONGLONG)(((endTime.QuadPart - startTime.QuadPart) * 1000 * 1000) / frequency.QuadPart);
// compute KB/s
delta = ((((ULONGLONG)TEST_LOOP) * 1000 * 1000 * 4) / delta) / 1024;
DEBUGMSG (1, (TEXT("Long throughput %dkbs\r\n"), (ULONG)delta));
}
#endif //TEST_PERFORMANCE
// Try reading/writting to FrameBuffer
*m_pLAW = 0x77;
bTemp = *m_pLAW;
if (bTemp != 0x77) {
DEBUGMSG (GPE_ZONE_ERROR, (TEXT("Memory read=0x%X\r\n"), bTemp));
} else {
DEBUGMSG (GPE_ZONE_INIT, (TEXT("!!Success, can write/read memory\r\n")));
}
WaitForNotBusy();
Sleep(10);
DEBUGMSG( GPE_ZONE_INIT,(TEXT("Actual memory detected: %d bytes\r\n"),
m_nVideoMemorySize ));
DEBUGMSG( 1 || GPE_ZONE_INIT,(TEXT("IGS2010::IGS2010 done!\r\n")));
}
#ifdef FB16BPP
//
// SetMode640x480x16
// inputs: none
// outputs: none
//
void IGS2010::SetMode640x480x16()
{
// Since we needed to do this earlier let's limit the number of
// times we do it
static BOOL fDone = FALSE;
if (fDone) {
return;
}
fDone = TRUE;
DEBUGMSG( GPE_ZONE_INIT,(TEXT("CT65554::SetMode640x480x16\r\n")));
UnlockVGA();
SetVGAMode(&VGAMode[0]);
DEBUGMSG (1, (TEXT("About to set clock\r\n")));
SetClock(); // Set the clock source & dividers dividers
Sleep (DBG_SLEEP);
BYTE bTemp;
DEBUGMSG (1, (TEXT("About to set reg_DAC_AD_MK (Currently 0x%X)\r\n"),
bTemp = reg_DAC_AD_MK));
// set bypass mode for RAMDAC
bTemp = reg_XR_SpriteControl; // RAMDAC address select
reg_XR_SpriteControl = bTemp | 0x04;
reg_RAMDACMASK = reg_RAMDACMASK | 0x10;
reg_XR_SpriteControl = bTemp & ~0x04;
reg_DAC_AD_MK = 0xFF; // Re-enable display
#ifdef TVOUT
// setup the NTSC TV out
SetTvMode();
#endif //TVOUT
Sleep (DBG_SLEEP);
DEBUGMSG (1, (TEXT("About to determine screen refresh rate\r\n")));
DetermineScreenRefreshRate();
LockVGA();
DEBUGMSG( GPE_ZONE_INIT,(TEXT("Leaving IGS2010::SetMode640x480x16\r\n")));
}
#else // FB16BPP
//
// SetMode640x480x8
// inputs: none
// outputs: none
//
void IGS2010::SetMode640x480x8()
{
// Since we needed to do this earlier let's limit the number of
// times we do it
static BOOL fDone = FALSE;
if (fDone) {
return;
}
fDone = TRUE;
DEBUGMSG( GPE_ZONE_INIT,(TEXT("IGS2010::SetMode640x480x8\r\n")));
UnlockVGA();
SetVGAMode(&VGAMode[0]);
DEBUGMSG (1, (TEXT("About to set clock\r\n")));
SetClock(); // Set the clock source & dividers dividers
Sleep (DBG_SLEEP);
#ifdef DEBUG
BYTE bTemp;
#endif
DEBUGMSG (1, (TEXT("About to set reg_DAC_AD_MK (Currently 0x%X)\r\n"),
bTemp = reg_DAC_AD_MK));
reg_DAC_AD_MK = 0xFF; // Re-enable display
Sleep (DBG_SLEEP);
DEBUGMSG (1, (TEXT("About to determine screen refresh rate\r\n")));
DetermineScreenRefreshRate();
LockVGA();
DEBUGMSG( GPE_ZONE_INIT,(TEXT("Leaving CT65554::SetMode640x480x8\r\n")));
}
#endif // FB16BPP
//
// SetClock
// inputs: none
// outputs: none
//
void IGS2010::SetClock()
{
DEBUGMSG( GPE_ZONE_INIT,(TEXT("IGS2010::SetClock\r\n")));
BYTE bTmp;
bTmp = reg_XR_ExtMiscClock;
*reg_XR.m_pDataPort = bTmp & 0x7F;
*reg_XR.m_pDataPort = bTmp | 0x80;
*reg_XR.m_pDataPort = bTmp & 0x7F;
DEBUGMSG( GPE_ZONE_INIT,(TEXT("Leaving IGS2010::SetClock\r\n")));
}
//
// SetMode
// inputs: none
// outputs: none
//
SCODE IGS2010::SetMode( int modeId, HPALETTE *pPalette )
{
SCODE sc;
DEBUGMSG( GPE_ZONE_INIT,(TEXT("IGS2010::SetMode(%d,0x%X)\r\n"),
modeId, pPalette));
if( modeId != VGAMode[0].gpeMode.modeId ) {
DEBUGMSG( GPE_ZONE_ERROR,(TEXT("IGS2010::SetMode Want mode %d, only have mde %d\r\n"),
modeId, VGAMode[0].gpeMode.modeId ));
return E_INVALIDARG;
}
if( m_pMode ) {
// The mode is already set, just return
return S_OK;
}
m_pMode = &VGAMode[0].gpeMode;
m_nScreenWidth = m_pMode->width;
m_nScreenHeight = m_pMode->height;
if (m_nScreenWidth <= 640) {
m_nScreenStride = (640 * m_pMode->Bpp) / 8;
} else {
m_nScreenStride = (m_nScreenWidth * m_pMode->Bpp) / 8;
}
// video memory is layed out as having the same width as
// the display and height determined by available memory
m_p2DVideoMemory = new Node2D( m_nScreenWidth, m_nVideoMemorySize / m_nScreenStride );
GPESurf *pDummy;
AllocSurface( &pDummy, 640, 2, m_pMode->format, GPE_REQUIRE_VIDEO_MEMORY ); // for cursor
if( FAILED( sc = AllocSurface(
&m_pPrimarySurface,
m_nScreenWidth,
m_nScreenHeight,
m_pMode->format,
GPE_REQUIRE_VIDEO_MEMORY ) ) ) {
return sc;
}
// select correct mode based on defines
#ifdef FB16BPP
SetMode640x480x16();
#else // FB16BPP
SetMode640x480x8();
#endif // FB16BPP
// clear the screen
int fbrow,fbcol;
#ifdef FB16BPP
unsigned short *pBuf = (unsigned short *)m_pPrimarySurface->Buffer();
#else // FB16BPP
unsigned char *pBuf = (unsigned char *)m_pPrimarySurface->Buffer();
#endif // FB16BPP
for( fbrow=0;fbrow<480; fbrow++ ) {
for(fbcol=0;fbcol<640;fbcol++) {
*pBuf++=0;
}
}
DEBUGMSG (1, (TEXT("About to call SetVisibleSurface\r\n")));
SetVisibleSurface( (IGS2010Surf *)m_pPrimarySurface );
DEBUGMSG (1, (TEXT("After call to SetVisibleSurface\r\n")));
// Here, we use EngCreatePalette to create a palette that that MGDI will use as a
// stock palette
#ifdef FB16BPP
if( pPalette ) {
// 15,16,24, and 32bpp primaries are defined by red,green, and blue bitfields...
*pPalette = EngCreatePalette
(
PAL_BITFIELDS,
0,
NULL,
BitMasks[0],
BitMasks[1],
BitMasks[2]
);
DEBUGMSG(1,(TEXT("Created 16 Bpp bitfield-palette, handle = 0x%08x\r\n"),*pPalette));
}
#else // FB16BPP
if( pPalette ) {
DEBUGMSG (1, (TEXT("About to create palette\r\n")));
*pPalette = EngCreatePalette
(
PAL_INDEXED,
PALETTE_SIZE, // i.e. 256
(ULONG *)_rgbIdentity,
0,
0,
0
);
SetPalette (_rgbIdentity, 0, 256);
DEBUGMSG(1,(TEXT("Created 8 Bpp palette, handle = 0x%08x\r\n"),*pPalette));
}
#endif
WaitForVBlank();
#ifdef DEBUG
if (GPE_ZONE_INIT) {
int i, j;
// This should draw some random lines on the screen.
#ifdef FB16BPP
pBuf = (unsigned short *)m_pPrimarySurface->Buffer();
#else // FB16BPP
pBuf = (unsigned char *)m_pPrimarySurface->Buffer();
#endif // FB16BPP
for (i=0; i < 480; i++) {
for (j=0; j < 640; j++) {
#ifdef FB16BPP
if (i == 240) {
*(pBuf + i*640 + j) = 0xFFFF ;
} else if (j == 320) {
*(pBuf + i*640 + j) = 0x0;
} else {
*(pBuf + i*640 + j) = (i | (i<<4) | (i<<8)) % 0xFFFF ;
}
#else // FB16BPP
*(pBuf + i*640 + j) = (i / 5) % 256 ;
#endif // FB16BPP
}
}
}
#endif // DEBUG
DEBUGMSG( GPE_ZONE_INIT,(TEXT("Leaving CT65554::SetMode\r\n")));
return S_OK;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?