diff --git a/src/gba/gba-memory.c b/src/gba/gba-memory.c index 7c6fb23fa..88f35196c 100644 --- a/src/gba/gba-memory.c +++ b/src/gba/gba-memory.c @@ -288,6 +288,8 @@ void GBAStore32(struct ARMMemory* memory, uint32_t address, int32_t value) { GBAIOWrite32(gbaMemory->p, address & (SIZE_IO - 1), value); break; case BASE_PALETTE_RAM: + gbaMemory->p->video.palette[(address & (SIZE_PALETTE_RAM - 1)) >> 1] = value; + gbaMemory->p->video.palette[((address & (SIZE_PALETTE_RAM - 1)) >> 1) + 1] = value >> 16; break; case BASE_VRAM: break; @@ -318,6 +320,7 @@ void GBAStore16(struct ARMMemory* memory, uint32_t address, int16_t value) { GBAIOWrite(gbaMemory->p, address & (SIZE_IO - 1), value); break; case BASE_PALETTE_RAM: + gbaMemory->p->video.palette[(address & (SIZE_PALETTE_RAM - 1)) >> 1] = value; break; case BASE_VRAM: break; diff --git a/src/gba/renderers/video-software.c b/src/gba/renderers/video-software.c index ca2aa02f0..6edbcca0b 100644 --- a/src/gba/renderers/video-software.c +++ b/src/gba/renderers/video-software.c @@ -41,6 +41,25 @@ static uint16_t GBAVideoSoftwareRendererWriteVideoRegister(struct GBAVideoRender static void GBAVideoSoftwareRendererDrawScanline(struct GBAVideoRenderer* renderer, int y) { struct GBAVideoSoftwareRenderer* softwareRenderer = (struct GBAVideoSoftwareRenderer*) renderer; + int x; + uint16_t* row = &softwareRenderer->outputBuffer[softwareRenderer->outputBufferStride * y]; + for (x = 0; x < 16; ++x) { + row[(x * 15) + 0] = renderer->palette[x + (y / 5) * 16]; + row[(x * 15) + 1] = renderer->palette[x + (y / 5) * 16]; + row[(x * 15) + 2] = renderer->palette[x + (y / 5) * 16]; + row[(x * 15) + 3] = renderer->palette[x + (y / 5) * 16]; + row[(x * 15) + 4] = renderer->palette[x + (y / 5) * 16]; + row[(x * 15) + 5] = renderer->palette[x + (y / 5) * 16]; + row[(x * 15) + 6] = renderer->palette[x + (y / 5) * 16]; + row[(x * 15) + 7] = renderer->palette[x + (y / 5) * 16]; + row[(x * 15) + 8] = renderer->palette[x + (y / 5) * 16]; + row[(x * 15) + 9] = renderer->palette[x + (y / 5) * 16]; + row[(x * 15) + 10] = renderer->palette[x + (y / 5) * 16]; + row[(x * 15) + 11] = renderer->palette[x + (y / 5) * 16]; + row[(x * 15) + 12] = renderer->palette[x + (y / 5) * 16]; + row[(x * 15) + 13] = renderer->palette[x + (y / 5) * 16]; + row[(x * 15) + 14] = renderer->palette[x + (y / 5) * 16]; + } } static void GBAVideoSoftwareRendererFinishFrame(struct GBAVideoRenderer* renderer) {