Added mapper 441 submapper 1.

This commit is contained in:
NewRisingSun
2025-12-14 17:26:03 +01:00
parent 78b9d810e1
commit 0caa462190

View File

@@ -18,14 +18,17 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/ */
/* 850335C PCB */ /* 850335C PCB (submapper 0)
840415C/43-170 PCB (submapper 1) */
#include "mapinc.h" #include "mapinc.h"
#include "mmc3.h" #include "mmc3.h"
static uint8 submapper;
static void Mapper441_PRGWrap(uint32 A, uint8 V) { static void Mapper441_PRGWrap(uint32 A, uint8 V) {
int prgAND =EXPREGS[0] &0x08? 0x0F: 0x1F; int prgAND = EXPREGS[0] &0x08? 0x0F: 0x1F;
int prgOR =EXPREGS[0] <<4 &0x30; int prgOR = EXPREGS[0] <<4 &0x30;
if (EXPREGS[0] &0x04) { if (EXPREGS[0] &0x04) {
if (~A &0x4000) { if (~A &0x4000) {
setprg8(A, ~2 &V &prgAND | prgOR &~prgAND); setprg8(A, ~2 &V &prgAND | prgOR &~prgAND);
@@ -36,14 +39,17 @@ static void Mapper441_PRGWrap(uint32 A, uint8 V) {
} }
static void Mapper441_CHRWrap(uint32 A, uint8 V) { static void Mapper441_CHRWrap(uint32 A, uint8 V) {
int chrAND =EXPREGS[0] &0x40? 0x7F: 0xFF; int chrAND = EXPREGS[0] &0x40? 0x7F: 0xFF;
int chrOR =EXPREGS[0] <<3 &0x180; int chrOR = EXPREGS[0] <<3 &0x180;
setchr1(A, V &chrAND | chrOR &~chrAND); setchr1(A, V &chrAND | chrOR &~chrAND);
} }
static DECLFW(Mapper441_Write) { static DECLFW(Mapper441_Write) {
if (~EXPREGS[0] &0x80) { if (~EXPREGS[0] &0x80) {
EXPREGS[0] =V; if (submapper == 1)
EXPREGS[0] = V &~4 | A &4;
else
EXPREGS[0] = V;
FixMMC3PRG(MMC3_cmd); FixMMC3PRG(MMC3_cmd);
FixMMC3CHR(MMC3_cmd); FixMMC3CHR(MMC3_cmd);
} }
@@ -51,17 +57,18 @@ static DECLFW(Mapper441_Write) {
} }
static void Mapper441_Reset(void) { static void Mapper441_Reset(void) {
EXPREGS[0] =0; EXPREGS[0] = 0;
MMC3RegReset(); MMC3RegReset();
} }
static void Mapper441_Power(void) { static void Mapper441_Power(void) {
EXPREGS[0] =0; EXPREGS[0] = 0;
GenMMC3Power(); GenMMC3Power();
SetWriteHandler(0x6000, 0x7FFF, Mapper441_Write); SetWriteHandler(0x6000, 0x7FFF, Mapper441_Write);
} }
void Mapper441_Init(CartInfo *info) { void Mapper441_Init(CartInfo *info) {
submapper = info->submapper;
GenMMC3_Init(info, 256, 256, 8, 0); GenMMC3_Init(info, 256, 256, 8, 0);
cwrap = Mapper441_CHRWrap; cwrap = Mapper441_CHRWrap;
pwrap = Mapper441_PRGWrap; pwrap = Mapper441_PRGWrap;