From 9dcb88a88860644f9b8d9ff9ce87c34178648957 Mon Sep 17 00:00:00 2001 From: zeromus Date: Thu, 11 Jun 2009 06:27:37 +0000 Subject: [PATCH] support mmc5 reg $5130 --- src/boards/mmc5.cpp | 12 ++++++++---- src/fceu.h | 1 + src/ppu.cpp | 2 ++ src/pputile.inc | 1 + 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/boards/mmc5.cpp b/src/boards/mmc5.cpp index 771be44a..125e5622 100644 --- a/src/boards/mmc5.cpp +++ b/src/boards/mmc5.cpp @@ -50,7 +50,7 @@ static INLINE void MMC5BGVROM_BANK8(uint32 V) {if(CHRptr[0]){V&=CHRmask8[0];MMC5 static uint8 PRGBanks[4]; static uint8 WRAMPage; -static uint8 CHRBanksA[8], CHRBanksB[4]; +static uint16 CHRBanksA[8], CHRBanksB[4]; static uint8 WRAMMaskEnable[2]; uint8 mmc5ABMode; /* A=0, B=1 */ @@ -352,7 +352,8 @@ static DECLFW(Mapper5_write) if(A>=0x5120&&A<=0x5127) { mmc5ABMode = 0; - CHRBanksA[A&7]=V; + CHRBanksA[A&7]=V | ((MMC50x5130&0x3)<<8); //if we had a test case for this then we could test this, but it hasnt been verified + //CHRBanksA[A&7]=V; MMC5CHRA(); } else switch(A) @@ -416,6 +417,8 @@ static DECLFW(Mapper5_write) } ATFill=V; break; + case 0x5130: MMC50x5130=V;break; + case 0x5200: MMC5HackSPMode=V;break; case 0x5201: MMC5HackSPScroll=(V>>3)&0x1F;break; case 0x5202: MMC5HackSPPage=V&0x3F;break; @@ -804,8 +807,8 @@ static void GenMMC5Reset(void) static SFORMAT MMC5_StateRegs[]={ { PRGBanks, 4, "PRGB"}, - { CHRBanksA, 8, "CHRA"}, - { CHRBanksB, 4, "CHRB"}, + { CHRBanksA, 16, "CHRA"}, + { CHRBanksB, 8, "CHRB"}, { &WRAMPage, 1, "WRMP"}, { WRAMMaskEnable, 2, "WRME"}, { &mmc5ABMode, 1, "ABMD"}, @@ -844,6 +847,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"); MMC5WRAMsize=wsize/8; BuildWRAMSizeTable(); diff --git a/src/fceu.h b/src/fceu.h index 0611bc4c..83e2fdfb 100644 --- a/src/fceu.h +++ b/src/fceu.h @@ -38,6 +38,7 @@ extern int MMC5Hack; extern uint8 *MMC5HackVROMPTR; extern uint8 MMC5HackCHRMode; extern uint8 MMC5HackSPMode; +extern uint8 MMC50x5130; extern uint8 MMC5HackSPScroll; extern uint8 MMC5HackSPPage; diff --git a/src/ppu.cpp b/src/ppu.cpp index 6d9965e4..60bb7d35 100644 --- a/src/ppu.cpp +++ b/src/ppu.cpp @@ -261,6 +261,7 @@ uint8 *MMC5HackExNTARAMPtr=0; uint8 *MMC5HackVROMPTR=0; uint8 MMC5HackCHRMode=0; uint8 MMC5HackSPMode=0; +uint8 MMC50x5130=0; uint8 MMC5HackSPScroll=0; uint8 MMC5HackSPPage=0; @@ -320,6 +321,7 @@ uint8* FCEUPPU_GetCHR(uint32 vadr, uint32 refreshaddr) { if(MMC5HackCHRMode==1) { uint8 *C = MMC5HackVROMPTR; C += (((MMC5HackExNTARAMPtr[refreshaddr & 0x3ff]) & 0x3f & MMC5HackVROMMask) << 12) + (vadr & 0xfff); + C += (MMC50x5130&0x3)<<18; //11-jun-2009 for kuja_killer return C; } else { return MMC5BGVRAMADR(vadr); diff --git a/src/pputile.inc b/src/pputile.inc index 7eacb593..733b1d64 100644 --- a/src/pputile.inc +++ b/src/pputile.inc @@ -76,6 +76,7 @@ pshift[1]<<=8; C = MMC5HackVROMPTR; C += (((MMC5HackExNTARAMPtr[RefreshAddr & 0x3ff]) & 0x3f & MMC5HackVROMMask) << 12) + (vadr & 0xfff); + C += (MMC50x5130&0x3)<<18; //11-jun-2009 for kuja_killer #elif defined(PPUT_MMC5) C=MMC5BGVRAMADR(vadr); #else