From d4fa032402cb01665015d3c8c769ee707fc5b3c2 Mon Sep 17 00:00:00 2001 From: Jose Ernesto Ramirez Ramirez Date: Sat, 27 Jun 2015 18:04:58 -0500 Subject: [PATCH] mmc5 fix mmc5 fix taken from fceux source code to handle correctly the register $5130 in fceumm. Now we can play games like Legend of Link nes hack that need this fix. --- src/boards/mmc5.c | 6 ++++-- src/fceu.h | 1 + src/ppu.c | 1 + src/pputile.h | 1 + 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/boards/mmc5.c b/src/boards/mmc5.c index f0258f2..593d51f 100644 --- a/src/boards/mmc5.c +++ b/src/boards/mmc5.c @@ -369,7 +369,7 @@ static DECLFW(Mapper5_write) { case 0x5126: case 0x5127: mmc5ABMode = 0; - CHRBanksA[A & 7] = V; + CHRBanksA[A & 7] = V | ((MMC50x5130 & 0x3) << 8); MMC5CHRA(); break; case 0x5128: @@ -377,9 +377,10 @@ static DECLFW(Mapper5_write) { case 0x512a: case 0x512b: mmc5ABMode = 1; - CHRBanksB[A & 3] = V; + CHRBanksB[A & 3] = V | ((MMC50x5130 & 0x3) << 8); MMC5CHRB(); break; + case 0x5130: MMC50x5130 = V; break; case 0x5200: MMC5HackSPMode = V; break; case 0x5201: MMC5HackSPScroll = (V >> 3) & 0x1F; break; case 0x5202: MMC5HackSPPage = V & 0x3F; break; @@ -756,6 +757,7 @@ static void GenMMC5_Init(CartInfo *info, int wsize, int battery) { AddExState(&MMC5HackSPMode, 1, 0, "SPLM"); AddExState(&MMC5HackSPScroll, 1, 0, "SPLS"); AddExState(&MMC5HackSPPage, 1, 0, "SPLP"); + AddExState(&MMC50x5130, 1, 0, "5130"); AddExState(MMC5_StateRegs, ~0, 0, 0); MMC5WRAMsize = wsize / 8; diff --git a/src/fceu.h b/src/fceu.h index 6d4f2d8..6f08aac 100644 --- a/src/fceu.h +++ b/src/fceu.h @@ -32,6 +32,7 @@ extern int MMC5Hack, PEC586Hack; extern uint8 *MMC5HackVROMPTR; extern uint8 MMC5HackCHRMode; extern uint8 MMC5HackSPMode; +extern uint8 MMC50x5130; extern uint8 MMC5HackSPScroll; extern uint8 MMC5HackSPPage; diff --git a/src/ppu.c b/src/ppu.c index 4541cac..cc59523 100644 --- a/src/ppu.c +++ b/src/ppu.c @@ -100,6 +100,7 @@ uint8 *MMC5HackExNTARAMPtr = 0; uint8 *MMC5HackVROMPTR = 0; uint8 MMC5HackCHRMode = 0; uint8 MMC5HackSPMode = 0; +uint8 MMC50x5130 = 0; uint8 MMC5HackSPScroll = 0; uint8 MMC5HackSPPage = 0; diff --git a/src/pputile.h b/src/pputile.h index 4b99144..a157bef 100644 --- a/src/pputile.h +++ b/src/pputile.h @@ -74,6 +74,7 @@ pshift[1] <<= 8; #ifdef PPUT_MMC5CHR1 C = MMC5HackVROMPTR; C += (((MMC5HackExNTARAMPtr[RefreshAddr & 0x3ff]) & 0x3f & MMC5HackVROMMask) << 12) + (vadr & 0xfff); + C += (MMC50x5130 & 0x3) << 18; #elif defined(PPUT_MMC5) C = MMC5BGVRAMADR(vadr); #else