From d2da20816711282bbf4335b436d525cb40889ff8 Mon Sep 17 00:00:00 2001 From: Sour Date: Sun, 8 Jul 2018 12:32:14 -0400 Subject: [PATCH] Add NES 2.0 <-> UNIF board mappings (mapper #256+) --- Core/MapperFactory.cpp | 147 ++++++++++++++++++++---------- Core/NESHeader.cpp | 2 +- Core/UnifBoards.h | 50 ---------- Core/UnifLoader.cpp | 101 ++++++++++---------- GUI.NET/Debugger/frmEditHeader.cs | 2 +- 5 files changed, 150 insertions(+), 152 deletions(-) diff --git a/Core/MapperFactory.cpp b/Core/MapperFactory.cpp index b9eb07ba..a40a12f9 100644 --- a/Core/MapperFactory.cpp +++ b/Core/MapperFactory.cpp @@ -536,74 +536,121 @@ BaseMapper* MapperFactory::GetMapperFromID(RomData &romData) case 254: return new MMC3_254(); case 255: return new Bmc255(); - case UnifBoards::A65AS: return new A65AS(); + case 256: break; //ONEBUS + case 257: break; //PEC-586 + case 258: return new Unl158B(); + case 259: return new MMC3_BmcF15(); + case 260: return new BmcHpxx(); + case 261: return new Bmc810544CA1(); + case 262: return new MMC3_StreetHeroes(); + case 263: return new MMC3_Kof97(); + case 264: return new Yoko(); + case 265: return new T262(); + case 266: return new CityFighter(); + //267 + case 268: return new MMC3_Coolboy(); + //269-270 + case 271: break; //22026 + //272-273 + case 274: return new Bmc80013B(); + //275-282 + case 283: return new Gs2004(); + case 284: return new UnlDripGame(); + case 285: return new A65AS(); + case 286: return new Bs5(); + case 287: return new MMC3_Bmc411120C(); //+ K-3088 + case 288: break; //GKCXIN1 + case 289: return new Bmc60311C(); + case 290: return new BmcNtd03(); + //291 + case 292: return new DragonFighter(); + //293-294 + case 295: break; //13IN1JY110 + //296-297 + case 298: return new Tf1201(); + case 299: return new Bmc11160(); + case 300: return new Bmc190in1(); + case 301: return new Bmc8157(); + case 302: return new Kaiser7057(); + case 303: return new Kaiser7017(); + case 304: return new Smb2j(); + case 305: return new Kaiser7031(); + case 306: return new Kaiser7016(); + case 307: return new Kaiser7037(); + case 308: break; //TH2131-1 + case 309: break; //LH51 + //310-311 + case 312: return new Kaiser7013B(); + case 313: break; //RESET-TXROM + case 314: return new Bmc64in1NoRepeat(); + case 315: break; //830134C + //316-318 + case 319: return new Hp898f(); + case 320: break; //830425C-4391T + //321 + case 322: break; //K-3033 + case 323: break; //FARID_SLROM_8-IN-1 + case 324: break; //FARID_UNROM_8-IN-1 + case 325: return new MMC3_MaliSB(); + case 327: break; //10-24-C-A1 + case 328: return new Rt01(); + case 329: return new Edu2000(); + //330 + case 331: return new Bmc12in1(); + case 332: return new Super40in1Ws(); + case 333: return new Bmc8in1(); // + NEWSTAR-GRM070-8IN1 + //334 + case 335: break; //CTC-09 + case 336: break; //K-3046 + case 337: break; //CTC-12IN1 + case 338: break; //SA005-A + case 339: break; //K-3006 + case 340: break; //K-3036 + case 341: break; //TJ-03 + case 342: break; //COOLGIRL + //343 + case 344: break; //GN26 + case 345: break; //L6IN1 + case 346: return new Kaiser7012(); + //347 + case 348: return new Bmc830118C(); + case 349: return new BmcG146(); + case 350: break; //891227 + + case 513: return new Sachen9602(); + //514-517 + case 518: return new Dance2000(); + case 519: return new Eh8813A(); + //520 + case 521: return new DreamTech01(); + case 522: return new Lh10(); + //523 + case 524: break; //900218 + case 525: break; //KS7021A + case 526: break; //BJ56 + case 527: break; //AX40G + case 528: break; //831128C + case 529: return new T230(); + case 530: return new Ax5705(); + case UnifBoards::Ac08: return new Ac08(); - case UnifBoards::Ax5705: return new Ax5705(); case UnifBoards::Bb: return new Bb(); - case UnifBoards::Bmc11160: return new Bmc11160(); - case UnifBoards::Bmc12in1: return new Bmc12in1(); - case UnifBoards::Bmc411120C: return new MMC3_Bmc411120C(); - case UnifBoards::Bmc64in1NoRepeat: return new Bmc64in1NoRepeat(); - case UnifBoards::Bmc70in1: return new Bmc70in1(); - case UnifBoards::Bmc70in1B: return new Bmc70in1(); - case UnifBoards::Bmc190in1: return new Bmc190in1(); - case UnifBoards::Bmc60311C: return new Bmc60311C(); - case UnifBoards::Bmc810544CA1: return new Bmc810544CA1(); - case UnifBoards::Bmc830118C: return new Bmc830118C(); - case UnifBoards::Bmc80013B: return new Bmc80013B(); - case UnifBoards::Bmc8157: return new Bmc8157(); - case UnifBoards::Bmc8in1: return new Bmc8in1(); - case UnifBoards::BmcF15: return new MMC3_BmcF15(); - case UnifBoards::BmcG146: return new BmcG146(); case UnifBoards::BmcGn45: return new BmcGn45(); - case UnifBoards::BmcHpxx: return new BmcHpxx(); - case UnifBoards::BmcNtd03: return new BmcNtd03(); - case UnifBoards::Bs5: return new Bs5(); case UnifBoards::Cc21: return new Cc21(); - case UnifBoards::CityFighter: return new CityFighter(); - case UnifBoards::Coolboy: return new MMC3_Coolboy(); - case UnifBoards::Dance2000: return new Dance2000(); - case UnifBoards::DragonFighter: return new DragonFighter(); - case UnifBoards::DreamTech01: return new DreamTech01(); - case UnifBoards::Edu2000: return new Edu2000(); - case UnifBoards::Eh8813A: return new Eh8813A(); case UnifBoards::Fk23C: return new MMC3_Fk23C(false); case UnifBoards::Fk23Ca: return new MMC3_Fk23C(true); case UnifBoards::Ghostbusters63in1: return new Ghostbusters63in1(); - case UnifBoards::Gs2004: return new Gs2004(); case UnifBoards::Gs2013: return new Gs2013(); - case UnifBoards::Hp898f: return new Hp898f(); - case UnifBoards::Kof97: return new MMC3_Kof97(); - case UnifBoards::Ks7012: return new Kaiser7012(); - case UnifBoards::Ks7013B: return new Kaiser7013B(); - case UnifBoards::Ks7016: return new Kaiser7016(); - case UnifBoards::Ks7017: return new Kaiser7017(); - case UnifBoards::Ks7031: return new Kaiser7031(); - case UnifBoards::Ks7037: return new Kaiser7037(); - case UnifBoards::Ks7057: return new Kaiser7057(); - case UnifBoards::Lh10: return new Lh10(); case UnifBoards::Malee: return new Malee(); - case UnifBoards::MaliSB: return new MMC3_MaliSB(); case UnifBoards::NovelDiamond: return new NovelDiamond(); - case UnifBoards::Rt01: return new Rt01(); - case UnifBoards::Sachen9602: return new Sachen9602(); - case UnifBoards::Smb2j: return new Smb2j(); case UnifBoards::SssNrom256: return new FamicomBox(); - case UnifBoards::StreetHeroes: return new MMC3_StreetHeroes(); case UnifBoards::Super24in1Sc03: return new MMC3_Super24in1Sc03(); - case UnifBoards::Super40in1Ws: return new Super40in1Ws(); - case UnifBoards::T230: return new T230(); - case UnifBoards::T262: return new T262(); - case UnifBoards::Tf1201: return new Tf1201(); - case UnifBoards::Unl158B: return new Unl158B(); 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::UnlDripGame: return new UnlDripGame(); case UnifBoards::UnlPuzzle: return new UnlPuzzle(); case UnifBoards::UnlVrc7: return new UnlVrc7(); - case UnifBoards::Yoko: return new Yoko(); case MapperFactory::NsfMapperID: return new NsfMapper(); case MapperFactory::FdsMapperID: return new FDS(); diff --git a/Core/NESHeader.cpp b/Core/NESHeader.cpp index 709d57c0..73e1a531 100644 --- a/Core/NESHeader.cpp +++ b/Core/NESHeader.cpp @@ -7,7 +7,7 @@ uint16_t NESHeader::GetMapperID() { switch(GetRomHeaderVersion()) { case RomHeaderVersion::Nes2_0: - return ((Byte8 & 0x0F) << 4) | (Byte7 & 0xF0) | (Byte6 >> 4); + return ((Byte8 & 0x0F) << 8) | (Byte7 & 0xF0) | (Byte6 >> 4); default: case RomHeaderVersion::iNes: return (Byte7 & 0xF0) | (Byte6 >> 4); diff --git a/Core/UnifBoards.h b/Core/UnifBoards.h index f2eb075b..ec95357a 100644 --- a/Core/UnifBoards.h +++ b/Core/UnifBoards.h @@ -5,73 +5,23 @@ namespace UnifBoards { enum UnifBoards { UnknownBoard = 32768, - Tf1201, - Coolboy, - Smb2j, Malee, - StreetHeroes, - DreamTech01, - Edu2000, - Eh8813A, Gs2013, - Gs2004, NovelDiamond, - Kof97, - T230, - T262, - A65AS, - Bs5, - Bmc190in1, Ghostbusters63in1, - Bmc70in1, - Bmc70in1B, - Ax5705, Super24in1Sc03, - Super40in1Ws, Cc21, - Rt01, - Hp898f, Bb, Ac08, - Bmc11160, - Bmc12in1, - Bmc64in1NoRepeat, - Bmc810544CA1, - Bmc8157, - Bmc830118C, - Bmc8in1, - BmcF15, - BmcG146, - BmcNtd03, - Lh10, - Ks7012, - Ks7013B, - Ks7016, - Ks7017, - Ks7031, - Ks7037, - Ks7057, - MaliSB, Unl43272, - Bmc411120C, UnlPuzzle, Fk23C, Fk23Ca, Unl255in1, UnlD1038, - Sachen9602, - Unl158B, - Bmc80013B, - Dance2000, - CityFighter, UnlVrc7, - Yoko, Unl8237A, - BmcHpxx, - DragonFighter, BmcGn45, - UnlDripGame, SssNrom256, - Bmc60311C, }; } \ No newline at end of file diff --git a/Core/UnifLoader.cpp b/Core/UnifLoader.cpp index 8cb13adb..d6fb715d 100644 --- a/Core/UnifLoader.cpp +++ b/Core/UnifLoader.cpp @@ -2,42 +2,42 @@ #include "UnifLoader.h" std::unordered_map UnifLoader::_boardMappings = std::unordered_map { - { "11160", UnifBoards::Bmc11160 }, - { "12-IN-1", UnifBoards::Bmc12in1 }, + { "11160", 299 }, + { "12-IN-1", 331 }, { "13in1JY110", UnifBoards::UnknownBoard }, - { "190in1", UnifBoards::Bmc190in1 }, + { "190in1", 300 }, { "22211", 132 }, { "255in1", UnifBoards::Unl255in1 }, //Doesn't actually exist as a UNIF file (used to assign a mapper to the 255-in-1 rom) { "3D-BLOCK", UnifBoards::UnknownBoard }, - { "411120-C", UnifBoards::Bmc411120C }, + { "411120-C", 287 }, { "42in1ResetSwitch", 226 }, { "43272", UnifBoards::Unl43272 }, { "603-5052", 238 }, - { "64in1NoRepeat", UnifBoards::Bmc64in1NoRepeat }, - { "70in1", UnifBoards::Bmc70in1 }, - { "70in1B", UnifBoards::Bmc70in1B }, - { "810544-C-A1", UnifBoards::Bmc810544CA1 }, - { "8157", UnifBoards::Bmc8157 }, + { "64in1NoRepeat", 314 }, + { "70in1", 236 }, + { "70in1B", 236 }, + { "810544-C-A1", 261 }, + { "8157", 301 }, { "8237", 215 }, { "8237A", UnifBoards::Unl8237A }, - { "830118C", UnifBoards::Bmc830118C }, - { "A65AS", UnifBoards::A65AS }, + { "830118C", 348 }, + { "A65AS", 285 }, { "AC08", UnifBoards::Ac08 }, { "ANROM", 7 }, - { "AX5705", UnifBoards::Ax5705 }, + { "AX5705", 530 }, { "BB", UnifBoards::Bb }, - { "BS-5", UnifBoards::Bs5 }, + { "BS-5", 286 }, { "CC-21", UnifBoards::Cc21 }, - { "CITYFIGHT", UnifBoards::CityFighter }, - { "COOLBOY", UnifBoards::Coolboy }, + { "CITYFIGHT", 266 }, + { "COOLBOY", 268 }, { "10-24-C-A1", UnifBoards::UnknownBoard }, { "CNROM", 3 }, { "CPROM", 13 }, { "D1038", UnifBoards::UnlD1038 }, { "DANCE", UnifBoards::UnknownBoard }, - { "DANCE2000", UnifBoards::Dance2000 }, - { "DREAMTECH01", UnifBoards::DreamTech01 }, - { "EDU2000", UnifBoards::Edu2000 }, + { "DANCE2000", 518 }, + { "DREAMTECH01", 521 }, + { "EDU2000", 329 }, { "EKROM", 5 }, { "ELROM", 5 }, { "ETROM", 5 }, @@ -45,30 +45,30 @@ std::unordered_map UnifLoader::_boardMappings = std::unordered_map< { "FK23C", UnifBoards::Fk23C }, { "FK23CA", UnifBoards::Fk23Ca }, { "FS304", 162 }, - { "G-146", UnifBoards::BmcG146 }, + { "G-146", 349 }, { "GK-192", 58 }, - { "GS-2004", UnifBoards::Gs2004 }, + { "GS-2004", 283 }, { "GS-2013", UnifBoards::Gs2013 }, { "Ghostbusters63in1", UnifBoards::Ghostbusters63in1 }, { "H2288", 123 }, { "HKROM", 4 }, - { "KOF97", UnifBoards::Kof97 }, + { "KOF97", 263 }, { "KONAMI-QTAI", 190 }, { "KS7010", UnifBoards::UnknownBoard }, - { "KS7012", UnifBoards::Ks7012 }, - { "KS7013B", UnifBoards::Ks7013B }, - { "KS7016", UnifBoards::Ks7016 }, - { "KS7017", UnifBoards::Ks7017 }, + { "KS7012", 346 }, + { "KS7013B", 312 }, + { "KS7016", 306 }, + { "KS7017", 303 }, { "KS7030", UnifBoards::UnknownBoard }, - { "KS7031", UnifBoards::Ks7031 }, + { "KS7031", 305 }, { "KS7032", 142 }, - { "KS7037", UnifBoards::Ks7037 }, - { "KS7057", UnifBoards::Ks7057 }, + { "KS7037", 307 }, + { "KS7057", 302 }, { "LE05", UnifBoards::UnknownBoard }, - { "LH10", UnifBoards::Lh10 }, + { "LH10", 522 }, { "LH32", 125 }, { "LH53", UnifBoards::UnknownBoard }, - { "MALISB", UnifBoards::MaliSB }, + { "MALISB", 325 }, { "MARIO1-MALEE2", UnifBoards::Malee }, { "MHROM", 66 }, { "N625092", 221 }, @@ -76,7 +76,7 @@ std::unordered_map UnifLoader::_boardMappings = std::unordered_map< { "NROM-128", 0 }, { "NROM-256", 0 }, { "NTBROM", 68 }, - { "NTD-03", UnifBoards::BmcNtd03 }, + { "NTD-03", 290 }, { "NovelDiamond9999999in1", UnifBoards::NovelDiamond }, { "OneBus", UnifBoards::UnknownBoard }, { "PEC-586", UnifBoards::UnknownBoard }, @@ -91,7 +91,7 @@ std::unordered_map UnifLoader::_boardMappings = std::unordered_map< { "SA-016-1M", 146 }, { "SA-72007", 145 }, { "SA-72008", 133 }, - { "SA-9602B", UnifBoards::Sachen9602 }, + { "SA-9602B", 513 }, { "SA-NROM", 143 }, { "SAROM", 1 }, { "SBROM", 1 }, @@ -99,13 +99,13 @@ std::unordered_map UnifLoader::_boardMappings = std::unordered_map< { "SCROM", 1 }, { "SEROM", 1 }, { "SGROM", 1 }, - { "SHERO", UnifBoards::StreetHeroes }, + { "SHERO", 262 }, { "SKROM", 1 }, { "SL12", 116 }, { "SL1632", 14 }, { "SL1ROM", 1 }, { "SLROM", 1 }, - { "SMB2J", UnifBoards::Smb2j }, + { "SMB2J", 304 }, { "SNROM", 1 }, { "SOROM", 1 }, { "SSS-NROM-256", UnifBoards::SssNrom256 }, @@ -120,13 +120,13 @@ std::unordered_map UnifLoader::_boardMappings = std::unordered_map< { "SuperHIK8in1", 45 }, { "Supervision16in1", 53 }, { "T-227-1", UnifBoards::UnknownBoard }, - { "T-230", UnifBoards::T230 }, - { "T-262", UnifBoards::T262 }, + { "T-230", 529 }, + { "T-262", 265 }, { "TBROM", 4 }, { "TC-U01-1.5M", 147 }, { "TEK90", 90 }, { "TEROM", 4 }, - { "TF1201", UnifBoards::Tf1201 }, + { "TF1201", 298 }, { "TFROM", 4 }, { "TGROM", 4 }, { "TKROM", 4 }, @@ -144,23 +144,24 @@ std::unordered_map UnifLoader::_boardMappings = std::unordered_map< { "UNROM-512-32", 30 }, { "UOROM", 2 }, { "VRC7", UnifBoards::UnlVrc7 }, - { "YOKO", UnifBoards::Yoko }, + { "YOKO", 264 }, { "SB-2000", UnifBoards::UnknownBoard }, - { "158B", UnifBoards::Unl158B }, - { "DRAGONFIGHTER", UnifBoards::DragonFighter }, - { "EH8813A", UnifBoards::Eh8813A }, - { "HP898F", UnifBoards::Hp898f }, - { "F-15", UnifBoards::BmcF15 }, - { "RT-01", UnifBoards::Rt01 }, + { "158B", 258 }, + { "DRAGONFIGHTER", 292 }, + { "EH8813A", 519 }, + { "HP898F", 319 }, + { "F-15", 259 }, + { "RT-01", 328 }, { "81-01-31-C", UnifBoards::UnknownBoard }, - { "8-IN-1", UnifBoards::Bmc8in1 }, - { "WS", UnifBoards::Super40in1Ws }, - { "80013-B", UnifBoards::Bmc80013B }, + { "8-IN-1", 333 }, + { "WS", 332 }, + { "80013-B", 274 }, { "WAIXING-FW01", 227 }, { "WAIXING-FS005", UnifBoards::UnknownBoard }, - { "HPxx", UnifBoards::BmcHpxx }, + { "HPxx", 260 }, + { "HP2018A", 260 }, { "GN-45", UnifBoards::BmcGn45 }, //Doesn't actually exist as a UNIF file (used to assign a mapper to GN-45 boards) - { "DRIPGAME", UnifBoards::UnlDripGame }, - { "60311C", UnifBoards::Bmc60311C }, + { "DRIPGAME", 284 }, + { "60311C", 289 }, { "CHINA_ER_SAN2", 19 }, //Appears to be a mapper 19 hack specific for VirtuaNES (which adds chinese text on top of the PPU's output), unknown if a board actually exists }; \ No newline at end of file diff --git a/GUI.NET/Debugger/frmEditHeader.cs b/GUI.NET/Debugger/frmEditHeader.cs index e04e93a8..fef5bc62 100644 --- a/GUI.NET/Debugger/frmEditHeader.cs +++ b/GUI.NET/Debugger/frmEditHeader.cs @@ -356,7 +356,7 @@ namespace Mesen.GUI.Debugger { switch(GetRomHeaderVersion()) { case RomHeaderVersion.Nes2_0: - return ((_bytes[8] & 0x0F) << 4) | (_bytes[7] & 0xF0) | (_bytes[6] >> 4); + return ((_bytes[8] & 0x0F) << 8) | (_bytes[7] & 0xF0) | (_bytes[6] >> 4); default: case RomHeaderVersion.iNes: return (_bytes[7] & 0xF0) | (_bytes[6] >> 4);