mirror of
https://github.com/libretro/MesenCE.git
synced 2026-11-10 03:02:05 -10:00
* NES: Reimplement mapper 183 as a VRC4 variant. Mapper 183 is really just VRC4e with an additional register. The existing implementation has some problems, and the easiest way to fix it is to just make it VRC4e with a little extra. Note that this breaks existing mapper 183 saved states. * NES: Limit VRC2 1-bit latch to $6000-$6FFF. Random init for mapper 183 register.
671 lines
25 KiB
C++
671 lines
25 KiB
C++
#include "pch.h"
|
|
#include "NES/MapperFactory.h"
|
|
#include "NES/NesConsole.h"
|
|
#include "NES/Loaders/RomLoader.h"
|
|
#include "NES/Loaders/UnifBoards.h"
|
|
#include "NES/BaseMapper.h"
|
|
#include "NES/RomData.h"
|
|
#include "Utilities/VirtualFile.h"
|
|
|
|
#include "NES/Mappers/Bandai/Bandai74161_7432.h"
|
|
#include "NES/Mappers/Bandai/BandaiFcg.h"
|
|
#include "NES/Mappers/Bandai/BandaiKaraoke.h"
|
|
#include "NES/Mappers/Bandai/OekaKids.h"
|
|
#include "NES/Mappers/Codemasters/BF9096.h"
|
|
#include "NES/Mappers/Codemasters/BF909x.h"
|
|
#include "NES/Mappers/Codemasters/GoldenFive.h"
|
|
#include "NES/Mappers/FDS/Fds.h"
|
|
#include "NES/Mappers/FDS/FdsAudio.h"
|
|
#include "NES/Mappers/Homebrew/Action53.h"
|
|
#include "NES/Mappers/Homebrew/MagicFloor218.h"
|
|
#include "NES/Mappers/Homebrew/NsfCart31.h"
|
|
#include "NES/Mappers/Homebrew/Cheapocabra.h"
|
|
#include "NES/Mappers/Homebrew/FaridSlrom.h"
|
|
#include "NES/Mappers/Homebrew/FaridUnrom.h"
|
|
#include "NES/Mappers/Homebrew/Rainbow.h"
|
|
#include "NES/Mappers/Homebrew/SealieComputing.h"
|
|
#include "NES/Mappers/Homebrew/UnRom512.h"
|
|
#include "NES/Mappers/Homebrew/UnlDripGame.h"
|
|
#include "NES/Mappers/Irem/BnRom.h"
|
|
#include "NES/Mappers/Irem/IremG101.h"
|
|
#include "NES/Mappers/Irem/IremH3001.h"
|
|
#include "NES/Mappers/Irem/IremLrog017.h"
|
|
#include "NES/Mappers/Irem/IremTamS1.h"
|
|
#include "NES/Mappers/Jaleco/JalecoJf11_14.h"
|
|
#include "NES/Mappers/Jaleco/JalecoJf13.h"
|
|
#include "NES/Mappers/Jaleco/JalecoJf16.h"
|
|
#include "NES/Mappers/Jaleco/JalecoJf17_19.h"
|
|
#include "NES/Mappers/Jaleco/JalecoJfxx.h"
|
|
#include "NES/Mappers/Jaleco/JalecoSs88006.h"
|
|
#include "NES/Mappers/JyCompany/JyCompany.h"
|
|
#include "NES/Mappers/JyCompany/Mapper35.h"
|
|
#include "NES/Mappers/JyCompany/Mapper91.h"
|
|
#include "NES/Mappers/Kaiser/Kaiser202.h"
|
|
#include "NES/Mappers/Kaiser/Kaiser7012.h"
|
|
#include "NES/Mappers/Kaiser/Kaiser7013B.h"
|
|
#include "NES/Mappers/Kaiser/Kaiser7016.h"
|
|
#include "NES/Mappers/Kaiser/Kaiser7017.h"
|
|
#include "NES/Mappers/Kaiser/Kaiser7022.h"
|
|
#include "NES/Mappers/Kaiser/Kaiser7031.h"
|
|
#include "NES/Mappers/Kaiser/Kaiser7037.h"
|
|
#include "NES/Mappers/Kaiser/Kaiser7057.h"
|
|
#include "NES/Mappers/Kaiser/Kaiser7058.h"
|
|
#include "NES/Mappers/Konami/VRC1.h"
|
|
#include "NES/Mappers/Konami/VRC2_4.h"
|
|
#include "NES/Mappers/Konami/VRC3.h"
|
|
#include "NES/Mappers/Konami/VRC6.h"
|
|
#include "NES/Mappers/Konami/VRC7.h"
|
|
#include "NES/Mappers/Mmc3Variants/Bmc830118C.h"
|
|
#include "NES/Mappers/Mmc3Variants/Bmc8in1.h"
|
|
#include "NES/Mappers/Mmc3Variants/BmcGn45.h"
|
|
#include "NES/Mappers/Mmc3Variants/BmcHpxx.h"
|
|
#include "NES/Mappers/Mmc3Variants/DragonFighter.h"
|
|
#include "NES/Mappers/Mmc3Variants/MMC3_114.h"
|
|
#include "NES/Mappers/Mmc3Variants/MMC3_115.h"
|
|
#include "NES/Mappers/Mmc3Variants/MMC3_12.h"
|
|
#include "NES/Mappers/Mmc3Variants/MMC3_121.h"
|
|
#include "NES/Mappers/Mmc3Variants/MMC3_123.h"
|
|
#include "NES/Mappers/Mmc3Variants/MMC3_126.h"
|
|
#include "NES/Mappers/Mmc3Variants/MMC3_134.h"
|
|
#include "NES/Mappers/Mmc3Variants/MMC3_14.h"
|
|
#include "NES/Mappers/Mmc3Variants/MMC3_165.h"
|
|
#include "NES/Mappers/Mmc3Variants/MMC3_182.h"
|
|
#include "NES/Mappers/Mmc3Variants/MMC3_187.h"
|
|
#include "NES/Mappers/Mmc3Variants/MMC3_196.h"
|
|
#include "NES/Mappers/Mmc3Variants/MMC3_197.h"
|
|
#include "NES/Mappers/Mmc3Variants/MMC3_198.h"
|
|
#include "NES/Mappers/Mmc3Variants/MMC3_199.h"
|
|
#include "NES/Mappers/Mmc3Variants/MMC3_205.h"
|
|
#include "NES/Mappers/Mmc3Variants/MMC3_208.h"
|
|
#include "NES/Mappers/Mmc3Variants/MMC3_215.h"
|
|
#include "NES/Mappers/Mmc3Variants/MMC3_217.h"
|
|
#include "NES/Mappers/Mmc3Variants/MMC3_219.h"
|
|
#include "NES/Mappers/Mmc3Variants/MMC3_224.h"
|
|
#include "NES/Mappers/Mmc3Variants/MMC3_238.h"
|
|
#include "NES/Mappers/Mmc3Variants/MMC3_245.h"
|
|
#include "NES/Mappers/Mmc3Variants/MMC3_249.h"
|
|
#include "NES/Mappers/Mmc3Variants/MMC3_250.h"
|
|
#include "NES/Mappers/Mmc3Variants/MMC3_254.h"
|
|
#include "NES/Mappers/Mmc3Variants/MMC3_44.h"
|
|
#include "NES/Mappers/Mmc3Variants/MMC3_45.h"
|
|
#include "NES/Mappers/Mmc3Variants/MMC3_49.h"
|
|
#include "NES/Mappers/Mmc3Variants/MMC3_52.h"
|
|
#include "NES/Mappers/Mmc3Variants/MMC3_Bmc411120C.h"
|
|
#include "NES/Mappers/Mmc3Variants/MMC3_BmcF15.h"
|
|
#include "NES/Mappers/Mmc3Variants/MMC3_ChrRam.h"
|
|
#include "NES/Mappers/Mmc3Variants/MMC3_Coolboy.h"
|
|
#include "NES/Mappers/Mmc3Variants/MMC3_Kof97.h"
|
|
#include "NES/Mappers/Mmc3Variants/MMC3_MaliSB.h"
|
|
#include "NES/Mappers/Mmc3Variants/MMC3_StreetHeroes.h"
|
|
#include "NES/Mappers/Mmc3Variants/McAcc.h"
|
|
#include "NES/Mappers/Mmc3Variants/ResetTxrom.h"
|
|
#include "NES/Mappers/Mmc3Variants/Unl158B.h"
|
|
#include "NES/Mappers/Mmc3Variants/Unl8237A.h"
|
|
#include "NES/Mappers/Namco/Namco108.h"
|
|
#include "NES/Mappers/Namco/Namco108_154.h"
|
|
#include "NES/Mappers/Namco/Namco108_76.h"
|
|
#include "NES/Mappers/Namco/Namco108_88.h"
|
|
#include "NES/Mappers/Namco/Namco108_95.h"
|
|
#include "NES/Mappers/Namco/Namco163.h"
|
|
#include "NES/Mappers/Nintendo/AXROM.h"
|
|
#include "NES/Mappers/Nintendo/CNROM.h"
|
|
#include "NES/Mappers/Nintendo/CnromProtect.h"
|
|
#include "NES/Mappers/Nintendo/CpRom.h"
|
|
#include "NES/Mappers/Nintendo/FamicomBox.h"
|
|
#include "NES/Mappers/Nintendo/FnsMmc1.h"
|
|
#include "NES/Mappers/Nintendo/GxRom.h"
|
|
#include "NES/Mappers/Nintendo/MMC1.h"
|
|
#include "NES/Mappers/Nintendo/MMC1_105.h"
|
|
#include "NES/Mappers/Nintendo/MMC1_155.h"
|
|
#include "NES/Mappers/Nintendo/MMC2.h"
|
|
#include "NES/Mappers/Nintendo/MMC3.h"
|
|
#include "NES/Mappers/Nintendo/MMC3_37.h"
|
|
#include "NES/Mappers/Nintendo/MMC3_47.h"
|
|
#include "NES/Mappers/Nintendo/MMC4.h"
|
|
#include "NES/Mappers/Nintendo/MMC5.h"
|
|
#include "NES/Mappers/Nintendo/NROM.h"
|
|
#include "NES/Mappers/Nintendo/TxSRom.h"
|
|
#include "NES/Mappers/Nintendo/UNROM.h"
|
|
#include "NES/Mappers/Nintendo/UnRom_180.h"
|
|
#include "NES/Mappers/Nintendo/UnRom_94.h"
|
|
#include "NES/Mappers/NSF/NsfMapper.h"
|
|
#include "NES/Mappers/Ntdec/Caltron41.h"
|
|
#include "NES/Mappers/Ntdec/Bmc63.h"
|
|
#include "NES/Mappers/Ntdec/BmcNtd03.h"
|
|
#include "NES/Mappers/Ntdec/Mapper112.h"
|
|
#include "NES/Mappers/Ntdec/Mapper174.h"
|
|
#include "NES/Mappers/Ntdec/Mapper221.h"
|
|
#include "NES/Mappers/Ntdec/NtdecTc112.h"
|
|
#include "NES/Mappers/Ntdec/Tf1201.h"
|
|
#include "NES/Mappers/Sachen/Sachen74LS374N.h"
|
|
#include "NES/Mappers/Sachen/Sachen8259.h"
|
|
#include "NES/Mappers/Sachen/Sachen9602.h"
|
|
#include "NES/Mappers/Sachen/Sachen_133.h"
|
|
#include "NES/Mappers/Sachen/Sachen_136.h"
|
|
#include "NES/Mappers/Sachen/Sachen_143.h"
|
|
#include "NES/Mappers/Sachen/Sachen_145.h"
|
|
#include "NES/Mappers/Sachen/Sachen_147.h"
|
|
#include "NES/Mappers/Sachen/Sachen_148.h"
|
|
#include "NES/Mappers/Sachen/Sachen_149.h"
|
|
#include "NES/Mappers/StudyBox.h"
|
|
#include "NES/Mappers/Sunsoft/Sunsoft184.h"
|
|
#include "NES/Mappers/Sunsoft/Sunsoft3.h"
|
|
#include "NES/Mappers/Sunsoft/Sunsoft4.h"
|
|
#include "NES/Mappers/Sunsoft/Sunsoft89.h"
|
|
#include "NES/Mappers/Sunsoft/Sunsoft93.h"
|
|
#include "NES/Mappers/Sunsoft/SunsoftFme7.h"
|
|
#include "NES/Mappers/Taito/TaitoTc0190.h"
|
|
#include "NES/Mappers/Taito/TaitoTc0690.h"
|
|
#include "NES/Mappers/Taito/TaitoX1005.h"
|
|
#include "NES/Mappers/Taito/TaitoX1017.h"
|
|
#include "NES/Mappers/Tengen/Rambo1.h"
|
|
#include "NES/Mappers/Tengen/Rambo1_158.h"
|
|
#include "NES/Mappers/Txc/Bmc11160.h"
|
|
#include "NES/Mappers/Txc/MMC3_189.h"
|
|
#include "NES/Mappers/Txc/Mapper61.h"
|
|
#include "NES/Mappers/Txc/Txc22000.h"
|
|
#include "NES/Mappers/Txc/Txc22211A.h"
|
|
#include "NES/Mappers/Txc/Txc22211B.h"
|
|
#include "NES/Mappers/Txc/Txc22211C.h"
|
|
#include "NES/Mappers/Unlicensed/A65AS.h"
|
|
#include "NES/Mappers/Unlicensed/Ac08.h"
|
|
#include "NES/Mappers/Unlicensed/ActionEnterprises.h"
|
|
#include "NES/Mappers/Unlicensed/Ax5705.h"
|
|
#include "NES/Mappers/Unlicensed/Bb.h"
|
|
#include "NES/Mappers/Unlicensed/Bmc12in1.h"
|
|
#include "NES/Mappers/Unlicensed/Bmc190in1.h"
|
|
#include "NES/Mappers/Unlicensed/Bmc235.h"
|
|
#include "NES/Mappers/Unlicensed/Bmc255.h"
|
|
#include "NES/Mappers/Unlicensed/Bmc51.h"
|
|
#include "NES/Mappers/Unlicensed/Bmc60311C.h"
|
|
#include "NES/Mappers/Unlicensed/Bmc64in1NoRepeat.h"
|
|
#include "NES/Mappers/Unlicensed/Bmc70in1.h"
|
|
#include "NES/Mappers/Unlicensed/Bmc80013B.h"
|
|
#include "NES/Mappers/Unlicensed/Bmc810544CA1.h"
|
|
#include "NES/Mappers/Unlicensed/Bmc8157.h"
|
|
#include "NES/Mappers/Unlicensed/Bmc830425C4391T.h"
|
|
#include "NES/Mappers/Unlicensed/BmcG146.h"
|
|
#include "NES/Mappers/Unlicensed/BmcK3046.h"
|
|
#include "NES/Mappers/Unlicensed/Cc21.h"
|
|
#include "NES/Mappers/Unlicensed/CityFighter.h"
|
|
#include "NES/Mappers/Unlicensed/ColorDreams.h"
|
|
#include "NES/Mappers/Unlicensed/ColorDreams46.h"
|
|
#include "NES/Mappers/Unlicensed/Dance2000.h"
|
|
#include "NES/Mappers/Unlicensed/DaouInfosys.h"
|
|
#include "NES/Mappers/Unlicensed/DreamTech01.h"
|
|
#include "NES/Mappers/Unlicensed/Edu2000.h"
|
|
#include "NES/Mappers/Unlicensed/Eh8813A.h"
|
|
#include "NES/Mappers/Unlicensed/FrontFareast.h"
|
|
#include "NES/Mappers/Unlicensed/Ghostbusters63in1.h"
|
|
#include "NES/Mappers/Unlicensed/Gkcx1.h"
|
|
#include "NES/Mappers/Unlicensed/Gs2004.h"
|
|
#include "NES/Mappers/Unlicensed/Gs2013.h"
|
|
#include "NES/Mappers/Unlicensed/Henggedianzi177.h"
|
|
#include "NES/Mappers/Unlicensed/Henggedianzi179.h"
|
|
#include "NES/Mappers/Unlicensed/Hp898f.h"
|
|
#include "NES/Mappers/Unlicensed/MagicKidGooGoo.h"
|
|
#include "NES/Mappers/Unlicensed/Malee.h"
|
|
#include "NES/Mappers/Unlicensed/Mapper103.h"
|
|
#include "NES/Mappers/Unlicensed/Mapper106.h"
|
|
#include "NES/Mappers/Unlicensed/Mapper107.h"
|
|
#include "NES/Mappers/Unlicensed/Mapper116.h"
|
|
#include "NES/Mappers/Unlicensed/Mapper117.h"
|
|
#include "NES/Mappers/Unlicensed/Mapper120.h"
|
|
#include "NES/Mappers/Unlicensed/Mapper15.h"
|
|
#include "NES/Mappers/Unlicensed/Mapper170.h"
|
|
#include "NES/Mappers/Unlicensed/Mapper200.h"
|
|
#include "NES/Mappers/Unlicensed/Mapper202.h"
|
|
#include "NES/Mappers/Unlicensed/Mapper203.h"
|
|
#include "NES/Mappers/Unlicensed/Mapper204.h"
|
|
#include "NES/Mappers/Unlicensed/Mapper212.h"
|
|
#include "NES/Mappers/Unlicensed/Mapper213.h"
|
|
#include "NES/Mappers/Unlicensed/Mapper214.h"
|
|
#include "NES/Mappers/Unlicensed/Mapper216.h"
|
|
#include "NES/Mappers/Unlicensed/Mapper222.h"
|
|
#include "NES/Mappers/Unlicensed/Mapper225.h"
|
|
#include "NES/Mappers/Unlicensed/Mapper226.h"
|
|
#include "NES/Mappers/Unlicensed/Mapper227.h"
|
|
#include "NES/Mappers/Unlicensed/Mapper229.h"
|
|
#include "NES/Mappers/Unlicensed/Mapper230.h"
|
|
#include "NES/Mappers/Unlicensed/Mapper231.h"
|
|
#include "NES/Mappers/Unlicensed/Mapper233.h"
|
|
#include "NES/Mappers/Unlicensed/Mapper234.h"
|
|
#include "NES/Mappers/Unlicensed/Mapper240.h"
|
|
#include "NES/Mappers/Unlicensed/Mapper241.h"
|
|
#include "NES/Mappers/Unlicensed/Mapper244.h"
|
|
#include "NES/Mappers/Unlicensed/Mapper246.h"
|
|
#include "NES/Mappers/Unlicensed/Mapper39.h"
|
|
#include "NES/Mappers/Unlicensed/Mapper42.h"
|
|
#include "NES/Mappers/Unlicensed/Mapper43.h"
|
|
#include "NES/Mappers/Unlicensed/Mapper50.h"
|
|
#include "NES/Mappers/Unlicensed/Mapper57.h"
|
|
#include "NES/Mappers/Unlicensed/Mapper58.h"
|
|
#include "NES/Mappers/Unlicensed/Mapper60.h"
|
|
#include "NES/Mappers/Unlicensed/Mapper62.h"
|
|
#include "NES/Mappers/Unlicensed/Mapper83.h"
|
|
#include "NES/Mappers/Unlicensed/Mapper487.h"
|
|
#include "NES/Mappers/Unlicensed/Nanjing.h"
|
|
#include "NES/Mappers/Unlicensed/Nina01.h"
|
|
#include "NES/Mappers/Unlicensed/Nina03_06.h"
|
|
#include "NES/Mappers/Unlicensed/NovelDiamond.h"
|
|
#include "NES/Mappers/Unlicensed/Racermate.h"
|
|
#include "NES/Mappers/Unlicensed/Rt01.h"
|
|
#include "NES/Mappers/Unlicensed/Subor166.h"
|
|
#include "NES/Mappers/Unlicensed/Super40in1Ws.h"
|
|
#include "NES/Mappers/Unlicensed/Supervision.h"
|
|
#include "NES/Mappers/Unlicensed/T230.h"
|
|
#include "NES/Mappers/Unlicensed/T262.h"
|
|
#include "NES/Mappers/Unlicensed/Unl255in1.h"
|
|
#include "NES/Mappers/Unlicensed/UnlD1038.h"
|
|
#include "NES/Mappers/Unlicensed/UnlPci556.h"
|
|
#include "NES/Mappers/Unlicensed/UnlPuzzle.h"
|
|
#include "NES/Mappers/Unlicensed/Yoko.h"
|
|
#include "NES/Mappers/VsSystem/VsSystem.h"
|
|
#include "NES/Mappers/Waixing/Bs5.h"
|
|
#include "NES/Mappers/Waixing/Fk23C.h"
|
|
#include "NES/Mappers/Waixing/Mapper242.h"
|
|
#include "NES/Mappers/Waixing/Mapper253.h"
|
|
#include "NES/Mappers/Waixing/Waixing162.h"
|
|
#include "NES/Mappers/Waixing/Waixing164.h"
|
|
#include "NES/Mappers/Waixing/Waixing178.h"
|
|
#include "NES/Mappers/Waixing/Waixing252.h"
|
|
#include "NES/Mappers/Whirlwind/Lh10.h"
|
|
#include "NES/Mappers/Whirlwind/Lh32.h"
|
|
#include "NES/Mappers/Whirlwind/Lh51.h"
|
|
#include "NES/Mappers/Whirlwind/Mapper40.h"
|
|
#include "NES/Mappers/Whirlwind/Smb2j.h"
|
|
|
|
BaseMapper* MapperFactory::GetMapperFromID(RomData& romData)
|
|
{
|
|
// clang-format off
|
|
switch(romData.Info.MapperID) {
|
|
case 0: return new NROM();
|
|
case 1: return new MMC1();
|
|
case 2: return new UNROM();
|
|
case 3: return new CNROM();
|
|
case 4:
|
|
if(romData.Info.SubMapperID == 3) {
|
|
return new McAcc();
|
|
} else {
|
|
return new MMC3();
|
|
}
|
|
case 5: return new MMC5();
|
|
case 6: return new FrontFareast();
|
|
case 7: return new AXROM();
|
|
case 8: return new FrontFareast();
|
|
case 9: return new MMC2();
|
|
case 10: return new MMC4();
|
|
case 11: return new ColorDreams();
|
|
case 12: return new MMC3_12();
|
|
case 13: return new CpRom();
|
|
case 14: return new MMC3_14();
|
|
case 15: return new Mapper15();
|
|
case 16: return new BandaiFcg();
|
|
case 17: return new FrontFareast();
|
|
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();
|
|
case 28: return new Action53();
|
|
case 29: return new SealieComputing();
|
|
case 30: return new UnRom512();
|
|
case 31: return new NsfCart31();
|
|
case 32: return new IremG101();
|
|
case 33: return new TaitoTc0190();
|
|
case 34:
|
|
switch(romData.Info.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();
|
|
}
|
|
break;
|
|
|
|
case 35: return new Mapper35();
|
|
case 36: return new Txc22000();
|
|
case 37: return new MMC3_37();
|
|
case 38: return new UnlPci556();
|
|
case 39: return new Mapper39();
|
|
case 40: return new Mapper40();
|
|
case 41: return new Caltron41();
|
|
case 42: return new Mapper42();
|
|
case 43: return new Mapper43();
|
|
case 44: return new MMC3_44();
|
|
case 45: return new MMC3_45();
|
|
case 46: return new ColorDreams46();
|
|
case 47: return new MMC3_47();
|
|
case 48: return new TaitoTc0690();
|
|
case 49: return new MMC3_49();
|
|
case 50: return new Mapper50();
|
|
case 51: return new Bmc51();
|
|
case 52: return new MMC3_52();
|
|
case 53: return new Supervision();
|
|
case 54: return new NovelDiamond();
|
|
case 56: return new Kaiser202();
|
|
case 57: return new Mapper57();
|
|
case 58: return new Mapper58();
|
|
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();
|
|
case 64: return new Rambo1();
|
|
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();
|
|
case 72: return new JalecoJf17_19(false);
|
|
case 73: return new VRC3();
|
|
case 74: return new MMC3_ChrRam(0x08, 0x09, 2);
|
|
case 75: return new VRC1();
|
|
case 76: return new Namco108_76();
|
|
case 77: return new IremLrog017();
|
|
case 78: return new JalecoJf16();
|
|
case 79: return new Nina03_06(false);
|
|
case 80: return new TaitoX1005(false);
|
|
case 82: return new TaitoX1017();
|
|
case 83: return new Mapper83();
|
|
case 85: return new VRC7();
|
|
case 86: return new JalecoJf13();
|
|
case 87: return new JalecoJfxx(false);
|
|
case 88: return new Namco108_88();
|
|
case 89: return new Sunsoft89();
|
|
case 90: return new JyCompany();
|
|
case 91: return new Mapper91();
|
|
case 92: return new JalecoJf17_19(true);
|
|
case 93: return new Sunsoft93();
|
|
case 94: return new UnRom_94();
|
|
case 95: return new Namco108_95();
|
|
case 96: return new OekaKids();
|
|
case 97: return new IremTamS1();
|
|
case 99: return new VsSystem();
|
|
case 101: return new JalecoJfxx(true);
|
|
case 103: return new Mapper103();
|
|
case 104: return new GoldenFive();
|
|
case 105: return new MMC1_105();
|
|
case 106: return new Mapper106();
|
|
case 107: return new Mapper107();
|
|
case 108: return new Bb();
|
|
case 111: return new Cheapocabra();
|
|
case 112: return new Mapper112();
|
|
case 113: return new Nina03_06(true);
|
|
case 114: return new MMC3_114();
|
|
case 115: return new MMC3_115();
|
|
case 116: return new Mapper116();
|
|
case 117: return new Mapper117();
|
|
case 118: return new TxSRom();
|
|
case 119: return new MMC3_ChrRam(0x40, 0x7F, 8);
|
|
case 120: return new Mapper120();
|
|
case 121: return new MMC3_121();
|
|
case 123: return new MMC3_123();
|
|
case 125: return new Lh32();
|
|
case 126: return new MMC3_126();
|
|
case 132: return new Txc22211A();
|
|
case 133: return new Sachen_133();
|
|
case 134: return new MMC3_134();
|
|
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);
|
|
case 140: return new JalecoJf11_14();
|
|
case 141: return new Sachen8259(Sachen8259Variant::Sachen8259A);
|
|
case 142: return new Kaiser202();
|
|
case 143: return new Sachen_143();
|
|
case 144: return new ColorDreams();
|
|
case 145: return new Sachen_145();
|
|
case 146: return new Nina03_06(false);
|
|
case 147: return new Sachen_147();
|
|
case 148: return new Sachen_148();
|
|
case 149: return new Sachen_149();
|
|
case 150: return new Sachen74LS374N();
|
|
case 151: return new VRC1();
|
|
case 152: return new Bandai74161_7432(true);
|
|
case 153: return new BandaiFcg();
|
|
case 154: return new Namco108_154();
|
|
case 155: return new MMC1_155();
|
|
case 156: return new DaouInfosys();
|
|
case 157: return new BandaiFcg();
|
|
case 158: return new Rambo1_158();
|
|
case 159: return new BandaiFcg();
|
|
case 162: return new Waixing162();
|
|
case 163: return new Nanjing();
|
|
case 164: return new Waixing164();
|
|
case 165: return new MMC3_165();
|
|
case 166: return new Subor166();
|
|
case 167: return new Subor166();
|
|
case 168: return new Racermate();
|
|
case 170: return new Mapper170();
|
|
case 171: return new Kaiser7058();
|
|
case 172: return new Txc22211B();
|
|
case 173: return new Txc22211C();
|
|
case 174: return new Mapper174();
|
|
case 175: return new Kaiser7022();
|
|
case 176: return new Fk23C();
|
|
case 177: return new Henggedianzi177();
|
|
case 178: return new Waixing178();
|
|
case 179: return new Henggedianzi179();
|
|
case 180: return new UnRom_180();
|
|
case 182: return new MMC3_182();
|
|
case 183: return new VRC2_4();
|
|
case 184: return new Sunsoft184();
|
|
case 185: return new CnromProtect();
|
|
case 186: break; //The study box is handled as a bios file, not a iNES rom
|
|
case 187: return new MMC3_187();
|
|
case 188: return new BandaiKaraoke();
|
|
case 189: return new MMC3_189();
|
|
case 190: return new MagicKidGooGoo();
|
|
case 191: return new MMC3_ChrRam(0x80, 0xFF, 2);
|
|
case 192: return new MMC3_ChrRam(0x08, 0x0B, 4);
|
|
case 193: return new NtdecTc112();
|
|
case 194: return new MMC3_ChrRam(0x00, 0x01, 2);
|
|
case 195: return new MMC3_ChrRam(0x00, 0x03, 4);
|
|
case 196: return new MMC3_196();
|
|
case 197: return new MMC3_197();
|
|
case 198: return new MMC3_198();
|
|
case 199: return new MMC3_199();
|
|
case 200: return new Mapper200();
|
|
case 201: return new NovelDiamond();
|
|
case 202: return new Mapper202();
|
|
case 203: return new Mapper203();
|
|
case 204: return new Mapper204();
|
|
case 205: return new MMC3_205();
|
|
case 206: return new Namco108();
|
|
case 207: return new TaitoX1005(true);
|
|
case 208: return new MMC3_208();
|
|
case 209: return new JyCompany();
|
|
case 210: return new Namco163();
|
|
case 211: return new JyCompany();
|
|
case 212: return new Mapper212();
|
|
case 213: return new Mapper213();
|
|
case 214: return new Mapper214();
|
|
case 215: return new MMC3_215();
|
|
case 216: return new Mapper216();
|
|
case 217: return new MMC3_217();
|
|
case 218: return new MagicFloor218();
|
|
case 219: return new MMC3_219();
|
|
case 221: return new Mapper221();
|
|
case 222: return new Mapper222();
|
|
case 224: return new MMC3_224();
|
|
case 225: return new Mapper225();
|
|
case 226: return new Mapper226();
|
|
case 227: return new Mapper227();
|
|
case 228: return new ActionEnterprises();
|
|
case 229: return new Mapper229();
|
|
case 230: return new Mapper230();
|
|
case 231: return new Mapper231();
|
|
case 232: return new BF9096();
|
|
case 233: return new Mapper233();
|
|
case 234: return new Mapper234();
|
|
case 235: return new Bmc235();
|
|
case 236: return new Bmc70in1();
|
|
case 238: return new MMC3_238();
|
|
case 240: return new Mapper240();
|
|
case 241: return new Mapper241();
|
|
case 242: return new Mapper242();
|
|
case 243: return new Sachen74LS374N();
|
|
case 244: return new Mapper244();
|
|
case 245: return new MMC3_245();
|
|
case 246: return new Mapper246();
|
|
case 249: return new MMC3_249();
|
|
case 250: return new MMC3_250();
|
|
case 252: return new Waixing252();
|
|
case 253: return new Mapper253();
|
|
case 254: return new MMC3_254();
|
|
case 255: return new Bmc255();
|
|
|
|
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: return new Gkcx1();
|
|
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: return new Lh51();
|
|
//310-311
|
|
case 312: return new Kaiser7013B();
|
|
case 313: return new ResetTxrom();
|
|
case 314: return new Bmc64in1NoRepeat();
|
|
case 315: break; //830134C
|
|
//316-318
|
|
case 319: return new Hp898f();
|
|
case 320: return new Bmc830425C4391T();
|
|
//321
|
|
case 322: break; //K-3033
|
|
case 323: return new FaridSlrom();
|
|
case 324: return new FaridUnrom();
|
|
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: return new BmcK3046();
|
|
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 366: return new BmcGn45();
|
|
|
|
case 487: return new Mapper487();
|
|
|
|
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 552: return new TaitoX1017();
|
|
|
|
case 682: return new Rainbow();
|
|
|
|
case UnifBoards::Ac08: return new Ac08(); //mapper 42?
|
|
case UnifBoards::Cc21: return new Cc21();
|
|
case UnifBoards::Ghostbusters63in1: return new Ghostbusters63in1(); //mapper 226?
|
|
case UnifBoards::Gs2013: return new Gs2013();
|
|
case UnifBoards::Malee: return new Malee(); //mapper 42?
|
|
case UnifBoards::SssNrom256: return new FamicomBox();
|
|
case UnifBoards::Unl255in1: return new Unl255in1();
|
|
case UnifBoards::Unl8237A: return new Unl8237A(); //mapper 215.1
|
|
case UnifBoards::UnlPuzzle: return new UnlPuzzle();
|
|
|
|
case MapperFactory::FamicomNetworkSystemMapperID: return new FnsMmc1();
|
|
case MapperFactory::StudyBoxMapperID: return new StudyBox();
|
|
case MapperFactory::NsfMapperID: return new NsfMapper();
|
|
case MapperFactory::FdsMapperID: return new Fds();
|
|
}
|
|
// clang-format on
|
|
|
|
if(romData.Info.MapperID != UnifBoards::UnknownBoard) {
|
|
MessageManager::DisplayMessage("Error", "UnsupportedMapper", "iNES #" + std::to_string(romData.Info.MapperID));
|
|
}
|
|
return nullptr;
|
|
}
|
|
|
|
unique_ptr<BaseMapper> MapperFactory::InitializeFromFile(NesConsole* console, VirtualFile& romFile, RomData& romData, LoadRomResult& result)
|
|
{
|
|
romData = {};
|
|
bool databaseEnabled = !console->GetNesConfig().DisableGameDatabase;
|
|
if(RomLoader::LoadFile(romFile, romData, databaseEnabled)) {
|
|
unique_ptr<BaseMapper> mapper(GetMapperFromID(romData));
|
|
if(mapper) {
|
|
result = LoadRomResult::Success;
|
|
mapper->Initialize(console, romData);
|
|
return mapper;
|
|
} else {
|
|
//File is a valid NES file, but it couldn't be loaded
|
|
result = LoadRomResult::Failure;
|
|
return nullptr;
|
|
}
|
|
}
|
|
result = LoadRomResult::UnknownType;
|
|
return nullptr;
|
|
}
|
|
|