|
|
|
@ -57,6 +57,11 @@ void GPU::UpdateSettings()
|
|
|
|
UpdateCRTCDisplayParameters();
|
|
|
|
UpdateCRTCDisplayParameters();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void GPU::CPUClockChanged()
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
UpdateCRTCConfig();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void GPU::UpdateResolutionScale() {}
|
|
|
|
void GPU::UpdateResolutionScale() {}
|
|
|
|
|
|
|
|
|
|
|
|
std::tuple<u32, u32> GPU::GetEffectiveDisplayResolution()
|
|
|
|
std::tuple<u32, u32> GPU::GetEffectiveDisplayResolution()
|
|
|
|
@ -427,8 +432,9 @@ float GPU::ComputeHorizontalFrequency() const
|
|
|
|
{
|
|
|
|
{
|
|
|
|
const CRTCState& cs = m_crtc_state;
|
|
|
|
const CRTCState& cs = m_crtc_state;
|
|
|
|
TickCount fractional_ticks = 0;
|
|
|
|
TickCount fractional_ticks = 0;
|
|
|
|
return static_cast<float>(static_cast<double>(SystemTicksToCRTCTicks(MASTER_CLOCK, &fractional_ticks)) /
|
|
|
|
return static_cast<float>(
|
|
|
|
static_cast<double>(cs.horizontal_total));
|
|
|
|
static_cast<double>(SystemTicksToCRTCTicks(System::GetTicksPerSecond(), &fractional_ticks)) /
|
|
|
|
|
|
|
|
static_cast<double>(cs.horizontal_total));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
float GPU::ComputeVerticalFrequency() const
|
|
|
|
float GPU::ComputeVerticalFrequency() const
|
|
|
|
@ -436,8 +442,9 @@ float GPU::ComputeVerticalFrequency() const
|
|
|
|
const CRTCState& cs = m_crtc_state;
|
|
|
|
const CRTCState& cs = m_crtc_state;
|
|
|
|
const TickCount ticks_per_frame = cs.horizontal_total * cs.vertical_total;
|
|
|
|
const TickCount ticks_per_frame = cs.horizontal_total * cs.vertical_total;
|
|
|
|
TickCount fractional_ticks = 0;
|
|
|
|
TickCount fractional_ticks = 0;
|
|
|
|
return static_cast<float>(static_cast<double>(SystemTicksToCRTCTicks(MASTER_CLOCK, &fractional_ticks)) /
|
|
|
|
return static_cast<float>(
|
|
|
|
static_cast<double>(ticks_per_frame));
|
|
|
|
static_cast<double>(SystemTicksToCRTCTicks(System::GetTicksPerSecond(), &fractional_ticks)) /
|
|
|
|
|
|
|
|
static_cast<double>(ticks_per_frame));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
float GPU::GetDisplayAspectRatio() const
|
|
|
|
float GPU::GetDisplayAspectRatio() const
|
|
|
|
@ -459,7 +466,7 @@ void GPU::UpdateCRTCConfig()
|
|
|
|
cs.current_scanline %= PAL_TOTAL_LINES;
|
|
|
|
cs.current_scanline %= PAL_TOTAL_LINES;
|
|
|
|
cs.horizontal_total = PAL_TICKS_PER_LINE;
|
|
|
|
cs.horizontal_total = PAL_TICKS_PER_LINE;
|
|
|
|
cs.horizontal_sync_start = PAL_HSYNC_TICKS;
|
|
|
|
cs.horizontal_sync_start = PAL_HSYNC_TICKS;
|
|
|
|
cs.current_tick_in_scanline %= PAL_TICKS_PER_LINE;
|
|
|
|
cs.current_tick_in_scanline %= System::ScaleTicksToOverclock(PAL_TICKS_PER_LINE);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else
|
|
|
|
{
|
|
|
|
{
|
|
|
|
@ -467,7 +474,7 @@ void GPU::UpdateCRTCConfig()
|
|
|
|
cs.current_scanline %= NTSC_TOTAL_LINES;
|
|
|
|
cs.current_scanline %= NTSC_TOTAL_LINES;
|
|
|
|
cs.horizontal_total = NTSC_TICKS_PER_LINE;
|
|
|
|
cs.horizontal_total = NTSC_TICKS_PER_LINE;
|
|
|
|
cs.horizontal_sync_start = NTSC_HSYNC_TICKS;
|
|
|
|
cs.horizontal_sync_start = NTSC_HSYNC_TICKS;
|
|
|
|
cs.current_tick_in_scanline %= NTSC_TICKS_PER_LINE;
|
|
|
|
cs.current_tick_in_scanline %= System::ScaleTicksToOverclock(NTSC_TICKS_PER_LINE);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
cs.in_hblank = (cs.current_tick_in_scanline >= cs.horizontal_sync_start);
|
|
|
|
cs.in_hblank = (cs.current_tick_in_scanline >= cs.horizontal_sync_start);
|
|
|
|
@ -498,6 +505,12 @@ void GPU::UpdateCRTCConfig()
|
|
|
|
cs.current_tick_in_scanline %= NTSC_TICKS_PER_LINE;
|
|
|
|
cs.current_tick_in_scanline %= NTSC_TICKS_PER_LINE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cs.horizontal_display_start =
|
|
|
|
|
|
|
|
static_cast<u16>(System::ScaleTicksToOverclock(static_cast<TickCount>(cs.horizontal_display_start)));
|
|
|
|
|
|
|
|
cs.horizontal_display_end =
|
|
|
|
|
|
|
|
static_cast<u16>(System::ScaleTicksToOverclock(static_cast<TickCount>(cs.horizontal_display_end)));
|
|
|
|
|
|
|
|
cs.horizontal_total = static_cast<u16>(System::ScaleTicksToOverclock(static_cast<TickCount>(cs.horizontal_total)));
|
|
|
|
|
|
|
|
|
|
|
|
System::SetThrottleFrequency(ComputeVerticalFrequency());
|
|
|
|
System::SetThrottleFrequency(ComputeVerticalFrequency());
|
|
|
|
|
|
|
|
|
|
|
|
UpdateCRTCDisplayParameters();
|
|
|
|
UpdateCRTCDisplayParameters();
|
|
|
|
|