Mesen-X/Core/MapperFactory.cpp

607 lines
19 KiB
C++
Raw Normal View History

#include "stdafx.h"
#include "MessageManager.h"
#include "MapperFactory.h"
2016-01-28 20:47:16 -05:00
#include "RomLoader.h"
2016-11-10 16:57:19 -05:00
#include "UnifBoards.h"
2016-11-06 14:21:57 -05:00
#include "A65AS.h"
2016-11-10 17:14:59 -05:00
#include "Ac08.h"
2016-07-17 11:40:39 -04:00
#include "Action53.h"
#include "ActionEnterprises.h"
2016-11-08 17:18:36 -05:00
#include "Ax5705.h"
#include "AXROM.h"
#include "Bandai74161_7432.h"
#include "BandaiFcg.h"
2016-08-11 19:12:40 -04:00
#include "BandaiKaraoke.h"
2016-11-10 17:07:34 -05:00
#include "Bb.h"
2016-11-06 14:37:37 -05:00
#include "BF909x.h"
#include "BF9096.h"
2016-11-11 17:01:46 -05:00
#include "Bmc11160.h"
2016-11-11 17:39:52 -05:00
#include "Bmc12in1.h"
2016-07-20 23:17:55 -04:00
#include "Bmc51.h"
2016-07-20 23:33:49 -04:00
#include "Bmc63.h"
2016-11-11 18:36:20 -05:00
#include "Bmc64in1NoRepeat.h"
#include "Bmc70in1.h"
2016-11-06 23:01:58 -05:00
#include "Bmc190in1.h"
2016-07-20 23:17:55 -04:00
#include "Bmc235.h"
2016-08-13 09:58:25 -04:00
#include "Bmc255.h"
#include "Bmc8157.h"
#include "Bmc80013B.h"
2016-11-11 18:56:52 -05:00
#include "Bmc810544CA1.h"
#include "Bmc830118C.h"
#include "Bmc8in1.h"
2016-11-10 17:28:32 -05:00
#include "BmcG146.h"
2016-11-10 17:45:20 -05:00
#include "BmcNtd03.h"
2015-12-31 09:51:01 -05:00
#include "BnRom.h"
2016-11-06 14:37:37 -05:00
#include "Bs5.h"
2016-07-20 20:11:37 -04:00
#include "Caltron41.h"
2016-11-08 20:12:54 -05:00
#include "Cc21.h"
#include "Cheapocabra.h"
#include "CityFighter.h"
#include "CNROM.h"
2015-12-28 15:16:50 -05:00
#include "CpRom.h"
#include "ColorDreams.h"
#include "ColorDreams46.h"
#include "Dance2000.h"
2016-06-18 12:49:53 -04:00
#include "DaouInfosys.h"
2016-11-06 12:07:02 -05:00
#include "DreamTech01.h"
2016-11-06 12:25:54 -05:00
#include "Edu2000.h"
2017-02-18 14:45:25 -05:00
#include "Eh8813A.h"
2016-01-28 20:47:16 -05:00
#include "FDS.h"
2016-06-14 18:42:53 -04:00
#include "FrontFareast.h"
2016-11-06 23:34:34 -05:00
#include "Ghostbusters63in1.h"
2017-04-12 21:40:30 -04:00
#include "GoldenFive.h"
2016-11-06 13:34:22 -05:00
#include "Gs2004.h"
2016-11-06 13:15:16 -05:00
#include "Gs2013.h"
#include "GxRom.h"
2016-07-17 14:29:47 -04:00
#include "Henggedianzi177.h"
#include "Henggedianzi179.h"
2016-11-10 16:57:19 -05:00
#include "Hp898f.h"
2015-12-28 21:07:32 -05:00
#include "IremG101.h"
2016-01-23 16:58:12 -05:00
#include "IremH3001.h"
2016-01-19 23:45:54 -05:00
#include "IremLrog017.h"
2016-01-18 18:24:22 -05:00
#include "IremTamS1.h"
2016-01-23 16:02:11 -05:00
#include "JalecoJf11_14.h"
2016-06-18 10:55:32 -04:00
#include "JalecoJf13.h"
2016-01-19 23:32:02 -05:00
#include "JalecoJf16.h"
2016-01-19 23:12:47 -05:00
#include "JalecoJf17_19.h"
#include "JalecoJfxx.h"
2015-12-28 20:07:27 -05:00
#include "JalecoSs88006.h"
#include "JyCompany.h"
#include "Kaiser202.h"
2016-11-12 10:27:20 -05:00
#include "Kaiser7012.h"
2016-11-12 10:21:04 -05:00
#include "Kaiser7013B.h"
2016-11-09 20:03:49 -05:00
#include "Kaiser7016.h"
2018-06-17 00:23:25 -04:00
#include "Kaiser7017.h"
#include "Kaiser7022.h"
2018-06-17 13:09:21 -04:00
#include "Kaiser7031.h"
2016-11-12 09:47:43 -05:00
#include "Kaiser7037.h"
2016-11-12 10:09:42 -05:00
#include "Kaiser7057.h"
#include "Kaiser7058.h"
2016-11-12 09:18:52 -05:00
#include "Lh10.h"
#include "Lh32.h"
2016-11-06 11:28:15 -05:00
#include "Malee.h"
2017-02-18 12:48:06 -05:00
#include "MagicKidGooGoo.h"
2016-05-19 18:54:49 -04:00
#include "Mapper15.h"
2016-07-23 08:06:44 -04:00
#include "Mapper35.h"
#include "Mapper39.h"
2016-07-16 20:32:02 -04:00
#include "Mapper40.h"
2016-07-16 22:17:21 -04:00
#include "Mapper42.h"
2016-11-09 19:46:46 -05:00
#include "Mapper43.h"
2016-07-16 20:39:48 -04:00
#include "Mapper50.h"
2016-01-23 11:33:11 -05:00
#include "Mapper57.h"
2016-01-19 20:48:09 -05:00
#include "Mapper58.h"
2016-05-19 19:18:01 -04:00
#include "Mapper60.h"
2016-01-23 11:44:40 -05:00
#include "Mapper61.h"
2016-01-23 11:57:24 -05:00
#include "Mapper62.h"
2016-10-30 11:46:06 -04:00
#include "Mapper83.h"
2016-01-23 16:20:28 -05:00
#include "Mapper91.h"
2016-07-24 13:28:18 -04:00
#include "Mapper103.h"
2016-08-20 10:02:23 -04:00
#include "Mapper106.h"
2016-01-19 22:33:29 -05:00
#include "Mapper107.h"
2016-07-23 13:17:06 -04:00
#include "Mapper108.h"
2016-01-23 14:38:54 -05:00
#include "Mapper112.h"
2016-08-20 12:21:07 -04:00
#include "Mapper117.h"
2016-08-12 18:49:23 -04:00
#include "Mapper120.h"
2016-07-17 14:42:50 -04:00
#include "Mapper170.h"
2017-05-08 22:55:23 -04:00
#include "Mapper174.h"
2016-08-13 11:52:52 -04:00
#include "Mapper183.h"
2016-01-18 22:48:09 -05:00
#include "Mapper200.h"
2016-01-20 19:08:36 -05:00
#include "Mapper201.h"
2016-01-20 19:01:10 -05:00
#include "Mapper202.h"
2016-01-20 18:42:03 -05:00
#include "Mapper203.h"
2016-08-13 08:21:25 -04:00
#include "Mapper204.h"
2016-07-24 09:15:38 -04:00
#include "Mapper212.h"
2016-08-12 20:59:56 -04:00
#include "Mapper213.h"
2016-08-12 21:02:29 -04:00
#include "Mapper214.h"
2016-09-05 14:00:51 -04:00
#include "Mapper216.h"
2016-06-18 18:16:25 -04:00
#include "Mapper218.h"
2016-10-30 10:32:01 -04:00
#include "Mapper220.h"
2016-07-24 11:40:18 -04:00
#include "Mapper221.h"
2016-08-12 20:48:16 -04:00
#include "Mapper222.h"
2016-01-23 14:58:19 -05:00
#include "Mapper225.h"
2016-01-23 21:54:15 -05:00
#include "Mapper226.h"
2016-06-19 11:42:55 -04:00
#include "Mapper227.h"
2016-08-12 20:16:18 -04:00
#include "Mapper229.h"
2016-01-23 15:15:42 -05:00
#include "Mapper230.h"
2016-01-18 22:26:54 -05:00
#include "Mapper231.h"
2016-08-12 19:54:03 -04:00
#include "Mapper233.h"
2016-07-23 12:26:02 -04:00
#include "Mapper234.h"
2016-01-18 21:54:04 -05:00
#include "Mapper240.h"
2016-02-22 20:14:40 -05:00
#include "Mapper241.h"
2016-01-18 21:46:53 -05:00
#include "Mapper242.h"
2016-08-12 19:05:32 -04:00
#include "Mapper244.h"
2016-01-18 22:08:00 -05:00
#include "Mapper246.h"
2016-08-13 14:10:03 -04:00
#include "Mapper253.h"
#include "MMC1.h"
2016-08-20 14:49:25 -04:00
#include "MMC1_105.h"
2016-06-18 15:49:00 -04:00
#include "MMC1_155.h"
#include "MMC2.h"
#include "MMC3.h"
2016-01-20 20:32:49 -05:00
#include "MMC3_12.h"
2016-07-24 10:14:56 -04:00
#include "MMC3_14.h"
2016-01-20 19:44:52 -05:00
#include "MMC3_37.h"
2016-01-21 01:01:25 -05:00
#include "MMC3_44.h"
2016-01-24 00:40:56 -05:00
#include "MMC3_45.h"
2016-01-20 21:06:56 -05:00
#include "MMC3_47.h"
2016-01-23 09:38:20 -05:00
#include "MMC3_49.h"
2016-01-23 10:33:23 -05:00
#include "MMC3_52.h"
2016-07-30 20:45:52 -04:00
#include "MMC3_114.h"
2016-01-18 19:33:50 -05:00
#include "MMC3_115.h"
2016-08-12 18:40:43 -04:00
#include "MMC3_121.h"
2016-09-05 14:22:17 -04:00
#include "MMC3_123.h"
2016-10-22 09:13:45 -04:00
#include "MMC3_126.h"
2016-09-05 13:45:40 -04:00
#include "MMC3_134.h"
2016-07-23 09:21:43 -04:00
#include "MMC3_165.h"
2016-07-17 09:58:51 -04:00
#include "MMC3_182.h"
2016-07-23 15:20:25 -04:00
#include "MMC3_187.h"
2014-08-04 15:55:20 -04:00
#include "MMC3_189.h"
2016-08-26 19:09:34 -04:00
#include "MMC3_196.h"
2016-07-23 12:58:44 -04:00
#include "MMC3_197.h"
#include "MMC3_198.h"
2016-10-23 20:51:01 -04:00
#include "MMC3_199.h"
2016-01-20 19:32:28 -05:00
#include "MMC3_205.h"
2016-10-24 19:18:28 -04:00
#include "MMC3_215.h"
2016-10-25 19:11:53 -04:00
#include "MMC3_217.h"
2016-08-26 19:55:39 -04:00
#include "MMC3_219.h"
2016-08-12 19:41:47 -04:00
#include "MMC3_238.h"
2016-07-22 20:27:35 -04:00
#include "MMC3_245.h"
2016-07-23 21:53:35 -04:00
#include "MMC3_249.h"
2016-07-23 21:29:16 -04:00
#include "MMC3_250.h"
2016-08-12 19:18:14 -04:00
#include "MMC3_254.h"
2016-11-12 11:42:04 -05:00
#include "MMC3_Bmc411120C.h"
2016-11-11 19:11:52 -05:00
#include "MMC3_BmcF15.h"
#include "MMC3_ChrRam.h"
2016-10-26 22:04:05 -04:00
#include "MMC3_Coolboy.h"
2017-04-11 21:04:13 -04:00
#include "MMC3_Fk23C.h"
2016-11-06 13:51:18 -05:00
#include "MMC3_Kof97.h"
2016-11-12 11:05:45 -05:00
#include "MMC3_MaliSB.h"
2016-11-06 12:00:45 -05:00
#include "MMC3_StreetHeroes.h"
2016-11-08 19:51:53 -05:00
#include "MMC3_Super24in1Sc03.h"
2015-12-28 13:57:26 -05:00
#include "MMC4.h"
#include "MMC5.h"
#include "Namco108.h"
#include "Namco108_76.h"
#include "Namco108_88.h"
#include "Namco108_95.h"
#include "Namco108_154.h"
#include "Namco163.h"
#include "Nanjing.h"
2015-12-31 09:51:01 -05:00
#include "Nina01.h"
2015-12-30 11:47:36 -05:00
#include "Nina03_06.h"
#include "NovelDiamond.h"
#include "NROM.h"
2016-07-16 20:13:36 -04:00
#include "NsfCart31.h"
2016-06-25 20:46:54 -04:00
#include "NsfMapper.h"
2016-01-19 16:59:01 -05:00
#include "NtdecTc112.h"
2016-07-23 16:25:52 -04:00
#include "OekaKids.h"
2016-07-29 17:28:01 -04:00
#include "Racermate.h"
2016-01-23 20:02:20 -05:00
#include "Rambo1.h"
#include "Rambo1_158.h"
2016-11-09 20:14:55 -05:00
#include "Rt01.h"
2016-07-17 12:18:52 -04:00
#include "Sachen_133.h"
2016-08-13 14:26:56 -04:00
#include "Sachen_136.h"
2016-06-19 01:02:09 -04:00
#include "Sachen_143.h"
2015-12-31 10:51:00 -05:00
#include "Sachen_145.h"
#include "Sachen_147.h"
2015-12-31 11:04:26 -05:00
#include "Sachen_148.h"
#include "Sachen_149.h"
#include "Sachen74LS374N.h"
#include "Sachen74LS374NB.h"
#include "Sachen8259.h"
#include "Sachen9602.h"
2017-04-21 12:43:09 -04:00
#include "SealieComputing.h"
2016-11-06 11:00:50 -05:00
#include "Smb2j.h"
#include "StudyBox.h"
2016-07-23 10:58:45 -04:00
#include "Subor166.h"
2016-01-23 12:51:10 -05:00
#include "Sunsoft3.h"
#include "Sunsoft4.h"
2015-12-30 20:31:54 -05:00
#include "Sunsoft89.h"
#include "Sunsoft93.h"
#include "Sunsoft184.h"
#include "SunsoftFme7.h"
2016-07-23 17:01:14 -04:00
#include "Supervision.h"
2016-11-08 20:01:34 -05:00
#include "Super40in1Ws.h"
2016-11-06 14:07:50 -05:00
#include "T262.h"
2015-12-28 23:21:10 -05:00
#include "TaitoTc0190.h"
2016-07-16 23:19:02 -04:00
#include "TaitoTc0690.h"
2015-12-30 18:26:40 -05:00
#include "TaitoX1005.h"
2016-02-22 19:52:58 -05:00
#include "TaitoX1017.h"
#include "Tf1201.h"
2016-07-20 19:39:54 -04:00
#include "Txc22000.h"
#include "Txc22211A.h"
#include "Txc22211B.h"
#include "Txc22211C.h"
2016-01-23 21:09:01 -05:00
#include "TxSRom.h"
2018-06-16 22:35:06 -04:00
#include "Unl158B.h"
2017-04-12 20:23:32 -04:00
#include "Unl255in1.h"
2016-11-12 11:41:39 -05:00
#include "Unl43272.h"
2017-04-12 20:52:16 -04:00
#include "UnlD1038.h"
#include "UnlPci556.h"
2017-04-03 23:45:24 -04:00
#include "UnlPuzzle.h"
#include "UNROM.h"
2016-01-18 18:43:06 -05:00
#include "UnRom_94.h"
2016-01-18 18:03:42 -05:00
#include "UnRom_180.h"
2017-04-21 12:29:03 -04:00
#include "UnRom512.h"
2015-12-30 20:59:02 -05:00
#include "VRC1.h"
#include "VRC2_4.h"
2016-01-23 13:07:56 -05:00
#include "VRC3.h"
#include "VRC6.h"
2016-01-24 17:05:53 -05:00
#include "VRC7.h"
#include "VsSystem.h"
2016-08-26 18:13:35 -04:00
#include "Waixing162.h"
2016-06-19 12:45:39 -04:00
#include "Waixing164.h"
#include "Waixing176.h"
2016-07-22 21:38:03 -04:00
#include "Waixing178.h"
2016-07-17 09:41:19 -04:00
#include "Waixing252.h"
2016-07-16 20:13:36 -04:00
/*
Supported mappers:
... : bad mappers
--- : potentially bad mappers
2016-07-23 21:29:16 -04:00
=== : not supported by both Nestopia & FCEUX
2016-10-30 11:46:06 -04:00
??? : No known roms
2016-07-16 20:13:36 -04:00
-----------------------------------------------------------------
2016-07-24 10:14:56 -04:00
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11| 12| 13| 14| 15|
2017-04-21 12:43:09 -04:00
| 16| 17| 18| 19|...| 21| 22| 23| 24| 25| 26| 27| 28| 29| 30| 31|
2016-11-09 19:46:46 -05:00
| 32| 33| 34| 35| 36| 37| 38|---| 40| 41| 42| 43| 44| 45| 46| 47|
| 48| 49| 50| 51| 52| 53| 54|???| 56| 57| 58|===| 60| 61| 62| 63|
2016-07-16 20:13:36 -04:00
| 64| 65| 66| 67| 68| 69| 70| 71| 72| 73| 74| 75| 76| 77| 78| 79|
2016-10-30 11:46:06 -04:00
| 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|
|112|113|114|115| |117|118|119|120|121|===|123|===|125|126|===|
2016-09-05 13:45:40 -04:00
|===|===|===|===|132|133|134|===|136|137|138|139|140|141|142|143|
|144|145|146|147|148|149|150|151|152|153|154|155|156|157|158|159|
2017-05-08 22:55:23 -04:00
|---|===|162|163|164|165|166|167|168|===|170|171|172|173|174|175|
2017-02-18 14:45:25 -05:00
|176|177|178|179|180|---|182|183|184|185|186|187|188|189|190|191|
2016-10-23 20:51:01 -04:00
|192|193|194|195|196|197| |199|200|201|202|203|204|205|206|207|
2016-10-30 11:46:06 -04:00
|???|209|210|211|212|213|214|215|216|217|218|219|220|221|222|???|
|???|225|226|227|228|229|230|231|232|233|234|235|236|===|238|===|
2016-08-13 14:10:03 -04:00
|240|241|242|243|244|245|246|===|===|249|250|===|252|253|254|255|
2016-07-16 20:13:36 -04:00
-----------------------------------------------------------------
*/
2016-01-28 20:47:16 -05:00
BaseMapper* MapperFactory::GetMapperFromID(RomData &romData)
{
#ifdef _DEBUG
MessageManager::DisplayMessage("GameInfo", "Mapper", std::to_string(romData.MapperID), std::to_string(romData.SubMapperID));
#endif
2016-01-28 20:47:16 -05:00
switch(romData.MapperID) {
case 0: return new NROM();
case 1: return new MMC1();
case 2: return new UNROM();
case 3: return new CNROM(false);
case 4: return new MMC3();
case 5: return new MMC5();
2016-06-14 18:42:53 -04:00
case 6: return new FrontFareast();
case 7: return new AXROM();
2016-06-14 18:42:53 -04:00
case 8: return new FrontFareast();
case 9: return new MMC2();
2015-12-28 13:57:26 -05:00
case 10: return new MMC4();
case 11: return new ColorDreams();
2016-01-20 20:32:49 -05:00
case 12: return new MMC3_12();
2015-12-28 15:16:50 -05:00
case 13: return new CpRom();
2016-07-24 10:14:56 -04:00
case 14: return new MMC3_14();
2016-05-19 18:54:49 -04:00
case 15: return new Mapper15();
case 16: return new BandaiFcg();
2016-06-14 18:42:53 -04:00
case 17: return new FrontFareast();
2015-12-28 20:07:27 -05:00
case 18: return new JalecoSs88006();
case 19: return new Namco163();
case 21: return new VRC2_4();
case 22: return new VRC2_4();
case 23: return new VRC2_4();
case 24: return new VRC6(VRCVariant::VRC6a);
case 25: return new VRC2_4();
case 26: return new VRC6(VRCVariant::VRC6b);
case 27: return new VRC2_4();
2016-07-17 11:40:39 -04:00
case 28: return new Action53();
2017-04-21 12:43:09 -04:00
case 29: return new SealieComputing();
2017-04-21 12:29:03 -04:00
case 30: return new UnRom512();
2016-07-16 20:13:36 -04:00
case 31: return new NsfCart31();
2015-12-28 21:07:32 -05:00
case 32: return new IremG101();
2015-12-28 23:21:10 -05:00
case 33: return new TaitoTc0190();
case 34:
switch(romData.SubMapperID) {
case 0: return (romData.ChrRom.size() > 0) ? (BaseMapper*)new Nina01() : (BaseMapper*)new BnRom(); //BnROM uses CHR RAM (so no CHR rom in the .NES file)
case 1: return new Nina01();
case 2: return new BnRom();
}
2016-07-23 08:06:44 -04:00
case 35: return new Mapper35();
2016-07-20 19:39:54 -04:00
case 36: return new Txc22000();
2016-01-20 19:44:52 -05:00
case 37: return new MMC3_37();
case 38: return new UnlPci556();
case 39: return new Mapper39();
2016-07-16 20:32:02 -04:00
case 40: return new Mapper40();
2016-07-20 20:11:37 -04:00
case 41: return new Caltron41();
2016-07-16 22:17:21 -04:00
case 42: return new Mapper42();
2016-11-09 19:46:46 -05:00
case 43: return new Mapper43();
2016-01-21 01:01:25 -05:00
case 44: return new MMC3_44();
2016-01-24 00:40:56 -05:00
case 45: return new MMC3_45();
case 46: return new ColorDreams46();
2016-01-20 21:06:56 -05:00
case 47: return new MMC3_47();
2016-07-16 23:19:02 -04:00
case 48: return new TaitoTc0690();
2016-01-23 09:38:20 -05:00
case 49: return new MMC3_49();
2016-07-16 20:39:48 -04:00
case 50: return new Mapper50();
2016-07-20 23:17:55 -04:00
case 51: return new Bmc51();
2016-01-23 10:33:23 -05:00
case 52: return new MMC3_52();
2016-07-23 17:01:14 -04:00
case 53: return new Supervision();
case 54: return new NovelDiamond();
case 56: return new Kaiser202();
2016-01-23 11:33:11 -05:00
case 57: return new Mapper57();
2016-01-19 20:48:09 -05:00
case 58: return new Mapper58();
2016-05-19 19:18:01 -04:00
case 60: return new Mapper60(); //Partial support?
2016-01-23 11:44:40 -05:00
case 61: return new Mapper61();
2016-01-23 11:57:24 -05:00
case 62: return new Mapper62();
2016-07-20 23:33:49 -04:00
case 63: return new Bmc63();
2016-01-23 20:02:20 -05:00
case 64: return new Rambo1();
2016-01-23 16:58:12 -05:00
case 65: return new IremH3001();
case 66: return new GxRom();
case 67: return new Sunsoft3();
case 68: return new Sunsoft4();
case 69: return new SunsoftFme7();
case 70: return new Bandai74161_7432(false);
case 71: return new BF909x();
2016-01-19 23:12:47 -05:00
case 72: return new JalecoJf17_19(false);
2016-01-23 13:07:56 -05:00
case 73: return new VRC3();
case 74: return new MMC3_ChrRam(0x08, 0x09, 2);
2015-12-30 20:59:02 -05:00
case 75: return new VRC1();
case 76: return new Namco108_76();
2016-01-19 23:45:54 -05:00
case 77: return new IremLrog017();
case 78: return new JalecoJf16();
2015-12-31 08:47:33 -05:00
case 79: return new Nina03_06(false);
case 80: return new TaitoX1005(false);
2016-02-22 19:52:58 -05:00
case 82: return new TaitoX1017();
2016-10-30 11:46:06 -04:00
case 83: return new Mapper83();
2016-01-24 17:05:53 -05:00
case 85: return new VRC7();
2016-06-18 10:55:32 -04:00
case 86: return new JalecoJf13();
case 87: return new JalecoJfxx(false);
case 88: return new Namco108_88();
2015-12-30 20:31:54 -05:00
case 89: return new Sunsoft89();
case 90: return new JyCompany();
2016-01-23 16:20:28 -05:00
case 91: return new Mapper91();
2016-01-19 23:12:47 -05:00
case 92: return new JalecoJf17_19(true);
2015-12-30 20:31:54 -05:00
case 93: return new Sunsoft93();
2016-01-18 18:43:06 -05:00
case 94: return new UnRom_94();
case 95: return new Namco108_95();
2016-07-23 16:25:52 -04:00
case 96: return new OekaKids();
2016-01-18 18:24:22 -05:00
case 97: return new IremTamS1();
case 99: return new VsSystem();
case 101: return new JalecoJfxx(true);
2016-07-24 13:28:18 -04:00
case 103: return new Mapper103();
2017-04-12 21:40:30 -04:00
case 104: return new GoldenFive();
2016-08-20 14:49:25 -04:00
case 105: return new MMC1_105(); break;
2016-08-20 10:02:23 -04:00
case 106: return new Mapper106();
2016-01-19 22:33:29 -05:00
case 107: return new Mapper107();
2016-07-23 13:17:06 -04:00
case 108: return new Mapper108();
case 111: return new Cheapocabra();
2016-01-23 14:38:54 -05:00
case 112: return new Mapper112();
2015-12-31 08:47:33 -05:00
case 113: return new Nina03_06(true);
2016-07-30 20:45:52 -04:00
case 114: return new MMC3_114();
2016-01-18 19:33:50 -05:00
case 115: return new MMC3_115();
2016-08-20 12:21:07 -04:00
case 117: return new Mapper117();
2016-01-23 21:09:01 -05:00
case 118: return new TxSRom();
case 119: return new MMC3_ChrRam(0x40, 0x7F, 8);
2016-08-12 18:49:23 -04:00
case 120: return new Mapper120();
2016-08-12 18:40:43 -04:00
case 121: return new MMC3_121();
2016-09-05 14:22:17 -04:00
case 123: return new MMC3_123();
case 125: return new Lh32();
2016-10-22 09:13:45 -04:00
case 126: return new MMC3_126();
case 132: return new Txc22211A();
2016-07-17 12:18:52 -04:00
case 133: return new Sachen_133();
2016-09-05 13:45:40 -04:00
case 134: return new MMC3_134();
2016-08-13 14:26:56 -04:00
case 136: return new Sachen_136();
case 137: return new Sachen8259(Sachen8259Variant::Sachen8259D);
case 138: return new Sachen8259(Sachen8259Variant::Sachen8259B);
case 139: return new Sachen8259(Sachen8259Variant::Sachen8259C);
2016-01-23 16:02:11 -05:00
case 140: return new JalecoJf11_14();
case 141: return new Sachen8259(Sachen8259Variant::Sachen8259A);
case 142: return new Kaiser202();
2016-06-19 01:02:09 -04:00
case 143: return new Sachen_143();
2016-06-18 11:24:30 -04:00
case 144: return new ColorDreams();
2015-12-31 10:51:00 -05:00
case 145: return new Sachen_145();
case 146: return new Nina03_06(false);
case 147: return new Sachen_147();
2015-12-31 11:04:26 -05:00
case 148: return new Sachen_148();
case 149: return new Sachen_149();
case 150: return new Sachen74LS374NB();
2016-06-18 10:31:41 -04:00
case 151: return new VRC1();
case 152: return new Bandai74161_7432(true);
case 153: return new BandaiFcg();
case 154: return new Namco108_154();
2016-06-18 15:49:00 -04:00
case 155: return new MMC1_155();
2016-06-18 12:49:53 -04:00
case 156: return new DaouInfosys();
case 157: return new BandaiFcg();
case 158: return new Rambo1_158();
case 159: return new BandaiFcg();
2016-08-26 18:13:35 -04:00
case 162: return new Waixing162();
case 163: return new Nanjing();
2016-06-19 12:45:39 -04:00
case 164: return new Waixing164();
2016-07-23 09:21:43 -04:00
case 165: return new MMC3_165();
2016-07-23 10:58:45 -04:00
case 166: return new Subor166();
case 167: return new Subor166();
2016-07-29 17:28:01 -04:00
case 168: return new Racermate();
2016-07-17 14:42:50 -04:00
case 170: return new Mapper170();
case 171: return new Kaiser7058();
case 172: return new Txc22211B();
case 173: return new Txc22211C();
2017-05-08 22:55:23 -04:00
case 174: return new Mapper174();
case 175: return new Kaiser7022();
case 176: return new Waixing176();
2016-07-17 14:29:47 -04:00
case 177: return new Henggedianzi177();
2016-07-22 21:38:03 -04:00
case 178: return new Waixing178();
2016-07-17 14:29:47 -04:00
case 179: return new Henggedianzi179();
2016-01-18 18:03:42 -05:00
case 180: return new UnRom_180();
2016-07-17 09:58:51 -04:00
case 182: return new MMC3_182();
2016-08-13 11:52:52 -04:00
case 183: return new Mapper183();
2015-12-30 20:31:54 -05:00
case 184: return new Sunsoft184();
case 185: return new CNROM(true);
case 186: return new StudyBox();
2016-07-23 15:20:25 -04:00
case 187: return new MMC3_187();
2016-08-11 19:12:40 -04:00
case 188: return new BandaiKaraoke();
2014-08-04 15:55:20 -04:00
case 189: return new MMC3_189();
2017-02-18 12:48:06 -05:00
case 190: return new MagicKidGooGoo();
case 191: return new MMC3_ChrRam(0x80, 0xFF, 2);
case 192: return new MMC3_ChrRam(0x08, 0x0B, 4);
2016-01-19 16:59:01 -05:00
case 193: return new NtdecTc112();
case 194: return new MMC3_ChrRam(0x00, 0x01, 2);
case 195: return new MMC3_ChrRam(0x00, 0x03, 4);
2016-08-26 19:09:34 -04:00
case 196: return new MMC3_196();
2016-10-23 20:51:01 -04:00
case 197: return new MMC3_197();
case 198: return new MMC3_198();
2016-10-23 20:51:01 -04:00
case 199: return new MMC3_199();
2016-01-18 22:48:09 -05:00
case 200: return new Mapper200();
2016-01-20 19:08:36 -05:00
case 201: return new Mapper201();
2016-01-20 19:01:10 -05:00
case 202: return new Mapper202();
2016-01-20 18:42:03 -05:00
case 203: return new Mapper203();
2016-08-13 08:21:25 -04:00
case 204: return new Mapper204();
2016-01-20 19:32:28 -05:00
case 205: return new MMC3_205();
case 206: return new Namco108();
case 207: return new TaitoX1005(true);
case 209: return new JyCompany();
case 210: return new Namco163();
case 211: return new JyCompany();
2016-07-24 09:15:38 -04:00
case 212: return new Mapper212();
2016-08-12 20:59:56 -04:00
case 213: return new Mapper213();
2016-08-12 21:02:29 -04:00
case 214: return new Mapper214();
2016-10-24 19:18:28 -04:00
case 215: return new MMC3_215();
2016-09-05 14:00:51 -04:00
case 216: return new Mapper216();
2016-10-25 19:11:53 -04:00
case 217: return new MMC3_217();
2016-06-18 18:16:25 -04:00
case 218: return new Mapper218();
2016-08-26 19:55:39 -04:00
case 219: return new MMC3_219();
2016-10-30 10:32:01 -04:00
case 220: return new Mapper220();
2016-07-24 11:40:18 -04:00
case 221: return new Mapper221();
2016-08-12 20:48:16 -04:00
case 222: return new Mapper222();
2016-01-23 14:58:19 -05:00
case 225: return new Mapper225();
2016-01-23 21:54:15 -05:00
case 226: return new Mapper226();
2016-06-19 11:42:55 -04:00
case 227: return new Mapper227();
case 228: return new ActionEnterprises();
2016-08-12 20:16:18 -04:00
case 229: return new Mapper229();
2016-01-23 15:15:42 -05:00
case 230: return new Mapper230();
2016-01-18 22:26:54 -05:00
case 231: return new Mapper231();
2016-01-18 20:47:29 -05:00
case 232: return new BF9096();
2016-08-12 19:54:03 -04:00
case 233: return new Mapper233();
2016-07-23 12:26:02 -04:00
case 234: return new Mapper234();
2016-07-20 21:06:36 -04:00
case 235: return new Bmc235();
case 236: return new Bmc70in1();
2016-08-12 19:41:47 -04:00
case 238: return new MMC3_238();
2016-01-18 21:54:04 -05:00
case 240: return new Mapper240();
2016-02-22 20:14:40 -05:00
case 241: return new Mapper241();
2016-01-18 21:46:53 -05:00
case 242: return new Mapper242();
case 243: return new Sachen74LS374N();
2016-08-12 19:05:32 -04:00
case 244: return new Mapper244();
2016-07-22 20:27:35 -04:00
case 245: return new MMC3_245();
2016-01-18 22:08:00 -05:00
case 246: return new Mapper246();
2016-07-23 21:53:35 -04:00
case 249: return new MMC3_249();
2016-07-23 21:29:16 -04:00
case 250: return new MMC3_250();
2016-07-17 09:41:19 -04:00
case 252: return new Waixing252();
2016-08-13 14:10:03 -04:00
case 253: return new Mapper253();
2016-08-12 19:18:14 -04:00
case 254: return new MMC3_254();
2016-08-13 09:58:25 -04:00
case 255: return new Bmc255();
2016-01-28 20:47:16 -05:00
2016-11-10 16:57:19 -05:00
case UnifBoards::A65AS: return new A65AS();
2016-11-10 17:14:59 -05:00
case UnifBoards::Ac08: return new Ac08();
2016-11-10 16:57:19 -05:00
case UnifBoards::Ax5705: return new Ax5705();
2016-11-10 17:07:34 -05:00
case UnifBoards::Bb: return new Bb();
2016-11-11 17:01:46 -05:00
case UnifBoards::Bmc11160: return new Bmc11160();
2016-11-11 17:39:52 -05:00
case UnifBoards::Bmc12in1: return new Bmc12in1();
2016-11-12 11:42:04 -05:00
case UnifBoards::Bmc411120C: return new MMC3_Bmc411120C();
2016-11-11 18:36:20 -05:00
case UnifBoards::Bmc64in1NoRepeat: return new Bmc64in1NoRepeat();
2016-11-10 16:57:19 -05:00
case UnifBoards::Bmc70in1: return new Bmc70in1();
case UnifBoards::Bmc70in1B: return new Bmc70in1();
case UnifBoards::Bmc190in1: return new Bmc190in1();
2016-11-11 18:56:52 -05:00
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();
2016-11-11 19:11:52 -05:00
case UnifBoards::BmcF15: return new MMC3_BmcF15();
2016-11-10 17:28:32 -05:00
case UnifBoards::BmcG146: return new BmcG146();
2016-11-10 17:45:20 -05:00
case UnifBoards::BmdNtd03: return new BmcNtd03();
2016-11-10 16:57:19 -05:00
case UnifBoards::Bs5: return new Bs5();
case UnifBoards::Cc21: return new Cc21();
case UnifBoards::CityFighter: return new CityFighter();
2016-11-10 16:57:19 -05:00
case UnifBoards::Coolboy: return new MMC3_Coolboy();
case UnifBoards::Dance2000: return new Dance2000();
2016-11-10 16:57:19 -05:00
case UnifBoards::DreamTech01: return new DreamTech01();
case UnifBoards::Edu2000: return new Edu2000();
2017-02-18 14:45:25 -05:00
case UnifBoards::Eh8813A: return new Eh8813A();
2017-04-11 21:04:13 -04:00
case UnifBoards::Fk23C: return new MMC3_Fk23C(false);
case UnifBoards::Fk23Ca: return new MMC3_Fk23C(true);
2016-11-10 16:57:19 -05:00
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();
2016-11-12 10:27:20 -05:00
case UnifBoards::Ks7012: return new Kaiser7012();
2016-11-12 10:21:04 -05:00
case UnifBoards::Ks7013B: return new Kaiser7013B();
2016-11-10 16:57:19 -05:00
case UnifBoards::Ks7016: return new Kaiser7016();
2018-06-17 00:23:25 -04:00
case UnifBoards::Ks7017: return new Kaiser7017();
2018-06-17 13:09:21 -04:00
case UnifBoards::Ks7031: return new Kaiser7031();
2016-11-12 09:47:43 -05:00
case UnifBoards::Ks7037: return new Kaiser7037();
2016-11-12 10:09:42 -05:00
case UnifBoards::Ks7057: return new Kaiser7057();
2016-11-12 09:18:52 -05:00
case UnifBoards::Lh10: return new Lh10();
2016-11-10 16:57:19 -05:00
case UnifBoards::Malee: return new Malee();
2016-11-12 11:05:45 -05:00
case UnifBoards::MaliSB: return new MMC3_MaliSB();
2016-11-10 16:57:19 -05:00
case UnifBoards::NovelDiamond: return new NovelDiamond();
case UnifBoards::Rt01: return new Rt01();
case UnifBoards::Sachen9602: return new Sachen9602();
2016-11-10 16:57:19 -05:00
case UnifBoards::Smb2j: return new Smb2j();
case UnifBoards::StreetHeroes: return new MMC3_StreetHeroes();
case UnifBoards::Super24in1Sc03: return new MMC3_Super24in1Sc03();
case UnifBoards::Super40in1Ws: return new Super40in1Ws();
case UnifBoards::T262: return new T262();
case UnifBoards::Tf1201: return new Tf1201();
2018-06-16 22:35:06 -04:00
case UnifBoards::Unl158B: return new Unl158B();
2017-04-12 20:23:32 -04:00
case UnifBoards::Unl255in1: return new Unl255in1();
2016-11-12 11:41:39 -05:00
case UnifBoards::Unl43272: return new Unl43272();
2017-04-12 20:52:16 -04:00
case UnifBoards::UnlD1038: return new UnlD1038();
2017-04-03 23:45:24 -04:00
case UnifBoards::UnlPuzzle: return new UnlPuzzle();
2016-06-25 20:46:54 -04:00
case MapperFactory::NsfMapperID: return new NsfMapper();
2016-01-28 20:47:16 -05:00
case MapperFactory::FdsMapperID: return new FDS();
}
if(romData.MapperID != UnifBoards::UnknownBoard) {
MessageManager::DisplayMessage("Error", "UnsupportedMapper", "iNES #" + std::to_string(romData.MapperID));
}
return nullptr;
}
shared_ptr<BaseMapper> MapperFactory::InitializeFromFile(string romFilename, vector<uint8_t> &fileData)
{
2016-01-28 20:47:16 -05:00
RomLoader loader;
if(loader.LoadFile(romFilename, fileData)) {
2016-01-28 20:47:16 -05:00
RomData romData = loader.GetRomData();
shared_ptr<BaseMapper> mapper(GetMapperFromID(romData));
if(mapper) {
2016-01-28 20:47:16 -05:00
mapper->Initialize(romData);
return mapper;
}
}
return nullptr;
}
2015-12-26 17:11:00 -05:00