//__________________________________________________________________________________________________ // Common video plugin spec, version #1.0 maintained by F|RES // #ifndef _VIDEO_H_INCLUDED__ #define _VIDEO_H_INCLUDED__ #include "PluginSpecs.h" #if defined(__cplusplus) extern "C" { #endif #ifdef _WIN32 #define EXPORT __declspec(dllexport) #define CALL __cdecl #else #define EXPORT #define CALL #endif typedef void (*TSetPEToken)(const unsigned short _token, const int _bSetTokenAcknowledge); typedef void (*TSetPEFinish)(void); typedef unsigned char* (*TGetMemoryPointer)(const unsigned int _iAddress); typedef void (*TVideoLog)(const char* _pMessage, BOOL _bBreak); typedef void (*TRequestWindowSize)(int _iWidth, int _iHeight, BOOL _bFullscreen); typedef void (*TCopiedToXFB)(void); typedef BOOL (*TPeekMessages)(void); typedef void (*TUpdateInterrupts)(void); typedef void (*TUpdateFPSDisplay)(const char* text); // sets the window title typedef struct { // fifo registers volatile DWORD CPBase; volatile DWORD CPEnd; DWORD CPHiWatermark; DWORD CPLoWatermark; volatile INT CPReadWriteDistance; volatile DWORD CPWritePointer; volatile DWORD CPReadPointer; volatile DWORD CPBreakpoint; volatile bool bFF_GPReadEnable; volatile bool bFF_BPEnable; volatile bool bFF_GPLinkEnable; volatile bool bFF_Breakpoint; volatile bool bPauseRead; #ifdef _WIN32 CRITICAL_SECTION sync; #endif } SCPFifoStruct; typedef struct { void *pWindowHandle; TSetPEToken pSetPEToken; TSetPEFinish pSetPEFinish; TGetMemoryPointer pGetMemoryPointer; TVideoLog pLog; TRequestWindowSize pRequestWindowSize; TCopiedToXFB pCopiedToXFB; TPeekMessages pPeekMessages; TUpdateInterrupts pUpdateInterrupts; TUpdateFPSDisplay pUpdateFPSDisplay; SCPFifoStruct *pCPFifo; unsigned char *pVIRegs; void *pMemoryBase; } SVideoInitialize; ///////////////////////////////////////////////////////////////////////////////////////////////////// // I N T E R F A C E //////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////// // __________________________________________________________________________________________________ // Function: GetDllInfo // Purpose: This function allows the emulator to gather information // about the DLL by filling in the PluginInfo structure. // input: a pointer to a PLUGIN_INFO structure that needs to be // filled by the function. (see def above) // output: none // // #ifndef _WIN32 #define _CDECLCALL #endif EXPORT void CALL GetDllInfo(PLUGIN_INFO* _pPluginInfo); // __________________________________________________________________________________________________ // Function: DllAbout // Purpose: This function is optional function that is provided // to give further information about the DLL. // input: a handle to the window that calls this function // output: none // EXPORT void CALL DllAbout(HWND _hParent); // __________________________________________________________________________________________________ // Function: DllConfig // Purpose: This function is optional function that is provided // to allow the user to configure the DLL // input: a handle to the window that calls this function // output: none // EXPORT void CALL DllConfig(HWND _hParent); // __________________________________________________________________________________________________ // Function: Video_Initialize // Purpose: // input: SVideoInitialize* - pointer because window data will be passed back // output: none // EXPORT void CALL Video_Initialize(SVideoInitialize* _pvideoInitialize); // __________________________________________________________________________________________________ // Function: Video_Prepare // Purpose: This function is called from the EmuThread before the // emulation has started. It is just for threadsensitive // APIs like OpenGL. // input: none // output: none // EXPORT void CALL Video_Prepare(void); // __________________________________________________________________________________________________ // Function: Video_Shutdown // Purpose: This function is called when the emulator is shutting down // a game allowing the dll to de-initialise. // input: none // output: none // EXPORT void CALL Video_Shutdown(void); // __________________________________________________________________________________________________ // Function: Video_ExecuteFifoBuffer // Purpose: This function is called if data is inside the fifo-buffer // input: a data-byte (i know we have to optimize this ;-)) // output: none // EXPORT void CALL Video_SendFifoData(BYTE *_uData); // __________________________________________________________________________________________________ // Function: Video_UpdateXFB // Purpose: This fucntion is called when you have to flip the yuv2 // video-buffer. You should ignore this function after you // got the first EFB to XFB copy. // input: pointer to the XFB, width and height of the XFB // output: none // EXPORT void CALL Video_UpdateXFB(BYTE* _pXFB, DWORD _dwWidth, DWORD _dwHeight); // __________________________________________________________________________________________________ // Function: Video_Screenshot // Purpose: This fucntion is called when you want to do a screenshot // input: Filename // output: TRUE if all was okay // EXPORT BOOL CALL Video_Screenshot(TCHAR* _szFilename); // __________________________________________________________________________________________________ // Function: Video_Screenshot // Purpose: This fucntion is called when you want to do a screenshot // input: Filename // output: TRUE if all was okay // EXPORT void CALL Video_EnterLoop(void); #undef CALL #if defined(__cplusplus) } #endif #endif