From a65c3b26fcecaf5bb3ede0e752ecc4998a7a600c Mon Sep 17 00:00:00 2001 From: NewRisingSun <8vytz1+dhp372pv94ebg@sharklasers.com> Date: Sat, 5 Apr 2025 20:21:25 +0200 Subject: [PATCH] Added mapper 367, cleaned up mapper 205. --- src/boards/mmc3.c | 61 ++++++++++++++++++++++++++--------------------- src/ines.c | 1 + src/ines.h | 1 + 3 files changed, 36 insertions(+), 27 deletions(-) diff --git a/src/boards/mmc3.c b/src/boards/mmc3.c index 5571012..ae21227 100644 --- a/src/boards/mmc3.c +++ b/src/boards/mmc3.c @@ -21,7 +21,7 @@ */ /* Code for emulating iNES mappers 4,12,44,45,47,49,52,74,114,115,116,118, - 119,165,205,245,249,250,254,555 + 119,165,205,245,249,250,254,361,366,367,555 */ #include "mapinc.h" @@ -1220,57 +1220,64 @@ void Mapper198_Init(CartInfo *info) { info->Power = M198Power; } -/* ---------------------------- Mapper 205 ------------------------------ */ +/* ---------------------------- Mapper 205,367 ------------------------------ */ /* UNIF boardname BMC-JC-016-2 https://wiki.nesdev.com/w/index.php/INES_Mapper_205 */ -static void M205PW(uint32 A, uint8 V) { +static void M205_367PW(uint32 A, uint8 V) { uint8 bank = V & ((EXPREGS[0] & 0x02) ? 0x0F : 0x1F); setprg8(A, EXPREGS[0] << 4 | bank); } -static void M205CW(uint32 A, uint8 V) { +static void M205_367CW(uint32 A, uint8 V) { uint8 bank = V & ((EXPREGS[0] & 0x02) ? 0x7F : 0xFF); setchr1(A, (EXPREGS[0] << 7) | bank); } -static DECLFW(M205Write0) { - if (EXPREGS[1] == 0) { - EXPREGS[0] = V & 0x03; - EXPREGS[1] = A & 0x80; - FixMMC3PRG(MMC3_cmd); - FixMMC3CHR(MMC3_cmd); - } else - CartBW(A, V); +static DECLFW(M205Write) { + EXPREGS[0] = V; + FixMMC3PRG(MMC3_cmd); + FixMMC3CHR(MMC3_cmd); } -static DECLFW(M205Write1) { - if (EXPREGS[1] == 0) { - EXPREGS[0] = V & 0xF0; - FixMMC3PRG(MMC3_cmd); - FixMMC3CHR(MMC3_cmd); - } else - CartBW(A, V); +static DECLFW(M367Write) { + EXPREGS[0] = A &0xFF; + FixMMC3PRG(MMC3_cmd); + FixMMC3CHR(MMC3_cmd); } -static void M205Reset(void) { - EXPREGS[0] = EXPREGS[1] = 0; +static void M205_367Reset(void) { + EXPREGS[0] = 0; MMC3RegReset(); } static void M205Power(void) { - EXPREGS[0] = EXPREGS[1] = 0; + EXPREGS[0] = 0; GenMMC3Power(); - SetWriteHandler(0x6000, 0x6fff, M205Write0); - SetWriteHandler(0x7000, 0x7fff, M205Write1); /* OK-411 boards, the same logic, but data latched, 2-in-1 frankenstein */ + SetWriteHandler(0x6000, 0x7fff, M205Write); +} + +static void M367Power(void) { + EXPREGS[0] = 0; + GenMMC3Power(); + SetWriteHandler(0x6000, 0x7fff, M367Write); } void Mapper205_Init(CartInfo *info) { GenMMC3_Init(info, 256, 128, 8, 0); - pwrap = M205PW; - cwrap = M205CW; + pwrap = M205_367PW; + cwrap = M205_367CW; info->Power = M205Power; - info->Reset = M205Reset; + info->Reset = M205_367Reset; + AddExState(EXPREGS, 1, 0, "EXPR"); +} + +void Mapper367_Init(CartInfo *info) { + GenMMC3_Init(info, 256, 128, 8, 0); + pwrap = M205_367PW; + cwrap = M205_367CW; + info->Power = M367Power; + info->Reset = M205_367Reset; AddExState(EXPREGS, 1, 0, "EXPR"); } diff --git a/src/ines.c b/src/ines.c index 432254f..8bfe84c 100644 --- a/src/ines.c +++ b/src/ines.c @@ -774,6 +774,7 @@ INES_BOARD_BEGIN() INES_BOARD( "830506C", 362, Mapper362_Init ) INES_BOARD( "JY830832C", 364, Mapper364_Init ) INES_BOARD( "GN-45", 366, GN45_Init ) + INES_BOARD( "JC-016-2 variant", 367, Mapper367_Init ) INES_BOARD( "Yung-08", 368, Mapper368_Init ) INES_BOARD( "N49C-300", 369, Mapper369_Init ) INES_BOARD( "Golden Mario Party II - Around the World 6-in-1", 370, Mapper370_Init ) diff --git a/src/ines.h b/src/ines.h index 8121042..939a949 100644 --- a/src/ines.h +++ b/src/ines.h @@ -286,6 +286,7 @@ void Mapper359_Init(CartInfo *); void Mapper360_Init(CartInfo *); void Mapper362_Init(CartInfo *); void Mapper364_Init(CartInfo *); +void Mapper367_Init(CartInfo *); void Mapper368_Init(CartInfo *); void Mapper369_Init(CartInfo *); void Mapper370_Init(CartInfo *);