diff --git a/Core/Bb.h b/Core/Bb.h
index a245ec3e..e54a5e1b 100644
--- a/Core/Bb.h
+++ b/Core/Bb.h
@@ -32,13 +32,14 @@ protected:
void UpdateState()
{
- SetCpuMemoryMapping(0x6000, 0x7FFF, _prgReg & 0x03, PrgMemoryType::PrgRom);
+ SetCpuMemoryMapping(0x6000, 0x7FFF, _prgReg, PrgMemoryType::PrgRom);
SelectCHRPage(0, _chrReg);
}
void WriteRegister(uint16_t addr, uint8_t value) override
{
- if((addr & 0x9000) == 0x8000){
+ if((addr & 0x9000) == 0x8000 || addr >= 0xF000){
+ //A version of Bubble Bobble expects writes to $F000+ to switch the PRG banks
_prgReg = _chrReg = value;
} else {
//For ProWres
diff --git a/Core/Core.vcxproj b/Core/Core.vcxproj
index 5601f94d..325bf3e0 100644
--- a/Core/Core.vcxproj
+++ b/Core/Core.vcxproj
@@ -687,14 +687,12 @@
-
-
@@ -908,11 +906,9 @@
-
-
diff --git a/Core/Core.vcxproj.filters b/Core/Core.vcxproj.filters
index 10f24a47..b58cbddb 100644
--- a/Core/Core.vcxproj.filters
+++ b/Core/Core.vcxproj.filters
@@ -406,9 +406,6 @@
Nes\Mappers\Unnamed
-
- Nes\Mappers\Unnamed
-
Nes\Mappers\Unnamed
@@ -808,9 +805,6 @@
Nes\Mappers\MMC
-
- Nes\Mappers\Unnamed
-
Nes\Mappers\MMC
@@ -1075,9 +1069,6 @@
Nes\Mappers\Unif
-
- Nes\Mappers\Unif
-
Nes\Mappers\Unif
@@ -1408,9 +1399,6 @@
Nes\Mappers\MMC
-
- Nes\Mappers\Unif
-
Nes\Mappers\Unif
diff --git a/Core/Mapper108.h b/Core/Mapper108.h
deleted file mode 100644
index 635c9e8c..00000000
--- a/Core/Mapper108.h
+++ /dev/null
@@ -1,47 +0,0 @@
-#pragma once
-#include "stdafx.h"
-#include "BaseMapper.h"
-
-class Mapper108 : public BaseMapper
-{
-private:
- uint8_t _reg;
-
-protected:
- virtual uint16_t RegisterStartAddress() override { return 0x8000; }
- virtual uint16_t RegisterEndAddress() override { return 0x8FFF; }
- virtual uint16_t GetPRGPageSize() override { return 0x2000; }
- virtual uint16_t GetCHRPageSize() override { return 0x2000; }
-
- void InitMapper() override
- {
- //Used by Bubble Bobble hack only
- AddRegisterRange(0xF000, 0xFFFF, MemoryOperation::Write);
-
- _reg = 0;
-
- SelectPrgPage4x(0, -4);
- SelectCHRPage(0, 0);
- }
-
- void StreamState(bool saving) override
- {
- BaseMapper::StreamState(saving);
- Stream(_reg);
-
- if(!saving) {
- UpdateState();
- }
- }
-
- void UpdateState()
- {
- SetCpuMemoryMapping(0x6000, 0x7FFF, _reg, PrgMemoryType::PrgRom);
- }
-
- void WriteRegister(uint16_t addr, uint8_t value) override
- {
- _reg = value;
- UpdateState();
- }
-};
diff --git a/Core/Mapper201.h b/Core/Mapper201.h
deleted file mode 100644
index e95c10da..00000000
--- a/Core/Mapper201.h
+++ /dev/null
@@ -1,22 +0,0 @@
-#pragma once
-#include "stdafx.h"
-#include "BaseMapper.h"
-
-class Mapper201 : public BaseMapper
-{
-protected:
- virtual uint16_t GetPRGPageSize() override { return 0x8000; }
- virtual uint16_t GetCHRPageSize() override { return 0x2000; }
-
- void InitMapper() override
- {
- SelectPRGPage(0, 0);
- SelectCHRPage(0, 0);
- }
-
- void WriteRegister(uint16_t addr, uint8_t value) override
- {
- SelectCHRPage(0, addr & 0xFF);
- SelectPRGPage(0, addr & 0xFF);
- }
-};
\ No newline at end of file
diff --git a/Core/Mapper42.h b/Core/Mapper42.h
index 030501ca..3f710996 100644
--- a/Core/Mapper42.h
+++ b/Core/Mapper42.h
@@ -8,6 +8,7 @@ class Mapper42 : public BaseMapper
private:
uint16_t _irqCounter;
bool _irqEnabled;
+ uint8_t _prgReg;
protected:
virtual uint16_t GetPRGPageSize() override { return 0x2000; }
@@ -17,18 +18,30 @@ protected:
{
_irqCounter = 0;
_irqEnabled = false;
+ _prgReg = 0;
- SelectPRGPage(0, 0x0C);
- SelectPRGPage(1, 0x0D);
- SelectPRGPage(2, 0x0E);
- SelectPRGPage(3, 0x0F);
+ SelectPRGPage(0, -4);
+ SelectPRGPage(1, -3);
+ SelectPRGPage(2, -2);
+ SelectPRGPage(3, -1);
SelectCHRPage(0, 0);
+
+ UpdateState();
}
void StreamState(bool saving) override
{
BaseMapper::StreamState(saving);
- Stream(_irqCounter, _irqEnabled);
+ Stream(_irqCounter, _irqEnabled, _prgReg);
+
+ if(!saving) {
+ UpdateState();
+ }
+ }
+
+ void UpdateState()
+ {
+ SetCpuMemoryMapping(0x6000, 0x7FFF, _prgReg & 0x0F, PrgMemoryType::PrgRom);
}
void ProcessCpuClock() override
@@ -56,7 +69,8 @@ protected:
break;
case 0xE000:
- SetCpuMemoryMapping(0x6000, 0x7FFF, value & 0x0F, PrgMemoryType::PrgRom);
+ _prgReg = value & 0x0F;
+ UpdateState();
break;
case 0xE001:
diff --git a/Core/MapperFactory.cpp b/Core/MapperFactory.cpp
index a40a12f9..b4ebfab1 100644
--- a/Core/MapperFactory.cpp
+++ b/Core/MapperFactory.cpp
@@ -106,7 +106,6 @@
#include "Mapper103.h"
#include "Mapper106.h"
#include "Mapper107.h"
-#include "Mapper108.h"
#include "Mapper112.h"
#include "Mapper116.h"
#include "Mapper117.h"
@@ -115,7 +114,6 @@
#include "Mapper174.h"
#include "Mapper183.h"
#include "Mapper200.h"
-#include "Mapper201.h"
#include "Mapper202.h"
#include "Mapper203.h"
#include "Mapper204.h"
@@ -245,13 +243,11 @@
#include "TxSRom.h"
#include "Unl158B.h"
#include "Unl255in1.h"
-#include "Unl43272.h"
#include "Unl8237A.h"
#include "UnlD1038.h"
#include "UnlDripGame.h"
#include "UnlPci556.h"
#include "UnlPuzzle.h"
-#include "UnlVrc7.h"
#include "UNROM.h"
#include "UnRom_94.h"
#include "UnRom_180.h"
@@ -279,7 +275,7 @@ Supported mappers:
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11| 12| 13| 14| 15|
| 16| 17| 18| 19|...| 21| 22| 23| 24| 25| 26| 27| 28| 29| 30| 31|
| 32| 33| 34| 35| 36| 37| 38| 39| 40| 41| 42| 43| 44| 45| 46| 47|
-| 48| 49| 50| 51| 52| 53| 54|???| 56| 57| 58|===| 60| 61| 62| 63|
+| 48| 49| 50| 51| 52| 53| 54|???| 56| 57| 58| 59| 60| 61| 62| 63|
| 64| 65| 66| 67| 68| 69| 70| 71| 72| 73| 74| 75| 76| 77| 78| 79|
| 80|===| 82| 83|===| 85| 86| 87| 88| 89| 90| 91| 92| 93| 94| 95|
| 96| 97|===| 99|...|101|===|103|104|105|106|107|108|===|===|111|
@@ -364,7 +360,8 @@ BaseMapper* MapperFactory::GetMapperFromID(RomData &romData)
case 56: return new Kaiser202();
case 57: return new Mapper57();
case 58: return new Mapper58();
- case 60: return new Mapper60(); //Partial support?
+ case 59: return new UnlD1038();
+ case 60: return new Mapper60();
case 61: return new Mapper61();
case 62: return new Mapper62();
case 63: return new Bmc63();
@@ -407,7 +404,7 @@ BaseMapper* MapperFactory::GetMapperFromID(RomData &romData)
case 105: return new MMC1_105(); break;
case 106: return new Mapper106();
case 107: return new Mapper107();
- case 108: return new Mapper108();
+ case 108: return new Bb();
case 111: return new Cheapocabra();
case 112: return new Mapper112();
case 113: return new Nina03_06(true);
@@ -486,7 +483,7 @@ BaseMapper* MapperFactory::GetMapperFromID(RomData &romData)
case 198: return new MMC3_198();
case 199: return new MMC3_199();
case 200: return new Mapper200();
- case 201: return new Mapper201();
+ case 201: return new NovelDiamond();
case 202: return new Mapper202();
case 203: return new Mapper203();
case 204: return new Mapper204();
@@ -633,24 +630,19 @@ BaseMapper* MapperFactory::GetMapperFromID(RomData &romData)
case 529: return new T230();
case 530: return new Ax5705();
- case UnifBoards::Ac08: return new Ac08();
- case UnifBoards::Bb: return new Bb();
+ case UnifBoards::Ac08: return new Ac08(); //mapper 42?
case UnifBoards::BmcGn45: return new BmcGn45();
case UnifBoards::Cc21: return new Cc21();
- case UnifBoards::Fk23C: return new MMC3_Fk23C(false);
- case UnifBoards::Fk23Ca: return new MMC3_Fk23C(true);
- case UnifBoards::Ghostbusters63in1: return new Ghostbusters63in1();
+ case UnifBoards::Fk23C: return new MMC3_Fk23C(false); //mapper 176?
+ case UnifBoards::Fk23Ca: return new MMC3_Fk23C(true); //mapper 176?
+ case UnifBoards::Ghostbusters63in1: return new Ghostbusters63in1(); //mapper 226?
case UnifBoards::Gs2013: return new Gs2013();
- case UnifBoards::Malee: return new Malee();
- case UnifBoards::NovelDiamond: return new NovelDiamond();
+ case UnifBoards::Malee: return new Malee(); //mapper 42?
case UnifBoards::SssNrom256: return new FamicomBox();
- case UnifBoards::Super24in1Sc03: return new MMC3_Super24in1Sc03();
+ case UnifBoards::Super24in1Sc03: return new MMC3_Super24in1Sc03(); //mapper 176?
case UnifBoards::Unl255in1: return new Unl255in1();
- case UnifBoards::Unl43272: return new Unl43272();
- case UnifBoards::Unl8237A: return new Unl8237A();
- case UnifBoards::UnlD1038: return new UnlD1038();
+ case UnifBoards::Unl8237A: return new Unl8237A(); //mapper 215.1
case UnifBoards::UnlPuzzle: return new UnlPuzzle();
- case UnifBoards::UnlVrc7: return new UnlVrc7();
case MapperFactory::NsfMapperID: return new NsfMapper();
case MapperFactory::FdsMapperID: return new FDS();
diff --git a/Core/UnifBoards.h b/Core/UnifBoards.h
index ec95357a..94f82774 100644
--- a/Core/UnifBoards.h
+++ b/Core/UnifBoards.h
@@ -7,18 +7,14 @@ namespace UnifBoards {
UnknownBoard = 32768,
Malee,
Gs2013,
- NovelDiamond,
Ghostbusters63in1,
Super24in1Sc03,
Cc21,
- Bb,
Ac08,
- Unl43272,
UnlPuzzle,
Fk23C,
Fk23Ca,
Unl255in1,
- UnlD1038,
UnlVrc7,
Unl8237A,
BmcGn45,
diff --git a/Core/UnifLoader.cpp b/Core/UnifLoader.cpp
index d6fb715d..b90bba8d 100644
--- a/Core/UnifLoader.cpp
+++ b/Core/UnifLoader.cpp
@@ -11,7 +11,7 @@ std::unordered_map UnifLoader::_boardMappings = std::unordered_map<
{ "3D-BLOCK", UnifBoards::UnknownBoard },
{ "411120-C", 287 },
{ "42in1ResetSwitch", 226 },
- { "43272", UnifBoards::Unl43272 },
+ { "43272", 227 },
{ "603-5052", 238 },
{ "64in1NoRepeat", 314 },
{ "70in1", 236 },
@@ -25,7 +25,7 @@ std::unordered_map UnifLoader::_boardMappings = std::unordered_map<
{ "AC08", UnifBoards::Ac08 },
{ "ANROM", 7 },
{ "AX5705", 530 },
- { "BB", UnifBoards::Bb },
+ { "BB", 108 },
{ "BS-5", 286 },
{ "CC-21", UnifBoards::Cc21 },
{ "CITYFIGHT", 266 },
@@ -33,7 +33,7 @@ std::unordered_map UnifLoader::_boardMappings = std::unordered_map<
{ "10-24-C-A1", UnifBoards::UnknownBoard },
{ "CNROM", 3 },
{ "CPROM", 13 },
- { "D1038", UnifBoards::UnlD1038 },
+ { "D1038", 59 },
{ "DANCE", UnifBoards::UnknownBoard },
{ "DANCE2000", 518 },
{ "DREAMTECH01", 521 },
@@ -77,7 +77,7 @@ std::unordered_map UnifLoader::_boardMappings = std::unordered_map<
{ "NROM-256", 0 },
{ "NTBROM", 68 },
{ "NTD-03", 290 },
- { "NovelDiamond9999999in1", UnifBoards::NovelDiamond },
+ { "NovelDiamond9999999in1", 201 },
{ "OneBus", UnifBoards::UnknownBoard },
{ "PEC-586", UnifBoards::UnknownBoard },
{ "PUZZLE", UnifBoards::UnlPuzzle }, //Doesn't actually exist as a UNIF file (used to reassign a new mapper number to the Puzzle beta)
@@ -143,7 +143,7 @@ std::unordered_map UnifLoader::_boardMappings = std::unordered_map<
{ "UNROM-512-16", 30 },
{ "UNROM-512-32", 30 },
{ "UOROM", 2 },
- { "VRC7", UnifBoards::UnlVrc7 },
+ { "VRC7", 85 },
{ "YOKO", 264 },
{ "SB-2000", UnifBoards::UnknownBoard },
{ "158B", 258 },
diff --git a/Core/Unl43272.h b/Core/Unl43272.h
deleted file mode 100644
index d7d8d6da..00000000
--- a/Core/Unl43272.h
+++ /dev/null
@@ -1,46 +0,0 @@
-#pragma once
-#include "stdafx.h"
-#include "BaseMapper.h"
-
-class Unl43272 : public BaseMapper
-{
-private:
- uint16_t _lastAddr;
-
-protected:
- uint16_t GetPRGPageSize() override { return 0x8000; }
- uint16_t GetCHRPageSize() override { return 0x2000; }
- bool AllowRegisterRead() override { return true; }
-
- void InitMapper() override
- {
- SelectCHRPage(0, 0);
- SetMirroringType(MirroringType::Horizontal);
- }
-
- void Reset(bool softReset) override
- {
- BaseMapper::Reset(softReset);
- WriteRegister(0x8081, 0);
- }
-
- void StreamState(bool saving) override
- {
- BaseMapper::StreamState(saving);
- Stream(_lastAddr);
- }
-
- uint8_t ReadRegister(uint16_t addr) override
- {
- return InternalReadRam(_lastAddr & 0x400 ? (addr & 0xFE) : addr);
- }
-
- void WriteRegister(uint16_t addr, uint8_t value) override
- {
- _lastAddr = addr;
-
- if((addr & 0x81) == 0x81) {
- SelectPRGPage(0, (addr & 0x38) >> 3);
- }
- }
-};
\ No newline at end of file
diff --git a/Core/UnlVrc7.h b/Core/UnlVrc7.h
deleted file mode 100644
index 3a7cbc48..00000000
--- a/Core/UnlVrc7.h
+++ /dev/null
@@ -1,68 +0,0 @@
-#pragma once
-#include "stdafx.h"
-#include "BaseMapper.h"
-#include "VrcIrq.h"
-
-class UnlVrc7 : public BaseMapper
-{
-private:
- unique_ptr _irq;
- uint8_t _chrRegisters[8];
-
-protected:
- virtual uint16_t GetPRGPageSize() override { return 0x2000; }
- virtual uint16_t GetCHRPageSize() override { return 0x0400; }
-
- void InitMapper() override
- {
- _irq.reset(new VrcIrq(_console));
- _irq->Reset();
- memset(_chrRegisters, 0, sizeof(_chrRegisters));
- SelectPRGPage(3, -1);
- }
-
- virtual void StreamState(bool saving) override
- {
- BaseMapper::StreamState(saving);
- SnapshotInfo irq { _irq.get() };
- ArrayInfo chrRegisters = { _chrRegisters, 8 };
-
- Stream(chrRegisters, irq);
- }
-
- void ProcessCpuClock() override
- {
- _irq->ProcessCpuClock();
- }
-
- void WriteRegister(uint16_t addr, uint8_t value) override
- {
- switch(addr & 0xF038) {
- case 0x8000: SelectPRGPage(0, value & 0x3F); break;
- case 0x8008: SelectPRGPage(1, value & 0x3F); break;
- case 0x9000: SelectPRGPage(2, value & 0x3F); break;
-
- case 0xA000: SelectCHRPage(0, value); break;
- case 0xA008: SelectCHRPage(1, value); break;
- case 0xB000: SelectCHRPage(2, value); break;
- case 0xB008: SelectCHRPage(3, value); break;
- case 0xC000: SelectCHRPage(4, value); break;
- case 0xC008: SelectCHRPage(5, value); break;
- case 0xD000: SelectCHRPage(6, value); break;
- case 0xD008: SelectCHRPage(7, value); break;
-
- case 0xE000:
- switch(value & 0x03) {
- case 0: SetMirroringType(MirroringType::Vertical); break;
- case 1: SetMirroringType(MirroringType::Horizontal); break;
- case 2: SetMirroringType(MirroringType::ScreenAOnly); break;
- case 3: SetMirroringType(MirroringType::ScreenBOnly); break;
- }
- break;
-
- case 0xE008: _irq->SetReloadValue(value + 8); break;
- case 0xF000: _irq->SetControlValue(value & 0x03); break;
- case 0xF008: _irq->AcknowledgeIrq(); break;
- }
- }
-};
\ No newline at end of file
diff --git a/GUI.NET/Dependencies/MesenDB.txt b/GUI.NET/Dependencies/MesenDB.txt
index 18efdc50..9c7a14e8 100644
--- a/GUI.NET/Dependencies/MesenDB.txt
+++ b/GUI.NET/Dependencies/MesenDB.txt
@@ -4,7 +4,7 @@
#
# Automatically generated database based on Nestopia's DB and NesCartDB
#
-# Generated on 2018-07-07 using:
+# Generated on 2018-07-08 using:
# -NesCartDB (dated 2017-08-21)
# -Nestopia UE's latest DB (dated 2015-10-22)
#
@@ -6633,7 +6633,7 @@
6D6DBE6B,NesNtsc,UNK,,,0,32,8,,0,0,0,v,,,,,
6D78F836,NesNtsc,UNK,,,4,128,128,,0,0,0,v,,,,,
6D8908AC,NesNtsc,UNK,,,2,128,,,0,0,0,v,,,,,
-6D92DFF1,Famicom,,,,60,128,64,,0,0,0,,,,,,
+6D92DFF1,Famicom,,,,59,128,64,,0,0,0,,,,,,
6D9E4F4D,NesNtsc,UNK,,,4,256,128,,0,0,0,h,,,,,
6DA0F643,NesNtsc,UNK,,,4,256,128,,0,0,0,h,,,,,
6DA83F06,NesNtsc,UNK,,,4,128,128,,0,0,0,h,,,,,
diff --git a/Libretro/MesenDB.inc b/Libretro/MesenDB.inc
index b395aaa2..dcc1b70f 100644
--- a/Libretro/MesenDB.inc
+++ b/Libretro/MesenDB.inc
@@ -6620,7 +6620,7 @@ u8"6D6AB0DA,NesNtsc,UNK,,,4,128,128,,0,0,0,h,,,,,",
u8"6D6DBE6B,NesNtsc,UNK,,,0,32,8,,0,0,0,v,,,,,",
u8"6D78F836,NesNtsc,UNK,,,4,128,128,,0,0,0,v,,,,,",
u8"6D8908AC,NesNtsc,UNK,,,2,128,,,0,0,0,v,,,,,",
-u8"6D92DFF1,Famicom,,,,60,128,64,,0,0,0,,,,,,",
+u8"6D92DFF1,Famicom,,,,59,128,64,,0,0,0,,,,,,",
u8"6D9E4F4D,NesNtsc,UNK,,,4,256,128,,0,0,0,h,,,,,",
u8"6DA0F643,NesNtsc,UNK,,,4,256,128,,0,0,0,h,,,,,",
u8"6DA83F06,NesNtsc,UNK,,,4,128,128,,0,0,0,h,,,,,",