From d2f15f4af43025a918f9ab6129dbe050dbfa9df1 Mon Sep 17 00:00:00 2001 From: Jeffrey Pfau Date: Wed, 31 Jul 2013 00:48:34 -0700 Subject: [PATCH] Window bounds enforced --- src/gba/renderers/video-software.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/gba/renderers/video-software.c b/src/gba/renderers/video-software.c index 4892d96c3..edd69f8be 100644 --- a/src/gba/renderers/video-software.c +++ b/src/gba/renderers/video-software.c @@ -248,15 +248,39 @@ static uint16_t GBAVideoSoftwareRendererWriteVideoRegister(struct GBAVideoRender break; case REG_WIN0H: softwareRenderer->win0H.packed = value; + if (softwareRenderer->win0H.start >= softwareRenderer->win0H.end || softwareRenderer->win0H.end > VIDEO_HORIZONTAL_PIXELS) { + softwareRenderer->win0H.end = VIDEO_HORIZONTAL_PIXELS; + } + if (softwareRenderer->win0H.start >= VIDEO_HORIZONTAL_PIXELS) { + softwareRenderer->win0H.start = 0; + } break; case REG_WIN1H: softwareRenderer->win1H.packed = value; + if (softwareRenderer->win1H.start > softwareRenderer->win1H.end || softwareRenderer->win1H.end > VIDEO_HORIZONTAL_PIXELS) { + softwareRenderer->win1H.end = VIDEO_HORIZONTAL_PIXELS; + } + if (softwareRenderer->win1H.start >= VIDEO_HORIZONTAL_PIXELS) { + softwareRenderer->win1H.start = 0; + } break; case REG_WIN0V: softwareRenderer->win0V.packed = value; + if (softwareRenderer->win0V.start > softwareRenderer->win0V.end || softwareRenderer->win0V.end > VIDEO_HORIZONTAL_PIXELS) { + softwareRenderer->win0V.end = VIDEO_VERTICAL_PIXELS; + } + if (softwareRenderer->win0V.start >= VIDEO_VERTICAL_PIXELS) { + softwareRenderer->win0V.start = 0; + } break; case REG_WIN1V: softwareRenderer->win1V.packed = value; + if (softwareRenderer->win1V.start > softwareRenderer->win1V.end || softwareRenderer->win1V.end > VIDEO_HORIZONTAL_PIXELS) { + softwareRenderer->win1V.end = VIDEO_VERTICAL_PIXELS; + } + if (softwareRenderer->win1V.start >= VIDEO_VERTICAL_PIXELS) { + softwareRenderer->win1V.start = 0; + } break; case REG_WININ: softwareRenderer->win0.packed = value;