From 286875f9ef64ad0e6ecd49c37127c2910a11d92e Mon Sep 17 00:00:00 2001 From: zeromus Date: Wed, 7 Nov 2018 04:01:36 -0500 Subject: [PATCH] try to fix writes to palette mirrors --- src/boards/mmc5.cpp | 14 ++++++++++---- src/ppu.cpp | 4 +++- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/boards/mmc5.cpp b/src/boards/mmc5.cpp index e11ca083..b2e4cd17 100644 --- a/src/boards/mmc5.cpp +++ b/src/boards/mmc5.cpp @@ -146,12 +146,18 @@ uint8* MMC5BGVRAMADR(uint32 A) static void mmc5_PPUWrite(uint32 A, uint8 V) { uint32 tmp = A; extern uint8 PALRAM[0x20]; + extern uint8 UPALRAM[0x03]; if (tmp >= 0x3F00) { - // hmmm.... - if (!(tmp & 0xf)) - PALRAM[0x00] = PALRAM[0x04] = PALRAM[0x08] = PALRAM[0x0C] = V & 0x3F; - else if (tmp & 3) PALRAM[(tmp & 0x1f)] = V & 0x3f; + if (!(tmp & 3)) { + if (!(tmp & 0xC)) { + PALRAM[0x00] = PALRAM[0x04] = PALRAM[0x08] = PALRAM[0x0C] = V & 0x3F; + PALRAM[0x10] = PALRAM[0x14] = PALRAM[0x18] = PALRAM[0x1C] = V & 0x3F; + } + else + UPALRAM[((tmp & 0xC) >> 2) - 1] = V & 0x3F; + } else + PALRAM[tmp & 0x1F] = V & 0x3F; } else if (tmp < 0x2000) { if (PPUCHRRAM & (1 << (tmp >> 10))) VPage[tmp >> 10][tmp] = V; diff --git a/src/ppu.cpp b/src/ppu.cpp index 689c7de6..7c78b8bc 100644 --- a/src/ppu.cpp +++ b/src/ppu.cpp @@ -430,8 +430,10 @@ inline void FFCEUX_PPUWrite_Default(uint32 A, uint8 V) { vnapage[((tmp & 0xF00) >> 10)][tmp & 0x3FF] = V; } else { if (!(tmp & 3)) { - if (!(tmp & 0xC)) + if (!(tmp & 0xC)) { PALRAM[0x00] = PALRAM[0x04] = PALRAM[0x08] = PALRAM[0x0C] = V & 0x3F; + PALRAM[0x10] = PALRAM[0x14] = PALRAM[0x18] = PALRAM[0x1C] = V & 0x3F; + } else UPALRAM[((tmp & 0xC) >> 2) - 1] = V & 0x3F; } else