diff --git a/src/pse/gpu.cpp b/src/pse/gpu.cpp index 4fb27c4cb..d54d93bb0 100644 --- a/src/pse/gpu.cpp +++ b/src/pse/gpu.cpp @@ -178,6 +178,12 @@ void GPU::DMAWrite(u32 value) } } +void GPU::Flush() +{ + FlushRender(); + UpdateDisplay(); +} + u32 GPU::ReadGPUREAD() { if (m_GPUREAD_buffer.empty()) @@ -312,6 +318,14 @@ void GPU::WriteGP1(u32 value) const u32 param = value & UINT32_C(0x00FFFFFF); switch (command) { + case 0x01: // Clear FIFO + { + m_GP0_command.clear(); + Log_DebugPrintf("GP1 clear FIFO"); + UpdateGPUSTAT(); + } + break; + case 0x04: // DMA Direction { m_GPUSTAT.dma_direction = static_cast(param); @@ -409,8 +423,6 @@ bool GPU::HandleRenderCommand() ZeroExtend32(words_per_vertex)); DispatchRenderCommand(rc, num_vertices); - //FlushRender(); - //UpdateDisplay(); return true; } diff --git a/src/pse/gpu.h b/src/pse/gpu.h index 5dac6f547..b9b054adc 100644 --- a/src/pse/gpu.h +++ b/src/pse/gpu.h @@ -31,6 +31,8 @@ public: // gpu_hw_opengl.cpp static std::unique_ptr CreateHardwareOpenGLRenderer(); + void Flush(); + protected: static constexpr u32 VRAM_WIDTH = 1024; static constexpr u32 VRAM_HEIGHT = 512; diff --git a/src/pse/system.cpp b/src/pse/system.cpp index 2b9044879..8348eaa7a 100644 --- a/src/pse/system.cpp +++ b/src/pse/system.cpp @@ -75,8 +75,14 @@ bool System::SaveState(ByteStream* state) void System::RunFrame() { u32 current_frame_number = m_frame_number; - while (current_frame_number == m_frame_number) + u32 ticks = 0; + while (current_frame_number == m_frame_number && ticks < (44100 * 300)) + { m_cpu->Execute(); + ticks++; + } + + m_gpu->Flush(); } bool System::LoadEXE(const char* filename)