diff --git a/src/boards/447.c b/src/boards/447.c index a5d23cd..79d516d 100644 --- a/src/boards/447.c +++ b/src/boards/447.c @@ -22,14 +22,9 @@ #include "asic_vrc2and4.h" #include "cartram.h" +static uint8 submapper; static uint8 reg; -static uint8 dip; - -static SFORMAT stateRegs[] = { - { ®, 1, "EXP0" }, - { &dip, 1, "DIPS" }, - { 0 } -}; +static uint8 pad; static void sync () { VRC24_syncPRG(0x0F, reg <<4); @@ -39,21 +34,19 @@ static void sync () { } static int getPRGBank (uint8 bank) { - if (reg &4) { - if (~reg &2) - return VRC24_getPRGBank(bank &1) &~2 | bank &2; - else - return VRC24_getPRGBank(bank &1); + if (reg &0x04) { + int mask = reg &(submapper == 0? 0x02: 0x08) ? 1: 3; + return VRC24_getPRGBank(bank &1) &~mask | bank &mask; } else return VRC24_getPRGBank(bank); } static DECLFR (readPRG) { - return CartBR(reg &8? (A &~3 | dip &3): A); + return CartBR(reg &0x08? (A &~0x03 | pad &0x03): A); } static DECLFW (writeReg) { - if (~reg &1) { + if (~reg &0x01) { reg = A &0xFF; sync(); } @@ -62,21 +55,23 @@ static DECLFW (writeReg) { static void power (void) { reg = 0; - dip = 0; + pad = 0; VRC24_power(); - SetReadHandler(0x8000, 0xFFFF, readPRG); + if (submapper == 0) SetReadHandler(0x8000, 0xFFFF, readPRG); } static void reset (void) { reg = 0; - dip++; - sync(); + pad++; + VRC24_clear(); } void Mapper447_Init (CartInfo *info) { + submapper = info->submapper; VRC4_init(info, sync, 0x04, 0x08, 0, getPRGBank, NULL, NULL, writeReg, NULL ); WRAM_init(info, 2); info->Power = power; info->Reset = reset; - AddExState(stateRegs, ~0, 0, 0); + AddExState(®, 1, 0, "EXPR"); + if (submapper == 0) AddExState(&pad, 1, 0, "DIPS"); } diff --git a/src/ines.c b/src/ines.c index a99c4c8..dbc499e 100644 --- a/src/ines.c +++ b/src/ines.c @@ -878,7 +878,7 @@ INES_BOARD_BEGIN() INES_BOARD( "NC-7000M/NC-8000M", 444, Mapper444_Init ) INES_BOARD( "DG574B", 445, Mapper445_Init ) INES_BOARD( "SMD172B_FPGA", 446, Mapper446_Init ) - INES_BOARD( "KL-06", 447, Mapper447_Init ) + INES_BOARD( "KL-06/GC007", 447, Mapper447_Init ) INES_BOARD( "830768C", 448, Mapper448_Init ) INES_BOARD( "22-in-1 King Series", 449, Mapper449_Init ) INES_BOARD( "晶太 YY841157C", 450, Mapper450_Init )