diff --git a/src/boards/super24.c b/src/boards/super24.c index 5805dcc..012d76b 100644 --- a/src/boards/super24.c +++ b/src/boards/super24.c @@ -24,36 +24,78 @@ static uint8 *CHRRAM = NULL; static int masko8[8] = { 63, 31, 15, 1, 3, 0, 0, 0 }; +static uint8 oldversion = 0; +// this mapper is 176 rip mapper. + static void Super24PW(uint32 A, uint8 V) { - uint32 NV = V & masko8[EXPREGS[0] & 7]; - NV |= (EXPREGS[1] << 1); - setprg8r((NV >> 6) & 0xF, A, NV); + if (oldversion == 1) + { + uint32 NV = V & masko8[EXPREGS[0] & 7]; + NV |= (EXPREGS[1] << 1); + setprg8r((NV >> 6) & 0xF, A, NV); + } + else + { + setprg8(A, (EXPREGS[1] << 1) | (V & masko8[EXPREGS[0] & 0x7])); + } + } static void Super24CW(uint32 A, uint8 V) { - if (EXPREGS[0] & 0x20) - setchr1r(0x10, A, V); - else { - uint32 NV = V | (EXPREGS[2] << 3); - setchr1r((NV >> 9) & 0xF, A, NV); + if (oldversion == 1) + { + if (EXPREGS[0] & 0x20) + setchr1r(0x10, A, V); + else { + uint32 NV = V | (EXPREGS[2] << 3); + setchr1r((NV >> 9) & 0xF, A, NV); + } + } + else + { + if (EXPREGS[0] & 0x20) + setchr1r(0x10, A, (EXPREGS[2] << 3) | V); + else + setchr1r(0x00, A, (EXPREGS[2] << 3) | V); } } static DECLFW(Super24Write) { - switch (A) { - case 0x5FF0: - EXPREGS[0] = V; - FixMMC3PRG(MMC3_cmd); - FixMMC3CHR(MMC3_cmd); - break; - case 0x5FF1: - EXPREGS[1] = V; - FixMMC3PRG(MMC3_cmd); - break; - case 0x5FF2: - EXPREGS[2] = V; - FixMMC3CHR(MMC3_cmd); - break; + if (oldversion == 1) + { + switch (A) { + case 0x5FF0: + EXPREGS[0] = V; + FixMMC3PRG(MMC3_cmd); + FixMMC3CHR(MMC3_cmd); + break; + case 0x5FF1: + EXPREGS[1] = V; + FixMMC3PRG(MMC3_cmd); + break; + case 0x5FF2: + EXPREGS[2] = V; + FixMMC3CHR(MMC3_cmd); + break; + } + } + else + { + switch (A & 0xF003) { + case 0x5000: + EXPREGS[0] = V; + FixMMC3PRG(MMC3_cmd); + FixMMC3CHR(MMC3_cmd); + break; + case 0x5001: + EXPREGS[1] = V; + FixMMC3PRG(MMC3_cmd); + break; + case 0x5002: + EXPREGS[2] = V; + FixMMC3CHR(MMC3_cmd); + break; + } } } @@ -80,7 +122,37 @@ static void Super24Close(void) { } void Super24_Init(CartInfo *info) { - GenMMC3_Init(info, 128, 256, 0, 0); + + if (oldversion == 0) + { + uint32 _PRGsize = 0; + uint32 _CHRsize = 0; + int i = 0; + for (i = 0;i < 4;i++) + { + _PRGsize += PRGsize[i]; + _CHRsize += CHRsize[i]; + } + uint8* _CHRptr = (uint8*)FCEU_gmalloc(_CHRsize); + uint32 _CHROffset = 0; + for (i = 0;i < 4;i++) + { + memcpy(&_CHRptr[_CHROffset], CHRptr[i], CHRsize[i]); + _CHROffset += CHRsize[i]; + } + + uint8* _PRGptr = (uint8*)FCEU_gmalloc(_PRGsize); + uint32 _PRGOffset = 0; + for (i = 0;i < 4;i++) + { + memcpy(&_PRGptr[_PRGOffset], PRGptr[i], PRGsize[i]); + _PRGOffset += PRGsize[i]; + } + SetupCartCHRMapping(0, _CHRptr, _CHRsize, 0); + SetupCartPRGMapping(0, _PRGptr, _PRGsize, 0); + } + + GenMMC3_Init(info, 512, 512, 0, 0); info->Power = Super24Power; info->Reset = Super24Reset; info->Close = Super24Close; diff --git a/src/unif.c b/src/unif.c index 51502a4..b7f62a7 100644 --- a/src/unif.c +++ b/src/unif.c @@ -517,7 +517,7 @@ static BMAPPING bmap[] = { { "Sachen-8259C", 139, S8259C_Init, 0 }, { "Sachen-8259D", 137, S8259D_Init, 0 }, { "Super24in1SC03", 176, Super24_Init, 0 }, - { "Super24in1SC03", 176, Super24_Init, 0 }, + { "SUPER24IN1SC03", 176, Super24_Init, 0 }, { "SuperHIK8in1", 45, Mapper45_Init, 0 }, { "Supervision16in1", 53, Supervision16_Init, 0 }, { "T-227-1", NO_INES, BMCT2271_Init, 0 },