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,,,,,",