From a1ca113b3444523c656fd1016a29f2f54a75c017 Mon Sep 17 00:00:00 2001 From: negativeExponent Date: Mon, 14 Feb 2022 16:11:58 +0800 Subject: [PATCH] m208: Add support for submapper 1 --- src/boards/208.c | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/src/boards/208.c b/src/boards/208.c index 95230a2..5088e7b 100644 --- a/src/boards/208.c +++ b/src/boards/208.c @@ -2,6 +2,7 @@ * * Copyright notice for this file: * Copyright (C) 2005 CaH4e3 + * Copyright (C) 2022 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 @@ -17,10 +18,17 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ + + /* 2022-2-14 + * - add support for submapper 1, Mortal Kombat (JJ-01) (Ch) [!] + * - add mirroring + */ #include "mapinc.h" #include "mmc3.h" +static uint8 submapper; + static const uint8 lut[256] = { 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x49, 0x19, 0x09, 0x59, 0x49, 0x19, 0x09, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x51, 0x41, 0x11, 0x01, 0x51, 0x41, 0x11, 0x01, @@ -41,11 +49,21 @@ static const uint8 lut[256] = { }; static void M208PW(uint32 A, uint8 V) { - setprg32(0x8000, EXPREGS[5]); + if (submapper == 1) + setprg32(0x8000, DRegBuf[6] >> 2); + else + setprg32(0x8000, (EXPREGS[5] & 0x1) | ((EXPREGS[5] >> 3) & 0x2)); +} + +static void M208MW(uint8 V) { + if (submapper == 1) + setmirror((V & 1) ^ 1); + else + setmirror(((EXPREGS[5] >> 5) & 1) ^ 1); } static DECLFW(M208Write) { - EXPREGS[5] = (V & 0x1) | ((V >> 3) & 0x2); + EXPREGS[5] = V; FixMMC3PRG(MMC3_cmd); } @@ -61,7 +79,7 @@ static DECLFR(M208ProtRead) { } static void M208Power(void) { - EXPREGS[5] = 3; + EXPREGS[5] = 0x11; GenMMC3Power(); SetWriteHandler(0x4800, 0x4fff, M208Write); SetWriteHandler(0x6800, 0x6fff, M208Write); @@ -73,6 +91,8 @@ static void M208Power(void) { void Mapper208_Init(CartInfo *info) { GenMMC3_Init(info, 128, 256, 0, 0); pwrap = M208PW; + mwrap = M208MW; info->Power = M208Power; AddExState(EXPREGS, 6, 0, "EXPR"); + submapper = info->submapper; }