#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/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/Mapper183.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) { switch(romData.Info.MapperID) { case 0: return new NROM(); case 1: return new MMC1(); case 2: return new UNROM(); case 3: return new CNROM(false); 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 Mapper183(); case 184: return new Sunsoft184(); case 185: return new CNROM(true); 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 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(); } if(romData.Info.MapperID != UnifBoards::UnknownBoard) { MessageManager::DisplayMessage("Error", "UnsupportedMapper", "iNES #" + std::to_string(romData.Info.MapperID)); } return nullptr; } unique_ptr MapperFactory::InitializeFromFile(NesConsole* console, VirtualFile &romFile, RomData &romData, LoadRomResult& result) { romData = {}; bool databaseEnabled = !console->GetNesConfig().DisableGameDatabase; if(RomLoader::LoadFile(romFile, romData, databaseEnabled)) { unique_ptr 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; }