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

📄 ct69000.h

📁 WinCE 3.0 BSP, 包含Inter SA1110, Intel_815E, Advantech_PCM9574 等
💻 H
📖 第 1 页 / 共 2 页
字号:
    INT                 m_nScreenBpp;           // Bits/pixel
    INT                 m_nScreenBytesPerPixel; // multiplier

    LinHeap            *m_pVMHeap;              // video memory allocator

    // cursor memory region (4kb)
    ULONG               m_ulCursorMemory;       // offset in ULONG
    volatile PUCHAR     m_pCursorMemory;        // pointer to memory
    INT                 m_iHotX, m_iHotY;
    INT                 m_iCursorRegion;        // index of active cursor region

    //
    ULONG               m_ulPatternMemory;      // offset in ULONG
    volatile PUCHAR     m_pPatternMemory;       // pointer to memory

    UCHAR               m_ucBitBlt;             // keep default of blt config register
    BOOL                m_bCursorIs64x64;       // remember if we have 64x64 cursor

    ULONG               m_ulOvlXOffset;         
    ULONG               m_ulOvlYOffset;

    RECTL               m_rOvlDstWindow;
    RECTL               m_rOvlSrcWindow;
    ULONG               m_ulOvlBaseOffset;

    BOOL                m_bOverlayOn;

    ULONG               m_ulVideoMode;
    ULONG               m_ulRefreshRate;

    BOOL                m_bHasVGARegs;
    BOOL                m_bChip69030;


    VOID    ListRegs( PUCHAR pIndexReg, BYTE bStart, BYTE bStop);

    //
    //  set/get BR register
    //
#if DEBUG
    VOID    SetBR( ULONG ulIndex, ULONG ulData)
                {   
                    ((volatile PULONG)m_pCtrlRegister)[CT69000_BR+ulIndex]=ulData;
                }
#endif
    ULONG   GetBR( ULONG ulIndex)
                {
                    return ((volatile PULONG)m_pCtrlRegister)[CT69000_BR+ulIndex];
                }

    //
    //  set/get MR register
    //
    VOID    SetMR( UCHAR ucIndex, UCHAR ucData)
                {   m_pCtrlRegister[CT69000_MRINDEX]=ucIndex;
                    m_pCtrlRegister[CT69000_MRDATA]=ucData;
                }
    UCHAR   GetMR( UCHAR ucIndex)
                {
                    m_pCtrlRegister[CT69000_MRINDEX]=ucIndex;
                    return m_pCtrlRegister[CT69000_MRDATA];
                }

    VOID     WRITE_LIN_UCHAR( WORD wAddress, BYTE bData);
    BYTE     READ_LIN_UCHAR( WORD wAddress);

    //
    //  set/get CR register
    //
    VOID    SetCR( UCHAR ucIndex, UCHAR ucData)
                {   
                    m_pCtrlRegister[CT69000_CRINDEX]=ucIndex;
                    m_pCtrlRegister[CT69000_CRDATA]=ucData;
                }
    UCHAR   GetCR( UCHAR ucIndex)
                {
                    m_pCtrlRegister[CT69000_CRINDEX]=ucIndex;
                    return m_pCtrlRegister[CT69000_CRDATA];
                }    //
    //  set/get XR register
    //
    VOID    SetXR( UCHAR ucIndex, UCHAR ucData)
                {   
                    m_pCtrlRegister[CT69000_XRINDEX]=ucIndex;
                    m_pCtrlRegister[CT69000_XRDATA]=ucData;
                }
    UCHAR   GetXR( UCHAR ucIndex)
                {
                    m_pCtrlRegister[CT69000_XRINDEX]=ucIndex;
                    return m_pCtrlRegister[CT69000_XRDATA];
                }
    VOID    SetXRPort( UCHAR ucIndex, UCHAR ucData);
    UCHAR   GetXRPort( UCHAR ucIndex);
    VOID    SetXRBit( UCHAR ucIndex, UCHAR ucData)
                {   SetXR( ucIndex, GetXR(ucIndex) | ucData);
                }
    VOID    ClearXRBit( UCHAR ucIndex, UCHAR ucData)
                {   SetXR( ucIndex, GetXR(ucIndex) & ~ucData);
                }

    //
    //  some cursor helper functions
    //
    VOID    SetCursorColor( ULONG ulFore, ULONG ulBack); 
    VOID    DisableCursor();
    VOID    EnableCursor32x32();
    VOID    EnableCursor64x64();

#if !BIOSSETUP

    VOID    SetDisplayMode( VGAPortData *pData);
    VOID    SetRefreshRate( DWORD dwRefreshRate);
    INT     GetClockSpeed ( DWORD dwBase);
    VOID    SetVCO ( DWORD dwBase, INT M, INT N, INT VLD, INT PD);
    INT     VCOSpeed( INT M, INT N, INT VLD) 
            { return (CT69000_REF_CLOCK * M * VLD) / N; }  
    INT     ClockSpeed( INT M, INT N, INT VLD, INT PD)
            { return VCOSpeed(M,N,VLD)/PD; }

#endif // !BIOSSETUP

    UCHAR   GetVGAStatus() 
            { return READ_LIN_UCHAR(VGA_STATUS_REG1); }

    SCODE   SetPalette( const PALETTEENTRY *src, 
                        USHORT firstEntry, 
                        USHORT numEntries);

    BOOL    BltEngineBusy()
            {   
                return GetBR( 4) & 0x80000000; 
            }
    VOID    ResetBltEngine()
            {
                SetXR( 0x20, m_ucBitBlt|2);
                SetXR( 0x20, m_ucBitBlt);
            }


#if CURSORDEBUG
    BOOL    m_bBltEmulation;
#endif
#if DXPAK
    VOID    ResetOverlay();
    HINSTANCE   hDDStub;
#endif

public:
    ULONG           m_ulBitMasks[3];

    CT69000();
    ~CT69000();
    virtual SCODE   SetMode(int modeNo, HPALETTE *pPalette);
    virtual SCODE   GetModeInfo(GPEMode *pMode, int modeNo);
    virtual INT     NumModes(void);
    virtual ULONG	GetGraphicsCaps();
    virtual int 	IsPaletteSettable();
    virtual VOID    GetPhysicalVideoMemory( PULONG pPhysicalMemoryBase, 
                                            PULONG pVideoMemorySize);
    virtual SCODE   AllocSurface(   GPESurf **ppSurf, 
                                    INT width, 
                                    INT height, 
                                    EGPEFormat format, 
                                    INT surfaceFlags);
    virtual SCODE   Line(GPELineParms *pLineParms, EGPEPhase phase);
    virtual SCODE   BltPrepare(GPEBltParms *pBltParms);
    virtual SCODE   BltComplete(GPEBltParms *pBltParms);
    virtual SCODE   SetPointerShape( GPESurf *pMask, 
                                     GPESurf *pColorSurf, 
                                     INT  xHot, 
                                     INT  yHot, 
                                     INT  cx, 
                                     INT  cy);
    virtual SCODE   MovePointer( INT  x, INT y);
    virtual int     IsBusy();
    void            WaitForNotBusy();
    virtual ULONG   DrvEscape(
                        SURFOBJ *pso,
                        ULONG    iEsc,
                        ULONG    cjIn,
                        PVOID    pvIn,
                        ULONG    cjOut,
                        PVOID    pvOut);

    // hw acceleration functions
    SCODE           DummyBlt               (GPEBltParms *pBltParms);
    SCODE           AcceleratedSrcCopyBlt  (GPEBltParms *pBltParms);
    SCODE           AcceleratedTransparentSrcCopyBlt  (GPEBltParms *pBltParms);
    SCODE           AcceleratedPatSrcDstBlt(GPEBltParms *pBltParms);
    SCODE           AcceleratedFill        (GPEBltParms *pBltParms);
    SCODE           AcceleratedPatternFill (GPEBltParms *pBltParms);
    SCODE           AcceleratedTextOut1bpp (GPEBltParms *pBltParms);
    SCODE           AcceleratedLine        (GPELineParms *pLineParms);
    
    // some rewritten sw acceleration routines
    SCODE           EmulatedLine8Bit (GPELineParms *pLineParms);
    SCODE           EmulatedLine16Bit(GPELineParms *pLineParms);

    ULONG           DownloadBrush         (GPESurf *pBrush);
#ifdef DEBUG
    VOID            DbgBltParms( INT iDebugLevel, GPEBltParms *pBltParms);
#endif

    INT     ScanLine();
    INT     InVBlank();
    BOOL    FlipInProgress();
    VOID    FlipTo( DWORD dwNewBase);
    EGPEFormat GetFormat() { return m_pMode->format; }

    //
    //  macro for ddraw fills/blts
    //
    VOID    SetBRFill(  ULONG ulDstPitch,
                        ULONG ulFillColor,
                        ULONG ulCmd,
                        ULONG ulDst,
                        ULONG ulWidth,
                        ULONG ulHeight);
    VOID    SetBRBlt (  ULONG ulSrcPitch,
                        ULONG ulDstPitch,
                        ULONG ulCmd,
                        ULONG ulSrc,
                        ULONG ulDst,
                        ULONG ulWidth,
                        ULONG ulHeight);
    VOID    SetKey( DWORD dwKey);

    //
    //  functions to control ddraw overlay
    //
    VOID    OverlayOn();
    VOID    OverlayOff();
    VOID    ColorKeyOn ();
    VOID    ColorKeyOff();
    VOID    SetOvlPTR1( ULONG ulBase);
    VOID    SetOvlPTR2( ULONG ulBase);
    VOID    OvlFlipTo  ( ULONG ulBase);
    BOOL    OvlFlipBusy();
    ULONG   SetOverlayWindow( 
                              ULONG ulSrcStride,  
                              LPRECTL lpSrcWindow,
                              LPRECTL lpDstWindow
                              );
    VOID    SetOvlFormat( DWORD dwOvlFormat);
    VOID    SetOverlayPosition( ULONG ulX, ULONG ulY);
    VOID    SetColorKey( DWORD dwKey);

    ULONG   RefreshRate()     { return m_ulRefreshRate; }
    ULONG   VideoMemorySize() { return m_ulVideoMemorySize; }
    ULONG   VideoMemoryFree() { return m_pVMHeap->TotalFree(); }
    ULONG   VideoPhysAddress(){ return m_ulPhysFrameBuffer; }
    ULONG   BytesPerPixel(ULONG ulPixel)
                              {
                                return BYTESPERPIXEL(ulPixel);
                              }

};

class SGPESurf:public GPESurf
{
public:
    SGPESurf(
             int        width,
			 int     	height,
			 EGPEFormat format);
    ~SGPESurf();
};


class CT69000Surf : public GPESurf
{
private:
    LinHeap            *m_pVMHeap;
    INT                m_Flags;
    CT69000Surf        *m_pNext;
    CT69000Surf        *m_pPrev;
    static CT69000Surf *m_pRoot;           
public:
                    CT69000Surf( INT width, 
                                 INT height, 
                                 ULONG offset, 
                                 PVOID pBits, 
                                 INT stride, 
                                 EGPEFormat format, 
                                 LinHeap *pVMHeap,
                                 INT flags);
    virtual         ~CT69000Surf(void);
    BOOL            Demote();
    BOOL            DemoteSurf(BOOL bAll);
};

//
//  inline for DDraw color key setting
//

inline VOID CT69000::SetKey( DWORD dwKey)
{
    SetBR( 1, dwKey);
}

//
//  inline for DDraw fill
//
inline VOID CT69000::SetBRFill(  
                    ULONG ulDstPitch,
                    ULONG ulFillColor,
                    ULONG ulCmd,
                    ULONG ulDst,
                    ULONG ulWidth,
                    ULONG ulHeight)
{
    SetBR( 0, ulDstPitch << 16);
    SetBR( 1, ulFillColor);
    SetBR( 4, ulCmd);
    SetBR( 7, ulDst);
    SetBR( 8,(ulHeight<<16) | ulWidth);
}

//
//  inline for ddraw blt
//
inline VOID CT69000::SetBRBlt (  
                    ULONG ulSrcPitch,
                    ULONG ulDstPitch,
                    ULONG ulCmd,
                    ULONG ulSrc,
                    ULONG ulDst,
                    ULONG ulWidth,
                    ULONG ulHeight)
{
    SetBR( 0,(ulDstPitch << 16) | ulSrcPitch);
    SetBR( 4, ulCmd);
    SetBR( 6, ulSrc);
    SetBR( 7, ulDst);
    SetBR( 8,(ulHeight<<16) | ulWidth);
}


#endif __CT69000_H__

⌨️ 快捷键说明

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