diff --git a/src/gba/renderers/video-software.c b/src/gba/renderers/video-software.c index 2272ce9fe..491654ae4 100644 --- a/src/gba/renderers/video-software.c +++ b/src/gba/renderers/video-software.c @@ -246,6 +246,24 @@ static uint16_t GBAVideoSoftwareRendererWriteVideoRegister(struct GBAVideoRender } _updatePalettes(softwareRenderer); break; + case REG_WIN0H: + softwareRenderer->win0H.packed = value; + break; + case REG_WIN1H: + softwareRenderer->win1H.packed = value; + break; + case REG_WIN0V: + softwareRenderer->win0V.packed = value; + break; + case REG_WIN1V: + softwareRenderer->win1V.packed = value; + break; + case REG_WININ: + softwareRenderer->winin.packed = value; + break; + case REG_WINOUT: + softwareRenderer->winout.packed = value; + break; default: GBALog(GBA_LOG_STUB, "Stub video register write: %03x", address); } diff --git a/src/gba/renderers/video-software.h b/src/gba/renderers/video-software.h index 892ca8b7c..2adecdb85 100644 --- a/src/gba/renderers/video-software.h +++ b/src/gba/renderers/video-software.h @@ -50,6 +50,34 @@ enum PixelFlags { FLAG_TARGET_2 = 0x02000000 }; +union Window { + struct { + uint8_t end; + uint8_t start; + }; + uint16_t packed; +}; + +union WindowControl { + struct { + unsigned bg0EnableLo : 1; + unsigned bg1EnableLo : 1; + unsigned bg2EnableLo : 1; + unsigned bg3EnableLo : 1; + unsigned objEnableLo : 1; + unsigned blendEnableLo : 1; + unsigned : 2; + unsigned bg0EnableHi : 1; + unsigned bg1EnableHi : 1; + unsigned bg2EnableHi : 1; + unsigned bg3EnableHi : 1; + unsigned objEnableHi : 1; + unsigned blendEnableHi : 1; + unsigned : 2; + }; + uint16_t packed; +}; + struct GBAVideoSoftwareRenderer { struct GBAVideoRenderer d; @@ -73,6 +101,14 @@ struct GBAVideoSoftwareRenderer { uint16_t bldb; uint16_t bldy; + union Window win0H; + union Window win0V; + union Window win1H; + union Window win1V; + + union WindowControl winin; + union WindowControl winout; + struct GBAVideoSoftwareBackground bg[4]; uint32_t* row;