diff --git a/output/dll/octoshock.dll b/output/dll/octoshock.dll index 9cba343fba..f263f6ee1f 100644 Binary files a/output/dll/octoshock.dll and b/output/dll/octoshock.dll differ diff --git a/psx/octoshock/psx/gpu.cpp b/psx/octoshock/psx/gpu.cpp index 0708823169..30a76a5516 100644 --- a/psx/octoshock/psx/gpu.cpp +++ b/psx/octoshock/psx/gpu.cpp @@ -1437,9 +1437,19 @@ pscpu_timestamp_t PS_GPU::Update(const pscpu_timestamp_t sys_timestamp) //it's unclear what happens to games displaying a peculiar Y range if (dump_framebuffer) { - dx_start = 0; - dx_end = 2560 / DotClockRatios[dmc]; - LineWidths[dest_line] = dx_end - dx_start; + //special hack: if the game (or the bios...) is set to display no range here, don't modify it + //also, as you can see just above, this condition is used to represent an 'off' display + //unfortunately, this will usually be taking effect at dest_line==0, and so the + //fully overscanned area will get set for LineWidths[0]. + //so later on we'll have to use LineWidths[NN], say, as a heuristic to get the framebuffer size + if (dx_start == dx_end) + { } + else + { + dx_start = 0; + dx_end = 2560 / DotClockRatios[dmc]; + LineWidths[dest_line] = dx_end - dx_start; + } } { diff --git a/psx/octoshock/psx/psx.cpp b/psx/octoshock/psx/psx.cpp index ae4708e16f..550bfe0a4f 100644 --- a/psx/octoshock/psx/psx.cpp +++ b/psx/octoshock/psx/psx.cpp @@ -1609,7 +1609,10 @@ EW_EXPORT s32 shock_GetFramebuffer(void* psx, ShockFramebufferInfo* fb) int fbIndex = s_FramebufferCurrent; //always fetch description - int width = VTLineWidths[fbIndex][0]; //presently, except for contrived test programs, it is safe to assume this is the same for the entire frame (no known use by games) + //presently, except for contrived test programs, it is safe to assume this is the same for the entire frame (no known use by games) + //however, due to the dump_framebuffer, it may be incorrect at scanline 0. so lets use another one for the heuristic here + //64 is enough to fix the PAL bios screen... + int width = VTLineWidths[fbIndex][64]; int height = espec.DisplayRect.h; fb->width = width; fb->height = height;