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 + -
显示快捷键?