Merge pull request #624 from negativeExponent/master
Add mapper 174, update mapper 78, fix mapper 205
This commit is contained in:
commit
88c01cba6c
|
@ -220,6 +220,23 @@ void Mapper92_Init(CartInfo *info) {
|
|||
Latch_Init(info, M92Sync, NULL, 0x80B0, 0x8000, 0xFFFF, 0);
|
||||
}
|
||||
|
||||
//------------------ Map 174 ---------------------------
|
||||
|
||||
static void M174Sync(void) {
|
||||
if (latche & 0x80) {
|
||||
setprg32(0x8000, (latche >> 5) & 3);
|
||||
} else {
|
||||
setprg16(0x8000, (latche >> 4) & 7);
|
||||
setprg16(0xC000, (latche >> 4) & 7);
|
||||
}
|
||||
setchr8((latche >> 1) & 7);
|
||||
setmirror((latche & 1) ^ 1);
|
||||
}
|
||||
|
||||
void Mapper174_Init(CartInfo *info) {
|
||||
Latch_Init(info, M174Sync, NULL, 0, 0x8000, 0xFFFF, 0);
|
||||
}
|
||||
|
||||
//------------------ Map 200 ---------------------------
|
||||
|
||||
static void M200Sync(void) {
|
||||
|
|
|
@ -26,6 +26,7 @@ static uint16 addrreg0=0, addrreg1=0;
|
|||
static uint8 *WRAM = NULL;
|
||||
static uint32 WRAMSIZE=0;
|
||||
static void (*WSync)(void) = nullptr;
|
||||
static uint8 submapper;
|
||||
|
||||
static DECLFW(LatchWrite) {
|
||||
// FCEU_printf("bs %04x %02x\n",A,V);
|
||||
|
@ -68,6 +69,7 @@ static void Latch_Init(CartInfo *info, void (*proc)(void), uint8 init, uint16 ad
|
|||
info->Power = LatchPower;
|
||||
info->Close = LatchClose;
|
||||
GameStateRestore = StateRestore;
|
||||
submapper = info->submapper;
|
||||
if(info->ines2)
|
||||
if(info->battery_wram_size + info->wram_size > 0)
|
||||
wram = 1;
|
||||
|
@ -295,7 +297,11 @@ static void M78Sync() {
|
|||
setprg16(0x8000, (latche & 7));
|
||||
setprg16(0xc000, ~0);
|
||||
setchr8(latche >> 4);
|
||||
setmirror(MI_0 + ((latche >> 3) & 1));
|
||||
if (submapper == 3) {
|
||||
setmirror((latche >> 3) & 1);
|
||||
} else {
|
||||
setmirror(MI_0 + ((latche >> 3) & 1));
|
||||
}
|
||||
}
|
||||
|
||||
void Mapper78_Init(CartInfo *info) {
|
||||
|
|
|
@ -1136,20 +1136,73 @@ void Mapper198_Init(CartInfo *info) {
|
|||
info->Power = M195Power;
|
||||
}
|
||||
|
||||
// ---------------------------- Mapper 205 ------------------------------
|
||||
// GN-45 BOARD
|
||||
/* ---------------------------- Mapper 205 ------------------------------ */
|
||||
/* UNIF boardname BMC-JC-016-2
|
||||
https://wiki.nesdev.com/w/index.php/INES_Mapper_205 */
|
||||
|
||||
/* 2023-02 : Update reg write logic and add solder pad */
|
||||
|
||||
static void M205PW(uint32 A, uint8 V) {
|
||||
// GN-30A - íà÷àëüíàÿ ìàñêà äîëæíà áûòü 1F + àïïàðàòíûé ïåðåêëþ÷àòåëü íà øèíå àäðåñà
|
||||
setprg8(A, (V & 0x0f) | EXPREGS[0]);
|
||||
uint8 bank = V & ((EXPREGS[0] & 0x02) ? 0x0F : 0x1F);
|
||||
if (PRGsize[1]) { // split-rom variant
|
||||
setprg8r((EXPREGS[0] & 3) ? (EXPREGS[0] - 1) : 0, A, bank);
|
||||
} else {
|
||||
setprg8(A, EXPREGS[0] << 4 | bank);
|
||||
}
|
||||
}
|
||||
|
||||
static void M205CW(uint32 A, uint8 V) {
|
||||
// GN-30A - íà÷àëüíàÿ ìàñêà äîëæíà áûòü FF
|
||||
uint8 bank = V & ((EXPREGS[0] & 0x02) ? 0x7F : 0xFF);
|
||||
if (CHRsize[1]) { // split-rom variant
|
||||
setchr1r((EXPREGS[0] & 3) ? (EXPREGS[0] - 1) : 0, A, bank);
|
||||
} else {
|
||||
setchr1(A, (EXPREGS[0] << 7) | bank);
|
||||
}
|
||||
}
|
||||
|
||||
static DECLFW(M205Write) {
|
||||
EXPREGS[0] = V & 3;
|
||||
if (V & 1) {
|
||||
EXPREGS[0] |= EXPREGS[1];
|
||||
}
|
||||
CartBW(A, V);
|
||||
FixMMC3PRG(MMC3_cmd);
|
||||
FixMMC3CHR(MMC3_cmd);
|
||||
}
|
||||
|
||||
static void M205Reset(void) {
|
||||
EXPREGS[0] = 0;
|
||||
EXPREGS[1] ^= 2; /* solder pad */
|
||||
MMC3RegReset();
|
||||
}
|
||||
|
||||
static void M205Power(void) {
|
||||
EXPREGS[0] = EXPREGS[1] = 0;
|
||||
GenMMC3Power();
|
||||
SetWriteHandler(0x6000, 0x7FFF, M205Write);
|
||||
}
|
||||
|
||||
void Mapper205_Init(CartInfo *info) {
|
||||
GenMMC3_Init(info, 256, 128, 0, 0);
|
||||
pwrap = M205PW;
|
||||
cwrap = M205CW;
|
||||
info->Power = M205Power;
|
||||
info->Reset = M205Reset;
|
||||
AddExState(EXPREGS, 2, 0, "EXPR");
|
||||
}
|
||||
|
||||
/* --------------------------- GN-45 BOARD ------------------------------ */
|
||||
|
||||
/* Mapper 361 and 366, previously assigned as Mapper 205 */
|
||||
static void GN45PW(uint32 A, uint8 V) {
|
||||
setprg8(A, (V & 0x0f) | EXPREGS[0]);
|
||||
}
|
||||
|
||||
static void GN45CW(uint32 A, uint8 V) {
|
||||
setchr1(A, (V & 0x7F) | (EXPREGS[0] << 3));
|
||||
}
|
||||
|
||||
static DECLFW(M205Write0) {
|
||||
static DECLFW(GN45Write0) {
|
||||
if (EXPREGS[2] == 0) {
|
||||
EXPREGS[0] = A & 0x30;
|
||||
EXPREGS[2] = A & 0x80;
|
||||
|
@ -1159,7 +1212,7 @@ static DECLFW(M205Write0) {
|
|||
CartBW(A, V);
|
||||
}
|
||||
|
||||
static DECLFW(M205Write1) {
|
||||
static DECLFW(GN45Write1) {
|
||||
if (EXPREGS[2] == 0) {
|
||||
EXPREGS[0] = V & 0x30;
|
||||
FixMMC3PRG(MMC3_cmd);
|
||||
|
@ -1168,23 +1221,23 @@ static DECLFW(M205Write1) {
|
|||
CartBW(A, V);
|
||||
}
|
||||
|
||||
static void M205Reset(void) {
|
||||
static void GN45Reset(void) {
|
||||
EXPREGS[0] = EXPREGS[2] = 0;
|
||||
MMC3RegReset();
|
||||
}
|
||||
|
||||
static void M205Power(void) {
|
||||
static void GN45Power(void) {
|
||||
GenMMC3Power();
|
||||
SetWriteHandler(0x6000, 0x6fff, M205Write0);
|
||||
SetWriteHandler(0x7000, 0x7fff, M205Write1); // OK-411 boards, the same logic, but data latched, 2-in-1 frankenstein
|
||||
SetWriteHandler(0x6000, 0x6fff, GN45Write0);
|
||||
SetWriteHandler(0x7000, 0x7fff, GN45Write1); /* OK-411 boards, the same logic, but data latched, 2-in-1 frankenstein */
|
||||
}
|
||||
|
||||
void Mapper205_Init(CartInfo *info) {
|
||||
void GN45_Init(CartInfo *info) {
|
||||
GenMMC3_Init(info, 128, 128, 8, 0);
|
||||
pwrap = M205PW;
|
||||
cwrap = M205CW;
|
||||
info->Power = M205Power;
|
||||
info->Reset = M205Reset;
|
||||
pwrap = GN45PW;
|
||||
cwrap = GN45CW;
|
||||
info->Power = GN45Power;
|
||||
info->Reset = GN45Reset;
|
||||
AddExState(EXPREGS, 1, 0, "EXPR");
|
||||
}
|
||||
|
||||
|
|
|
@ -689,7 +689,7 @@ BMAPPINGLocal bmap[] = {
|
|||
{"", 171, Mapper171_Init},
|
||||
{"", 172, Mapper172_Init},
|
||||
{"", 173, Mapper173_Init},
|
||||
// {"", 174, Mapper174_Init},
|
||||
{"NTDec 5-in-1", 174, Mapper174_Init},
|
||||
{"", 175, Mapper175_Init},
|
||||
{"BMCFK23C", 176, BMCFK23C_Init}, // zero 26-may-2012 - well, i have some WXN junk games that use 176 for instance ????. i dont know what game uses this BMCFK23C as mapper 176. we'll have to make a note when we find it.
|
||||
{"", 177, Mapper177_Init},
|
||||
|
@ -720,7 +720,7 @@ BMAPPINGLocal bmap[] = {
|
|||
{"", 202, Mapper202_Init},
|
||||
{"", 203, Mapper203_Init},
|
||||
{"", 204, Mapper204_Init},
|
||||
{"", 205, Mapper205_Init},
|
||||
{"JC-016-2", 205, Mapper205_Init},
|
||||
{"NAMCOT 108 Rev. C", 206, Mapper206_Init}, // Deprecated, Used to be "DEIROM" whatever it means, but actually simple version of MMC3
|
||||
{"TAITO X1-005 Rev. B", 207, Mapper207_Init},
|
||||
{"", 208, Mapper208_Init},
|
||||
|
@ -788,6 +788,8 @@ BMAPPINGLocal bmap[] = {
|
|||
{"HP10xx/H20xx Boards", 260, BMCHPxx_Init},
|
||||
{"810544-CA-1", 261, BMC810544CA1_Init},
|
||||
{"AA6023/AA6023B", 268, AA6023_Init},
|
||||
{"OK-411", 361, GN45_Init},
|
||||
{"GN-45", 366, GN45_Init},
|
||||
{"COOLGIRL", 342, COOLGIRL_Init },
|
||||
{"FAM250/81-01-39-C/SCHI-24", 354, Mapper354_Init },
|
||||
|
||||
|
|
|
@ -208,6 +208,7 @@ void Mapper170_Init(CartInfo *);
|
|||
void Mapper171_Init(CartInfo *);
|
||||
void Mapper172_Init(CartInfo *);
|
||||
void Mapper173_Init(CartInfo *);
|
||||
void Mapper174_Init(CartInfo *);
|
||||
void Mapper175_Init(CartInfo *);
|
||||
void Mapper177_Init(CartInfo *);
|
||||
void Mapper178_Init(CartInfo *);
|
||||
|
@ -279,6 +280,7 @@ void Mapper354_Init(CartInfo *);
|
|||
void Mapper406_Init(CartInfo *);
|
||||
|
||||
void INX_007T_Init(CartInfo* info);
|
||||
void GN45_Init(CartInfo *info); /* previously mapper 205 */
|
||||
|
||||
typedef struct {
|
||||
const char *name;
|
||||
|
|
|
@ -476,6 +476,7 @@ static BMAPPING bmap[] = {
|
|||
{ "BS-400R", BS400R_Init, 0 },
|
||||
{ "BS-4040R", BS4040R_Init, 0 },
|
||||
{ "COOLGIRL", COOLGIRL_Init, 0 },
|
||||
{ "JC-016-2", Mapper205_Init, 0 },
|
||||
|
||||
{ 0, 0, 0 }
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue