From 4159f8ea6305f32d34dc47e8001eb166a255a04e Mon Sep 17 00:00:00 2001 From: Jeffrey Pfau Date: Sat, 16 Apr 2016 10:48:48 -0700 Subject: [PATCH] GB Video: Fix STAT bit 0 in CGB mode --- src/gb/renderers/software.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/gb/renderers/software.c b/src/gb/renderers/software.c index 980ca8b4a..41f88cbb4 100644 --- a/src/gb/renderers/software.c +++ b/src/gb/renderers/software.c @@ -108,7 +108,7 @@ static void GBVideoSoftwareRendererDrawRange(struct GBVideoRenderer* renderer, i if (GBRegisterLCDCIsTileMap(softwareRenderer->lcdc)) { maps += GB_SIZE_MAP; } - if (GBRegisterLCDCIsBgEnable(softwareRenderer->lcdc)) { + if (GBRegisterLCDCIsBgEnable(softwareRenderer->lcdc) || softwareRenderer->model >= GB_MODEL_CGB) { if (GBRegisterLCDCIsWindow(softwareRenderer->lcdc) && softwareRenderer->wy <= y && endX >= softwareRenderer->wx - 7) { if (softwareRenderer->wx - 7 > 0) { GBVideoSoftwareRendererDrawBackground(softwareRenderer, maps, startX, softwareRenderer->wx - 7, y, softwareRenderer->scx, softwareRenderer->scy); @@ -195,7 +195,7 @@ static void GBVideoSoftwareRendererDrawBackground(struct GBVideoSoftwareRenderer if (renderer->model >= GB_MODEL_CGB) { GBObjAttributes attrs = attr[topX + topY]; p = GBObjAttributesGetCGBPalette(attrs) * 4; - if (GBObjAttributesIsPriority(attrs)) { + if (GBObjAttributesIsPriority(attrs) && GBRegisterLCDCIsBgEnable(renderer->lcdc)) { p |= 0x80; } if (GBObjAttributesIsBank(attrs)) { @@ -230,7 +230,7 @@ static void GBVideoSoftwareRendererDrawBackground(struct GBVideoSoftwareRenderer if (renderer->model >= GB_MODEL_CGB) { GBObjAttributes attrs = attr[topX + topY]; p = GBObjAttributesGetCGBPalette(attrs) * 4; - if (GBObjAttributesIsPriority(attrs)) { + if (GBObjAttributesIsPriority(attrs) && GBRegisterLCDCIsBgEnable(renderer->lcdc)) { p |= 0x80; } if (GBObjAttributesIsBank(attrs)) { @@ -305,6 +305,10 @@ static void GBVideoSoftwareRendererDrawObj(struct GBVideoSoftwareRenderer* rende if (GBObjAttributesIsBank(obj->attr)) { data += GB_SIZE_VRAM_BANK0; } + if (!GBRegisterLCDCIsBgEnable(renderer->lcdc)) { + mask = 0x60; + mask2 = 0x83; + } } else { p = (GBObjAttributesGetPalette(obj->attr) + 8) * 4; }