Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 43 additions & 23 deletions src/boards/n106.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ static void DoNamcoSound(int32 *Wave, int Count);
static void DoNamcoSoundHQ(void);
static void SyncHQ(int32 ts);

static int is210; /* Lesser mapper. */
static enum NamcoType { N163, N175, N340 } type;

static uint8 PRG[3];
static uint8 CHR[8];
Expand All @@ -63,15 +63,13 @@ static SFORMAT N106_StateRegs[] = {
{ 0 }
};

static void SyncMirror()
{
static void N340SyncMirror() {
switch(gorko) {
case 0: setmirror(MI_0); break;
case 1: setmirror(MI_V); break;
case 2: setmirror(MI_H); break;
case 3: setmirror(MI_0); break;
case 2: setmirror(MI_1); break;
case 3: setmirror(MI_H); break;
}

}

static void SyncPRG(void) {
Expand Down Expand Up @@ -129,9 +127,8 @@ static void FixNTAR(void) {

static void DoCHRRAMROM(int x, uint8 V) {
CHR[x] = V;
if (!is210 && !((gorfus >> ((x >> 2) + 6)) & 1) && (V >= 0xE0)) {
// printf("BLAHAHA: %d, %02x\n",x,V);
// setchr1r(0x10,x<<10,V&7);
if (type == N163 && V >= 0xE0 && !(gorfus >> (x >> 2) & 1)) {
setchr1r(0x10, x << 10, V);
} else
setchr1(x << 10, V);
}
Expand Down Expand Up @@ -197,16 +194,16 @@ static DECLFW(Mapper19_write) {
break;
case 0xE000:
PRG[0] = V & 0x3F;
if(is210) {
gorko = V>>6;
SyncMirror();
}
gorko = V >> 6;
if (type == N340)
N340SyncMirror();
SyncPRG();
break;
case 0xE800:
gorfus = V & 0xC0;
FixCRR();
PRG[1] = V & 0x3F;
gorfus = V >> 6;
if (type == N163)
FixCRR();
SyncPRG();
break;
case 0xF000:
Expand Down Expand Up @@ -351,7 +348,6 @@ static void DoNamcoSound(int32 *Wave, int Count) {

static void Mapper19_StateRestore(int version) {
SyncPRG();
SyncMirror();
FixNTAR();
FixCRR();
int x;
Expand Down Expand Up @@ -384,8 +380,8 @@ static void N106_Power(void) {
int x;
SetReadHandler(0x8000, 0xFFFF, CartBR);
SetWriteHandler(0x8000, 0xffff, Mapper19_write);
SetWriteHandler(0x4020, 0x5fff, Mapper19_write);
if (!is210) {
SetWriteHandler(0x4800, 0x5fff, Mapper19_write);
if (type == N163) {
SetWriteHandler(0xc000, 0xdfff, Mapper19C0D8_write);
SetReadHandler(0x4800, 0x4fff, Namco_Read4800);
SetReadHandler(0x5000, 0x57ff, Namco_Read5000);
Expand All @@ -411,19 +407,20 @@ static void N106_Power(void) {
}

void Mapper19_Init(CartInfo *info) {
is210 = 0;
type = N163;
battery = info->battery;
info->Power = N106_Power;

MapIRQHook = NamcoIRQHook;
GameStateRestore = Mapper19_StateRestore;
GameExpSound.RChange = M19SC;

// NTARAM can be mapped as CHR (does any game ever actually do this?)
SetupCartCHRMapping(0x10, NTARAM, 0x800, 1);

if (FSettings.SndRate)
Mapper19_ESI();

FCEU_MemoryRand(WRAM, sizeof(WRAM), true);
FCEU_MemoryRand(IRAM, sizeof(IRAM), true);
AddExState(WRAM, 8192, 0, "WRAM");
AddExState(IRAM, 128, 0, "IRAM");
AddExState(N106_StateRegs, ~0, 0, 0);
Expand All @@ -437,13 +434,36 @@ void Mapper19_Init(CartInfo *info) {
static void Mapper210_StateRestore(int version) {
SyncPRG();
FixCRR();
if (type == N340)
N340SyncMirror();
}

static NamcoType Mapper210_DetectType(CartInfo *info) {
if (info->ines2 && info->submapper == 1)
return N175;
if (info->ines2 && info->submapper == 2)
return N340;
FCEU_printf("Submapper detected by CRC32. Use NES 2.0 if you hack the ROM image.\n");
switch (info->CRC32) {
case 0x0c47946d: // Chibi Maruko Chan
case 0xbd523011: // Dream Master
case 0xc247cc80: // Family Circuit '91
case 0x808606f0: // Famista '91
case 0x81b7f1a8: // Heisei Tensai Bakabon
return N175;
default:
return N340;
}
}

void Mapper210_Init(CartInfo *info) {
is210 = 1;
type = Mapper210_DetectType(info);
battery = info->battery;
GameStateRestore = Mapper210_StateRestore;
info->Power = N106_Power;
FCEU_MemoryRand(WRAM, sizeof(WRAM), true);
AddExState(WRAM, 8192, 0, "WRAM");
AddExState(N106_StateRegs, ~0, 0, 0);

if (info->battery)
info->addSaveGameBuf( WRAM, 8192 );
}
4 changes: 2 additions & 2 deletions src/ines.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -548,7 +548,7 @@ BMAPPINGLocal bmap[] = {
{"BANDAI 24C02", 16, Mapper16_Init},
{"FFE Rev. B", 17, Mapper17_Init},
{"JALECO SS88006", 18, Mapper18_Init}, // JF-NNX (EB89018-30007) boards
{"Namcot 106", 19, Mapper19_Init},
{"NAMCOT 163", 19, Mapper19_Init},
// {"", 20, Mapper20_Init},
{"Konami VRC2/VRC4 A", 21, Mapper21_Init},
{"Konami VRC2/VRC4 B", 22, Mapper22_Init},
Expand Down Expand Up @@ -739,7 +739,7 @@ BMAPPINGLocal bmap[] = {
{"TAITO X1-005 Rev. B", 207, Mapper207_Init},
{"", 208, Mapper208_Init},
{"", 209, Mapper209_Init},
{"", 210, Mapper210_Init},
{"NAMCOT 175/340", 210, Mapper210_Init},
{"", 211, Mapper211_Init},
{"", 212, Mapper212_Init},
{"", 213, Mapper213_Init},
Expand Down