From a96b0d6d0fd0dd16bd39c4bf57bc22557926ea89 Mon Sep 17 00:00:00 2001 From: NewRisingSun <8vytz1+dhp372pv94ebg@sharklasers.com> Date: Mon, 27 Mar 2023 18:13:56 +0200 Subject: [PATCH] M052: Add submapper 14. --- src/boards/mmc3.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/boards/mmc3.c b/src/boards/mmc3.c index 864e498..c833bc3 100644 --- a/src/boards/mmc3.c +++ b/src/boards/mmc3.c @@ -657,7 +657,6 @@ static void M52PW(uint32 A, uint8 V) { static void M52CW(uint32 A, uint8 V) { uint32 mask = 0xFF ^ ((EXPREGS[0] & 0x40) << 1); -/* uint32 bank = (((EXPREGS[0]>>3)&4)|((EXPREGS[0]>>1)&2)|((EXPREGS[0]>>6)&(EXPREGS[0]>>4)&1))<<7; */ uint32 bank = (((EXPREGS[0] >> 4) & 2) | (EXPREGS[0] & 4) | ((EXPREGS[0] >> 6) & (EXPREGS[0] >> 4) & 1)) << 7; /* actually 256K CHR banks index bits is inverted! */ if (CHRRAM && (EXPREGS[0] &3) ==3) setchr1r(0x10, A, bank | (V & mask)); @@ -665,6 +664,15 @@ static void M52CW(uint32 A, uint8 V) { setchr1(A, bank | (V & mask)); } +static void M52S14CW(uint32 A, uint8 V) { + uint32 mask = 0xFF ^ ((EXPREGS[0] & 0x40) << 1); + uint32 bank = EXPREGS[0] <<3 &0x80 | EXPREGS[0] <<7 &0x300; + if (EXPREGS[0] &0x20) + setchr1r(0x10, A, bank | (V & mask)); + else + setchr1(A, bank | (V & mask)); +} + static DECLFW(M52Write) { if (EXPREGS[1]) { WRAM[A - 0x6000] = V; @@ -689,12 +697,12 @@ static void M52Power(void) { void Mapper52_Init(CartInfo *info) { GenMMC3_Init(info, 256, 256, 8, info->battery); - cwrap = M52CW; + cwrap = info->submapper ==14? M52S14CW: M52CW; pwrap = M52PW; info->Reset = M52Reset; info->Power = M52Power; AddExState(EXPREGS, 2, 0, "EXPR"); - if (info->iNES2 && info->submapper ==13) { + if (info->iNES2 && (info->submapper ==13 || info->submapper ==14)) { CHRRAMSIZE = 8192; CHRRAM = (uint8*)FCEU_gmalloc(CHRRAMSIZE); SetupCartCHRMapping(0x10, CHRRAM, CHRRAMSIZE, 1);