From 503dd5249b97d460d92160a3b9df1328af8e4ba5 Mon Sep 17 00:00:00 2001 From: retro-wertz Date: Mon, 24 Jun 2019 06:26:44 +0800 Subject: [PATCH] Add BMC-JC-016-2 --- src/boards/mmc3.c | 21 +++++++++++++++------ src/unif.c | 2 ++ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/boards/mmc3.c b/src/boards/mmc3.c index 9ac6f86..90a34b4 100644 --- a/src/boards/mmc3.c +++ b/src/boards/mmc3.c @@ -1169,20 +1169,29 @@ void Mapper198_Init(CartInfo *info) { } /* ---------------------------- Mapper 205 ------------------------------ */ -/* https://wiki.nesdev.com/w/index.php/INES_Mapper_205 */ +/* UNIF boardname BMC-JC-016-2 +https://wiki.nesdev.com/w/index.php/INES_Mapper_205 */ +static uint8 block[] = {0, 0, 1, 2}; static void M205PW(uint32 A, uint8 V) { - setprg8(A, EXPREGS[0] & 0x30 | (V & (!(EXPREGS[0] & 0xC0) ? 0x1F : 0x0F))); + uint8 bank = V & ((EXPREGS[0] & 0x02) ? 0x0F : 0x1F); + if (PRGptr[1]) + setprg8r(block[EXPREGS[0]], A, bank); + else + setprg8(A, EXPREGS[0] << 4 | bank); } static void M205CW(uint32 A, uint8 V) { - uint16 reg = (uint16)EXPREGS[0] & 0x30; - setchr1(A, (reg << 3) | V); + uint8 bank = V & ((EXPREGS[0] & 0x02) ? 0x7F : 0xFF); + if (PRGptr[1]) + setchr1r(block[EXPREGS[0]], A, bank); + else + setchr1(A, (EXPREGS[0] << 7) | bank); } static DECLFW(M205Write0) { if (EXPREGS[1] == 0) { - EXPREGS[0] = (V << 4) & 0x30; + EXPREGS[0] = V & 0x03; EXPREGS[1] = A & 0x80; FixMMC3PRG(MMC3_cmd); FixMMC3CHR(MMC3_cmd); @@ -1212,7 +1221,7 @@ static void M205Power(void) { } void Mapper205_Init(CartInfo *info) { - GenMMC3_Init(info, 128, 128, 8, 0); + GenMMC3_Init(info, 256, 128, 8, 0); pwrap = M205PW; cwrap = M205CW; info->Power = M205Power; diff --git a/src/unif.c b/src/unif.c index c969909..68403a6 100644 --- a/src/unif.c +++ b/src/unif.c @@ -493,6 +493,8 @@ static BMAPPING bmap[] = { { "KS106C", BMCKS106C_Init, 0 }, { "900218", BTL900218_Init, 0 }, + { "JC-016-2", Mapper205_Init, 0 }, + #ifdef COPYFAMI { "COPYFAMI_MMC3", MapperCopyFamiMMC3_Init, 0 }, { "COPYFAMI", MapperCopyFami_Init, 0 },