diff options
author | notaz | 2012-11-13 02:28:41 +0200 |
---|---|---|
committer | notaz | 2012-11-13 02:28:41 +0200 |
commit | c65553d0cafc353daad3fdcc0aab63bb8427a809 (patch) | |
tree | 1c98a01dcf48755518405457b1ba0593465e7a2f | |
parent | 7851087ded290440ef7490f7725a7b78602bd736 (diff) | |
download | pcsx_rearmed-c65553d0cafc353daad3fdcc0aab63bb8427a809.tar.gz pcsx_rearmed-c65553d0cafc353daad3fdcc0aab63bb8427a809.tar.bz2 pcsx_rearmed-c65553d0cafc353daad3fdcc0aab63bb8427a809.zip |
fix some random corner cases
-rw-r--r-- | frontend/menu.c | 8 | ||||
-rw-r--r-- | plugins/gpulib/gpu.c | 2 | ||||
-rw-r--r-- | plugins/gpulib/vout_pl.c | 2 |
3 files changed, 9 insertions, 3 deletions
diff --git a/frontend/menu.c b/frontend/menu.c index ec3c5a2..f77bc9d 100644 --- a/frontend/menu.c +++ b/frontend/menu.c @@ -624,12 +624,18 @@ static void draw_savestate_bg(int slot) x = gpu->ulControl[5] & 0x3ff; y = (gpu->ulControl[5] >> 10) & 0x1ff; - s = (u16 *)gpu->psxVRam + y * 1024 + x; w = psx_widths[(gpu->ulStatus >> 16) & 7]; tmp = gpu->ulControl[7]; h = ((tmp >> 10) & 0x3ff) - (tmp & 0x3ff); if (gpu->ulStatus & 0x80000) // doubleheight h *= 2; + if (h <= 0 || h > 512) + goto out; + if (y > 512 - 64) + y = 0; + if (y + h > 512) + h = 512 - y; + s = (u16 *)gpu->psxVRam + y * 1024 + x; x = max(0, g_menuscreen_w - w) & ~3; y = max(0, g_menuscreen_h / 2 - h / 2); diff --git a/plugins/gpulib/gpu.c b/plugins/gpulib/gpu.c index b61bff6..b300c88 100644 --- a/plugins/gpulib/gpu.c +++ b/plugins/gpulib/gpu.c @@ -212,7 +212,7 @@ void GPUwriteStatus(uint32_t data) break; case 0x05: gpu.screen.x = data & 0x3ff; - gpu.screen.y = (data >> 10) & 0x3ff; + gpu.screen.y = (data >> 10) & 0x1ff; if (gpu.frameskip.set) { decide_frameskip_allow(gpu.ex_regs[3]); if (gpu.frameskip.last_flip_frame != *gpu.state.frame_count) { diff --git a/plugins/gpulib/vout_pl.c b/plugins/gpulib/vout_pl.c index 11307e2..7b229db 100644 --- a/plugins/gpulib/vout_pl.c +++ b/plugins/gpulib/vout_pl.c @@ -72,8 +72,8 @@ void vout_update(void) if (y + h > vram_h) { if (y + h - vram_h > h / 2) { // wrap - y = 0; h -= vram_h - y; + y = 0; } else // clip |