Update mapper 059/060

Excerpt from nesdev:

NESten's Mapper DLL v1.0 contained an incorrect implementation of T3H53 as iNES mapper 059 and UNIF mapper BMC-T3H53. The UNIF implementation was improved in NESten's Mapper DLL v1.2 while the iNES implementation was not, causing confusion about what kind of cartridge the unimproved mapper 59 was supposed to be. As Nintendulator's mapper DLL is based on NESten's mapper DLL, this was carried over to Nintendulator. Presumably as a result of this confusion, FCEUX and others put the correct implementation of T3H53 at INES Mapper 060, displacing the "Reset-based NROM-128 4-in-1" in the process.

With that said above, im following nesdev's notes and change the
following:

- Reassign Mapper 60 as Mapper 59.
- Add BMC-T3H53, a UNIF cart using the same UNIF-board D1038 which is
  assigned as iNES Mapper 59
- Add the Reset-Based NRON-128 mapper, Mapper 60
This commit is contained in:
negativeExponent
2020-10-22 05:32:16 +08:00
parent 168515f6e3
commit 5538bbedd9
5 changed files with 64 additions and 4 deletions

56
src/boards/60.c Normal file
View File

@@ -0,0 +1,56 @@
/* FCEUmm - NES/Famicom Emulator
*
* Copyright notice for this file:
* Copyright (C) 2020 negativeExponent
*
* 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 the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* 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.
*/
#include "mapinc.h"
static uint8 game = 0;
static void Sync(void)
{
setchr8(game);
setprg16(0x8000, game);
setprg16(0xC000, game);
}
static void M60Reset(void)
{
game = (game + 1) & 3;
Sync();
}
static void M60Power(void)
{
game = 0;
Sync();
SetReadHandler(0x8000, 0xFFFF, CartBR);
SetWriteHandler(0x8000, 0xFFFF, CartBW);
}
static void StateRestore(int version) {
Sync();
}
void Mapper60_Init(CartInfo *info)
{
info->Power = M60Power;
info->Reset = M60Reset;
GameStateRestore = StateRestore;
AddExState(&game, 1, 0, "GAME");
}

View File

@@ -166,7 +166,8 @@ void BMCGK192_Init(CartInfo *info) {
/*------------------ Map 059 ---------------------------*/
/* One more forgotten mapper */
static void M59Sync(void) {
/* Formerly, an incorrect implementation of BMC-T3H53 */
/*static void M59Sync(void) {
setprg32(0x8000, (latche >> 4) & 7);
setchr8(latche & 0x7);
setmirror((latche >> 3) & 1);
@@ -181,7 +182,7 @@ static DECLFR(M59Read) {
void Mapper59_Init(CartInfo *info) {
Latch_Init(info, M59Sync, M59Read, 0x0000, 0x8000, 0xFFFF, 0);
}
}*/
/*------------------ Map 061 ---------------------------*/
static void M61Sync(void) {

View File

@@ -479,8 +479,9 @@ INES_BOARD_BEGIN()
INES_BOARD( "UNLKS202", 56, UNLKS202_Init )
INES_BOARD( "SIMBPLE BMC PIRATE A", 57, Mapper57_Init )
INES_BOARD( "SIMBPLE BMC PIRATE B", 58, BMCGK192_Init )
INES_BOARD( "", 59, Mapper59_Init ) /* Check this out */
INES_BOARD( "SIMBPLE BMC PIRATE C", 60, BMCD1038_Init )
/* INES_BOARD( "", 59, Mapper59_Init ) */ /* Check this out, update 2020-10-21 - formerly an incorrect implementation of T3H53 */
INES_BOARD( "BMC T3H53/D1038", 59, BMCD1038_Init )
INES_BOARD( "Reset-based NROM-128 ", 60, Mapper60_Init )
INES_BOARD( "20-in-1 KAISER Rev. A", 61, Mapper61_Init )
INES_BOARD( "700-in-1", 62, Mapper62_Init )
INES_BOARD( "", 63, Mapper63_Init )

View File

@@ -94,6 +94,7 @@ void Mapper51_Init(CartInfo *);
void Mapper52_Init(CartInfo *);
void Mapper57_Init(CartInfo *);
void Mapper59_Init(CartInfo *);
void Mapper60_Init(CartInfo *);
void Mapper61_Init(CartInfo *);
void Mapper62_Init(CartInfo *);
void Mapper63_Init(CartInfo *);

View File

@@ -446,6 +446,7 @@ static BMAPPING bmap[] = {
{ "CNROM", 3, CNROM_Init, 0 },
{ "CPROM", 13, CPROM_Init, BMCFLAG_16KCHRR },
{ "D1038", 59, BMCD1038_Init, 0 },
{ "T3H53", 59, BMCD1038_Init, 0 },
{ "DANCE", 256, UNLOneBus_Init, 0 },
{ "DANCE2000", 518, UNLD2000_Init, 0 },
{ "DREAMTECH01", 521, DreamTech01_Init, 0 },