void Config_DoConfig(HWND /*hParent*/) { Config_LoadConfig(); if (!configWindow) Config_CreateWindow(); gtk_widget_show_all( configWindow ); }
EXPORT int CALL InitiateGFX (GFX_INFO Gfx_Info) { DMEM = Gfx_Info.DMEM; IMEM = Gfx_Info.IMEM; RDRAM = Gfx_Info.RDRAM; REG.MI_INTR = (u32*) Gfx_Info.MI_INTR_REG; REG.DPC_START = (u32*) Gfx_Info.DPC_START_REG; REG.DPC_END = (u32*) Gfx_Info.DPC_END_REG; REG.DPC_CURRENT = (u32*) Gfx_Info.DPC_CURRENT_REG; REG.DPC_STATUS = (u32*) Gfx_Info.DPC_STATUS_REG; REG.DPC_CLOCK = (u32*) Gfx_Info.DPC_CLOCK_REG; REG.DPC_BUFBUSY = (u32*) Gfx_Info.DPC_BUFBUSY_REG; REG.DPC_PIPEBUSY = (u32*) Gfx_Info.DPC_PIPEBUSY_REG; REG.DPC_TMEM = (u32*) Gfx_Info.DPC_TMEM_REG; REG.VI_STATUS = (u32*) Gfx_Info.VI_STATUS_REG; REG.VI_ORIGIN = (u32*) Gfx_Info.VI_ORIGIN_REG; REG.VI_WIDTH = (u32*) Gfx_Info.VI_WIDTH_REG; REG.VI_INTR = (u32*) Gfx_Info.VI_INTR_REG; REG.VI_V_CURRENT_LINE = (u32*) Gfx_Info.VI_V_CURRENT_LINE_REG; REG.VI_TIMING = (u32*) Gfx_Info.VI_TIMING_REG; REG.VI_V_SYNC = (u32*) Gfx_Info.VI_V_SYNC_REG; REG.VI_H_SYNC = (u32*) Gfx_Info.VI_H_SYNC_REG; REG.VI_LEAP = (u32*) Gfx_Info.VI_LEAP_REG; REG.VI_H_START = (u32*) Gfx_Info.VI_H_START_REG; REG.VI_V_START = (u32*) Gfx_Info.VI_V_START_REG; REG.VI_V_BURST = (u32*) Gfx_Info.VI_V_BURST_REG; REG.VI_X_SCALE = (u32*) Gfx_Info.VI_X_SCALE_REG; REG.VI_Y_SCALE = (u32*) Gfx_Info.VI_Y_SCALE_REG; CheckInterrupts = Gfx_Info.CheckInterrupts; Config_LoadConfig(); Config_LoadRomConfig(Gfx_Info.HEADER); ticksInitialize(); if( config.autoFrameSkip ) frameSkipper.setSkips( FrameSkipper::AUTO, config.maxFrameSkip ); else frameSkipper.setSkips( FrameSkipper::MANUAL, config.maxFrameSkip ); OGL_Start(); return 1; }
void RSP_ThreadProc(std::mutex * _pRspThreadMtx, std::mutex * _pPluginThreadMtx, std::condition_variable_any * _pRspThreadCv, std::condition_variable_any * _pPluginThreadCv, APICommand ** _pCommand) { _pRspThreadMtx->lock(); RSP_Init(); GBI.init(); Config_LoadConfig(); video().start(); assert(!isGLError()); while (true) { _pPluginThreadMtx->lock(); _pPluginThreadCv->notify_one(); _pPluginThreadMtx->unlock(); _pRspThreadCv->wait(*_pRspThreadMtx); if (*_pCommand != nullptr && !(*_pCommand)->run()) return; assert(!isGLError()); } }
void PluginAPI::RomOpen() { LOG(LOG_APIFUNC, "RomOpen\n"); #ifdef RSPTHREAD m_pluginThreadMtx.lock(); m_pRspThread = new std::thread(RSP_ThreadProc, &m_rspThreadMtx, &m_pluginThreadMtx, &m_rspThreadCv, &m_pluginThreadCv, &m_command); m_pRspThread->detach(); m_pluginThreadCv.wait(m_pluginThreadMtx); m_pluginThreadMtx.unlock(); #else RSP_Init(); GBI.init(); Config_LoadConfig(); video().start(); #endif #ifdef DEBUG OpenDebugDlg(); #endif }
EXPORT int CALL InitiateGFX (GFX_INFO Gfx_Info) { DMEM = Gfx_Info.DMEM; IMEM = Gfx_Info.IMEM; RDRAM = Gfx_Info.RDRAM; REG.MI_INTR = (u32*) Gfx_Info.MI_INTR_REG; REG.DPC_START = (u32*) Gfx_Info.DPC_START_REG; REG.DPC_END = (u32*) Gfx_Info.DPC_END_REG; REG.DPC_CURRENT = (u32*) Gfx_Info.DPC_CURRENT_REG; REG.DPC_STATUS = (u32*) Gfx_Info.DPC_STATUS_REG; REG.DPC_CLOCK = (u32*) Gfx_Info.DPC_CLOCK_REG; REG.DPC_BUFBUSY = (u32*) Gfx_Info.DPC_BUFBUSY_REG; REG.DPC_PIPEBUSY = (u32*) Gfx_Info.DPC_PIPEBUSY_REG; REG.DPC_TMEM = (u32*) Gfx_Info.DPC_TMEM_REG; REG.VI_STATUS = (u32*) Gfx_Info.VI_STATUS_REG; REG.VI_ORIGIN = (u32*) Gfx_Info.VI_ORIGIN_REG; REG.VI_WIDTH = (u32*) Gfx_Info.VI_WIDTH_REG; REG.VI_INTR = (u32*) Gfx_Info.VI_INTR_REG; REG.VI_V_CURRENT_LINE = (u32*) Gfx_Info.VI_V_CURRENT_LINE_REG; REG.VI_TIMING = (u32*) Gfx_Info.VI_TIMING_REG; REG.VI_V_SYNC = (u32*) Gfx_Info.VI_V_SYNC_REG; REG.VI_H_SYNC = (u32*) Gfx_Info.VI_H_SYNC_REG; REG.VI_LEAP = (u32*) Gfx_Info.VI_LEAP_REG; REG.VI_H_START = (u32*) Gfx_Info.VI_H_START_REG; REG.VI_V_START = (u32*) Gfx_Info.VI_V_START_REG; REG.VI_V_BURST = (u32*) Gfx_Info.VI_V_BURST_REG; REG.VI_X_SCALE = (u32*) Gfx_Info.VI_X_SCALE_REG; REG.VI_Y_SCALE = (u32*) Gfx_Info.VI_Y_SCALE_REG; CheckInterrupts = Gfx_Info.CheckInterrupts; Config_LoadConfig(); Config_LoadRomConfig(Gfx_Info.HEADER); OGL_Start(); return 1; }
void RSP_ThreadProc(std::mutex * _pRspThreadMtx, std::mutex * _pPluginThreadMtx, std::condition_variable_any * _pRspThreadCv, std::condition_variable_any * _pPluginThreadCv, API_COMMAND * _pCommand) { _pRspThreadMtx->lock(); RSP_Init(); GBI.init(); Config_LoadConfig(); video().start(); assert(!isGLError()); while (true) { _pPluginThreadMtx->lock(); _pPluginThreadCv->notify_one(); _pPluginThreadMtx->unlock(); _pRspThreadCv->wait(*_pRspThreadMtx); switch (*_pCommand) { case acProcessDList: RSP_ProcessDList(); break; case acProcessRDPList: RDP_ProcessRDPList(); break; case acUpdateScreen: VI_UpdateScreen(); break; case acRomClosed: TFH.shutdown(); video().stop(); GBI.destroy(); *_pCommand = acNone; _pRspThreadMtx->unlock(); _pPluginThreadMtx->lock(); _pPluginThreadCv->notify_one(); _pPluginThreadMtx->unlock(); return; } assert(!isGLError()); *_pCommand = acNone; } }