From 57ad372c782ef6ccd8cb776dca35d20a7076d006 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Sat, 9 Mar 2019 12:44:11 -0800 Subject: [PATCH] GB Video: Fix window y changing mid-window (fixes #1345) --- CHANGES | 1 + cinema/gb/window/ccmmr-hud/baseline_0000.png | Bin 0 -> 3979 bytes cinema/gb/window/ccmmr-hud/baseline_0001.png | Bin 0 -> 3979 bytes cinema/gb/window/ccmmr-hud/baseline_0002.png | Bin 0 -> 3979 bytes cinema/gb/window/ccmmr-hud/baseline_0003.png | Bin 0 -> 3994 bytes cinema/gb/window/ccmmr-hud/baseline_0004.png | Bin 0 -> 3994 bytes cinema/gb/window/ccmmr-hud/baseline_0005.png | Bin 0 -> 3999 bytes cinema/gb/window/ccmmr-hud/test.mvl | Bin 0 -> 23971 bytes src/gb/renderers/software.c | 15 +++++++++------ 9 files changed, 10 insertions(+), 6 deletions(-) create mode 100644 cinema/gb/window/ccmmr-hud/baseline_0000.png create mode 100644 cinema/gb/window/ccmmr-hud/baseline_0001.png create mode 100644 cinema/gb/window/ccmmr-hud/baseline_0002.png create mode 100644 cinema/gb/window/ccmmr-hud/baseline_0003.png create mode 100644 cinema/gb/window/ccmmr-hud/baseline_0004.png create mode 100644 cinema/gb/window/ccmmr-hud/baseline_0005.png create mode 100644 cinema/gb/window/ccmmr-hud/test.mvl diff --git a/CHANGES b/CHANGES index 3cbbde329..4a5e142d7 100644 --- a/CHANGES +++ b/CHANGES @@ -14,6 +14,7 @@ Emulation fixes: - GB I/O: Filter IE top bits properly (fixes mgba.io/i/1329) - GBA Video: Fix scanline cache with scale factor change edge cases - GBA DMA: Fix DMA0-2 lengths (fixes mgba.io/i/1344) + - GB Video: Fix window y changing mid-window (fixes mgba.io/i/1345) Other fixes: - Qt: More app metadata fixes - Qt: Fix load recent from archive (fixes mgba.io/i/1325) diff --git a/cinema/gb/window/ccmmr-hud/baseline_0000.png b/cinema/gb/window/ccmmr-hud/baseline_0000.png new file mode 100644 index 0000000000000000000000000000000000000000..75fc1974e22c3db866a1af0fef9f3cb04ff72ae6 GIT binary patch literal 3979 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 literal 0 HcmV?d00001 diff --git a/cinema/gb/window/ccmmr-hud/test.mvl b/cinema/gb/window/ccmmr-hud/test.mvl new file mode 100644 index 0000000000000000000000000000000000000000..ced08c1d93039c8a4ba2c102fd1258954ba11c3c GIT binary patch literal 23971 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 Obn0mAKVACA<^KRlq_80X literal 0 HcmV?d00001 diff --git a/src/gb/renderers/software.c b/src/gb/renderers/software.c index 4b1517ae0..169dadf74 100644 --- a/src/gb/renderers/software.c +++ b/src/gb/renderers/software.c @@ -220,15 +220,15 @@ static void GBVideoSoftwareRendererDeinit(struct GBVideoRenderer* renderer) { UNUSED(softwareRenderer); } -static void GBVideoSoftwareRendererUpdateWindow(struct GBVideoSoftwareRenderer* renderer, bool before, bool after) { - if (renderer->lastY >= GB_VIDEO_VERTICAL_PIXELS || after == before) { +static void GBVideoSoftwareRendererUpdateWindow(struct GBVideoSoftwareRenderer* renderer, bool before, bool after, uint8_t oldWy) { + if (renderer->lastY >= GB_VIDEO_VERTICAL_PIXELS || !(after || before)) { return; } if (renderer->lastY >= renderer->wy) { if (!after) { renderer->currentWy -= renderer->lastY; renderer->hasWindow = true; - } else { + } else if (!before) { if (!renderer->hasWindow) { if (renderer->lastY > renderer->wy) { renderer->currentWy = GB_VIDEO_VERTICAL_PIXELS; @@ -241,6 +241,8 @@ static void GBVideoSoftwareRendererUpdateWindow(struct GBVideoSoftwareRenderer* } else { renderer->currentWy += renderer->lastY; } + } else if (renderer->wy != oldWy) { + renderer->currentWy += oldWy - renderer->wy; } } } @@ -251,10 +253,11 @@ static uint8_t GBVideoSoftwareRendererWriteVideoRegister(struct GBVideoRenderer* GBVideoCacheWriteVideoRegister(renderer->cache, address, value); } bool wasWindow = _inWindow(softwareRenderer); + uint8_t wy = softwareRenderer->wy; switch (address) { case REG_LCDC: softwareRenderer->lcdc = value; - GBVideoSoftwareRendererUpdateWindow(softwareRenderer, wasWindow, _inWindow(softwareRenderer)); + GBVideoSoftwareRendererUpdateWindow(softwareRenderer, wasWindow, _inWindow(softwareRenderer), wy); break; case REG_SCY: softwareRenderer->scy = value; @@ -264,11 +267,11 @@ static uint8_t GBVideoSoftwareRendererWriteVideoRegister(struct GBVideoRenderer* break; case REG_WY: softwareRenderer->wy = value; - GBVideoSoftwareRendererUpdateWindow(softwareRenderer, wasWindow, _inWindow(softwareRenderer)); + GBVideoSoftwareRendererUpdateWindow(softwareRenderer, wasWindow, _inWindow(softwareRenderer), wy); break; case REG_WX: softwareRenderer->wx = value; - GBVideoSoftwareRendererUpdateWindow(softwareRenderer, wasWindow, _inWindow(softwareRenderer)); + GBVideoSoftwareRendererUpdateWindow(softwareRenderer, wasWindow, _inWindow(softwareRenderer), wy); break; case REG_BGP: softwareRenderer->lookup[0] = value & 3;