From b02fa46cb131a95a56b8a3940d15b012f68d1dda Mon Sep 17 00:00:00 2001 From: NewRisingSun <8vytz1+dhp372pv94ebg@sharklasers.com> Date: Wed, 26 May 2021 20:36:06 +0200 Subject: [PATCH] Add support for Jncota variant, mapper 523 --- src/boards/fk23c.c | 49 +++++++++++++++++++++++++++++++++------------- src/ines.c | 1 + src/ines.h | 1 + 3 files changed, 37 insertions(+), 14 deletions(-) diff --git a/src/boards/fk23c.c b/src/boards/fk23c.c index cda8cf8..2a4e8f2 100644 --- a/src/boards/fk23c.c +++ b/src/boards/fk23c.c @@ -21,7 +21,7 @@ /* Mappers: 176 - Standard - 523 - Jncota KT-xxx (1 KiB->2 KiB, 2 KiB->4 KiB CHR, hard-wired nametable mirroring) + 523 - Jncota KT-xxx, re-release of 封神榜꞉ 伏魔三太子: 1 KiB->2 KiB, 2 KiB->4 KiB CHR, hard-wired nametable mirroring) Submappers: 0 - Standard @@ -101,15 +101,22 @@ static void cwrap(uint32 A, uint32 V) { int bank = 0; - /* some workaround for chr rom / ram access */ - if (!VROM_size) - bank = 0; - else if (CHRRAMSIZE && fk23_regs[0] & 0x20) - bank = 0x10; - - if (CHR_MIXED && V < 8) bank = 0x10; /* first 8K of chr bank is RAM */ - - setchr1r(bank, A, V); + if (jncota523) + { + if (~A &0x0400) setchr2r(bank, A, V); + } + else + { + /* some workaround for chr rom / ram access */ + if (!VROM_size) + bank = 0; + else if (CHRRAMSIZE && fk23_regs[0] & 0x20) + bank = 0x10; + + if (CHR_MIXED && V < 8) bank = 0x10; /* first 8K of chr bank is RAM */ + + setchr1r(bank, A, V); + } } static void SyncCHR(void) @@ -241,12 +248,15 @@ static void SyncWRAM(void) static void SyncMIR(void) { + if (jncota523) /* Jncota board has hard-wired mirroring */ + return; + else switch (mmc3_mirr & (subType == 2? 0x03 : 0x01)) { - case 0: setmirror(MI_V); break; - case 1: setmirror(MI_H); break; - case 2: setmirror(MI_0); break; - case 3: setmirror(MI_1); break; + case 0: setmirror(MI_V); break; + case 1: setmirror(MI_H); break; + case 2: setmirror(MI_0); break; + case 3: setmirror(MI_1); break; } } @@ -517,6 +527,7 @@ void BMCFK23C_Init(CartInfo *info) { WRAMSIZE = 8 * 1024; } + jncota523 = 0; GenBMCFK23C_Init(info); } @@ -530,6 +541,7 @@ void BMCFK23CA_Init(CartInfo *info) WRAMSIZE = 8 * 1024; + jncota523 = 0; GenBMCFK23C_Init(info); } @@ -539,6 +551,7 @@ void Super24_Init(CartInfo *info) { if (!UNIFchrrama) CHRRAMSIZE = 8 * 1024; + jncota523 = 0; GenBMCFK23C_Init(info); } @@ -551,5 +564,13 @@ void WAIXINGFS005_Init(CartInfo *info) WRAMSIZE = 32 * 1024; + jncota523 = 0; + GenBMCFK23C_Init(info); +} + +void Mapper523_Init(CartInfo *info) +{ + jncota523 = 1; + WRAMSIZE = 8 * 1024; GenBMCFK23C_Init(info); } diff --git a/src/ines.c b/src/ines.c index 449cc2d..8f299c1 100644 --- a/src/ines.c +++ b/src/ines.c @@ -793,6 +793,7 @@ INES_BOARD_BEGIN() INES_BOARD( "EH8813A", 519, UNLEH8813A_Init ) INES_BOARD( "DREAMTECH01", 521, DreamTech01_Init ) INES_BOARD( "LH10", 522, LH10_Init ) + INES_BOARD( "Jncota KT-???", 523, Mapper523_Init ) INES_BOARD( "900218", 524, BTL900218_Init ) INES_BOARD( "KS7021A", 525, UNLKS7021A_Init ) INES_BOARD( "BJ-56", 526, UNLBJ56_Init ) diff --git a/src/ines.h b/src/ines.h index ad0556e..94912ea 100644 --- a/src/ines.h +++ b/src/ines.h @@ -284,6 +284,7 @@ void Mapper421_Init(CartInfo *); void Mapper422_Init(CartInfo *); void Mapper428_Init(CartInfo *); void Mapper516_Init(CartInfo *); +void Mapper523_Init(CartInfo *); void Mapper533_Init(CartInfo *); void Mapper534_Init(CartInfo *); void Mapper538_Init(CartInfo *);