diff --git a/src/boards/199.c b/src/boards/199.c index c6cd39f..16beb17 100644 --- a/src/boards/199.c +++ b/src/boards/199.c @@ -1,7 +1,7 @@ -/* FCE Ultra - NES/Famicom Emulator +/* FCEUmm - NES/Famicom Emulator * * Copyright notice for this file: - * Copyright (C) 2006 CaH4e3 + * Copyright (C) 2022 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,83 +16,24 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - * Dragon Ball Z 2 - Gekishin Freeza! (C) - * Dragon Ball Z Gaiden - Saiya Jin Zetsumetsu Keikaku (C) - * San Guo Zhi 2 (C) - * */ - #include "mapinc.h" #include "mmc3.h" -static uint8 *CHRRAM = NULL; -static uint32 CHRRAMSIZE; - -static void M199PW(uint32 A, uint8 V) { - setprg8(A, V); - setprg8(0xC000, EXPREGS[0]); - setprg8(0xE000, EXPREGS[1]); +static void Mapper199_CHRWrap(uint32 A, uint8 V) { + setchr8(0); /* Unbanked CHR RAM */ } -static void M199CW(uint32 A, uint8 V) { - setchr1r((V < 8) ? 0x10 : 0x00, A, V); - setchr1r((DRegBuf[0] < 8) ? 0x10 : 0x00, 0x0000, DRegBuf[0]); - setchr1r((EXPREGS[2] < 8) ? 0x10 : 0x00, 0x0400, EXPREGS[2]); - setchr1r((DRegBuf[1] < 8) ? 0x10 : 0x00, 0x0800, DRegBuf[1]); - setchr1r((EXPREGS[3] < 8) ? 0x10 : 0x00, 0x0c00, EXPREGS[3]); -} - -static void M199MW(uint8 V) { -/* FCEU_printf("%02x\n",V); */ - switch (V & 3) { - case 0: setmirror(MI_V); break; - case 1: setmirror(MI_H); break; - case 2: setmirror(MI_0); break; - case 3: setmirror(MI_1); break; - } -} - -static DECLFW(M199Write) { - if ((A == 0x8001) && (MMC3_cmd & 8)) { - EXPREGS[MMC3_cmd & 3] = V; - FixMMC3PRG(MMC3_cmd); - FixMMC3CHR(MMC3_cmd); - } else - if (A < 0xC000) - MMC3_CMDWrite(A, V); - else - MMC3_IRQWrite(A, V); -} - -static void M199Power(void) { - EXPREGS[0] = ~1; - EXPREGS[1] = ~0; - EXPREGS[2] = 1; - EXPREGS[3] = 3; +static void Mapper199_Power(void) { GenMMC3Power(); - SetWriteHandler(0x8000, 0xFFFF, M199Write); -} - -static void M199Close(void) { - GenMMC3Close(); - if (CHRRAM) - FCEU_gfree(CHRRAM); - CHRRAM = NULL; + setprg4r(0x10, 0x5000, 2); + SetWriteHandler(0x5000, 0x5FFF, CartBW); + SetReadHandler(0x5000, 0x5FFF, CartBR); } void Mapper199_Init(CartInfo *info) { - GenMMC3_Init(info, 512, 256, 8, info->battery); - cwrap = M199CW; - pwrap = M199PW; - mwrap = M199MW; - info->Power = M199Power; - info->Close = M199Close; - - CHRRAMSIZE = 8192; - CHRRAM = (uint8*)FCEU_gmalloc(CHRRAMSIZE); - SetupCartCHRMapping(0x10, CHRRAM, CHRRAMSIZE, 1); - AddExState(CHRRAM, CHRRAMSIZE, 0, "CHRR"); - - AddExState(EXPREGS, 4, 0, "EXPR"); + GenMMC3_Init(info, 1024, 0, 16, info->battery); + cwrap = Mapper199_CHRWrap; + info->Power = Mapper199_Power; + info->Reset = MMC3RegReset; } diff --git a/src/boards/addrlatch.c b/src/boards/addrlatch.c index dd67b51..a989010 100644 --- a/src/boards/addrlatch.c +++ b/src/boards/addrlatch.c @@ -28,6 +28,7 @@ static readfunc defread; static uint8 *WRAM = NULL; static uint32 WRAMSIZE; static uint32 hasBattery; +static uint32 submapper = 0; static DECLFW(LatchWrite) { latche = A; @@ -267,7 +268,6 @@ void Mapper200_Init(CartInfo *info) { /* 2020-3-6 - Support for 21-in-1 (CF-043) (2006-V) (Unl) [p1].nes which has mixed mirroring * found at the time labeled as submapper 15 * 0x05658DED 128K PRG, 32K CHR */ -static uint32 submapper = 0; static void M201Sync(void) { if (latche & 8 || submapper == 15) { setprg32(0x8000, latche & 3); @@ -281,8 +281,7 @@ static void M201Sync(void) { } void Mapper201_Init(CartInfo *info) { - submapper = 0; - if (info->submapper > 0) submapper = info->submapper; + submapper = info->submapper; Latch_Init(info, M201Sync, NULL, 0xFFFF, 0x8000, 0xFFFF, 0); } @@ -398,7 +397,7 @@ static void M227Sync(void) { setprg16(0xC000, p | 7); } else { setprg16(0x8000, p); - setprg16(0xC000, p & 0x38); + setprg16(0xC000, submapper ==2? 0: p & 0x38); } } } @@ -415,6 +414,7 @@ static void M227Sync(void) { } void Mapper227_Init(CartInfo *info) { + submapper =info->submapper; Latch_Init(info, M227Sync, NULL, 0x0000, 0x8000, 0xFFFF, 1); } diff --git a/src/ines.c b/src/ines.c index 7a791fe..aea8215 100644 --- a/src/ines.c +++ b/src/ines.c @@ -583,7 +583,7 @@ INES_BOARD_BEGIN() INES_BOARD( "BANDAI 24C01", 159, Mapper159_Init ) /* Different type of EEPROM on the bandai board */ INES_BOARD( "SA009", 160, SA009_Init ) /* INES_BOARD( "", 161, Mapper161_Init ) */ - INES_BOARD( "", 162, Mapper162_Init ) + INES_BOARD( "Waixing FS304", 162, Mapper162_Init ) INES_BOARD( "", 163, Mapper163_Init ) INES_BOARD( "", 164, Mapper164_Init ) INES_BOARD( "", 165, Mapper165_Init ) @@ -599,7 +599,7 @@ INES_BOARD_BEGIN() INES_BOARD( "", 175, Mapper175_Init ) INES_BOARD( "BMCFK23C", 176, Mapper176_Init ) INES_BOARD( "", 177, Mapper177_Init ) - INES_BOARD( "", 178, Mapper178_Init ) + INES_BOARD( "Waixing FS305", 178, Mapper178_Init ) /* INES_BOARD( "", 179, Mapper179_Init ) */ INES_BOARD( "", 180, Mapper180_Init ) INES_BOARD( "", 181, Mapper181_Init ) @@ -613,21 +613,21 @@ INES_BOARD_BEGIN() INES_BOARD( "", 189, Mapper189_Init ) INES_BOARD( "", 190, Mapper190_Init ) INES_BOARD( "", 191, Mapper191_Init ) - INES_BOARD( "TW MMC3+VRAM Rev. B", 192, Mapper192_Init ) + INES_BOARD( "Waixing FS308", 192, Mapper192_Init ) INES_BOARD( "NTDEC TC-112", 193, Mapper193_Init ) /* War in the Gulf */ INES_BOARD( "TW MMC3+VRAM Rev. C", 194, Mapper194_Init ) - INES_BOARD( "TW MMC3+VRAM Rev. D", 195, Mapper195_Init ) + INES_BOARD( "Waixing FS303", 195, Mapper195_Init ) INES_BOARD( "", 196, Mapper196_Init ) INES_BOARD( "", 197, Mapper197_Init ) INES_BOARD( "TW MMC3+VRAM Rev. E", 198, Mapper198_Init ) - INES_BOARD( "", 199, Mapper199_Init ) + INES_BOARD( "Waixing FS309", 199, Mapper199_Init ) INES_BOARD( "", 200, Mapper200_Init ) INES_BOARD( "21-in-1", 201, Mapper201_Init ) INES_BOARD( "", 202, Mapper202_Init ) INES_BOARD( "", 203, Mapper203_Init ) INES_BOARD( "", 204, Mapper204_Init ) INES_BOARD( "BMC 15-in-1/3-in-1", 205, Mapper205_Init ) - INES_BOARD( "NAMCOT 108 Rev. C", 206, Mapper206_Init ) /* Deprecated, Used to be "DEIROM" whatever it means, but actually simple version of MMC3 */ + INES_BOARD( "Nintendo DE(1)ROM", 206, Mapper206_Init ) INES_BOARD( "TAITO X1-005 Rev. B", 207, Mapper207_Init ) INES_BOARD( "", 208, Mapper208_Init ) INES_BOARD( "HUMMER/JY BOARD", 209, Mapper209_Init )