diff --git a/src/boards/mmc3.c b/src/boards/mmc3.c index ae21227..988b742 100644 --- a/src/boards/mmc3.c +++ b/src/boards/mmc3.c @@ -21,7 +21,7 @@ */ /* Code for emulating iNES mappers 4,12,44,45,47,49,52,74,114,115,116,118, - 119,165,205,245,249,250,254,361,366,367,555 + 119,165,205,245,249,250,254,361,366,367,373,555 */ #include "mapinc.h" @@ -517,6 +517,18 @@ static void M45PW(uint32 A, uint8 V) { SetReadHandler(0x8000, 0xFFFF, CartBR); } +static void M373PW(uint32 A, uint8 V) { + int prgAND =~EXPREGS[3] &0x3F; + int prgOR =EXPREGS[1] | EXPREGS[2] <<2 &0x300; + if (EXPREGS[2] &0x20) { + if (A <0xC000) { + setprg8(A, V &prgAND | prgOR &~prgAND); + setprg8(A | 0x4000, V &prgAND | prgOR &~prgAND | 0x02); + } + } else + setprg8(A, V &prgAND | prgOR &~prgAND); +} + static DECLFW(M45Write) { if (EXPREGS[3] & 0x40) { WRAM[A - 0x6000] = V; @@ -561,6 +573,15 @@ void Mapper45_Init(CartInfo *info) { AddExState(EXPREGS, 5, 0, "EXPR"); } +void Mapper373_Init(CartInfo *info) { + GenMMC3_Init(info, 512, 256, 8, info->battery); + cwrap = M45CW; + pwrap = M373PW; + info->Reset = M45Reset; + info->Power = M45Power; + AddExState(EXPREGS, 5, 0, "EXPR"); +} + /* ---------------------------- Mapper 47 ------------------------------- */ static void M47PW(uint32 A, uint8 V) { diff --git a/src/ines.c b/src/ines.c index 8bfe84c..b9b0c49 100644 --- a/src/ines.c +++ b/src/ines.c @@ -779,6 +779,7 @@ INES_BOARD_BEGIN() INES_BOARD( "N49C-300", 369, Mapper369_Init ) INES_BOARD( "Golden Mario Party II - Around the World 6-in-1", 370, Mapper370_Init ) INES_BOARD( "MMC3 PIRATE SFC-12", 372, Mapper372_Init ) + INES_BOARD( "MMC3 PIRATE SFC-13", 373, Mapper373_Init ) INES_BOARD( "95/96 Super HiK 4-in-1", 374, Mapper374_Init ) INES_BOARD( "135-in-1", 375, Mapper375_Init ) INES_BOARD( "YY841155C", 376, Mapper376_Init ) diff --git a/src/ines.h b/src/ines.h index 939a949..db944a1 100644 --- a/src/ines.h +++ b/src/ines.h @@ -291,6 +291,7 @@ void Mapper368_Init(CartInfo *); void Mapper369_Init(CartInfo *); void Mapper370_Init(CartInfo *); void Mapper372_Init(CartInfo *); +void Mapper373_Init(CartInfo *); void Mapper374_Init(CartInfo *); void Mapper375_Init(CartInfo *); void Mapper376_Init(CartInfo *);