redo core switching

This commit is contained in:
Eknous-P 2023-08-18 10:40:18 +04:00
parent 12d7911d1a
commit 74e803d4e9
5 changed files with 134 additions and 112 deletions

View File

@ -219,7 +219,7 @@ void DivDispatchContainer::clear() {
}
}
void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, double gotRate, const DivConfig& flags) {
void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, double gotRate, const DivConfig& flags, bool isRender) {
// quit if we already initialized
if (dispatch!=NULL) return;
@ -231,33 +231,57 @@ void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, do
break;
case DIV_SYSTEM_YM2612:
dispatch=new DivPlatformGenesis;
((DivPlatformGenesis*)dispatch)->setYMFM(eng->getConfInt("ym2612Core",0));
if (isRender) {
((DivPlatformGenesis*)dispatch)->setYMFM(eng->getConfInt("ym2612CoreRender",0));
} else {
((DivPlatformGenesis*)dispatch)->setYMFM(eng->getConfInt("ym2612Core",0));
}
((DivPlatformGenesis*)dispatch)->setSoftPCM(false);
break;
case DIV_SYSTEM_YM2612_EXT:
dispatch=new DivPlatformGenesisExt;
((DivPlatformGenesisExt*)dispatch)->setYMFM(eng->getConfInt("ym2612Core",0));
if (isRender) {
((DivPlatformGenesisExt*)dispatch)->setYMFM(eng->getConfInt("ym2612CoreRender",0));
} else {
((DivPlatformGenesisExt*)dispatch)->setYMFM(eng->getConfInt("ym2612Core",0));
}
((DivPlatformGenesisExt*)dispatch)->setSoftPCM(false);
break;
case DIV_SYSTEM_YM2612_CSM:
dispatch=new DivPlatformGenesisExt;
((DivPlatformGenesisExt*)dispatch)->setYMFM(eng->getConfInt("ym2612Core",0));
if (isRender) {
((DivPlatformGenesisExt*)dispatch)->setYMFM(eng->getConfInt("ym2612CoreRender",0));
} else {
((DivPlatformGenesisExt*)dispatch)->setYMFM(eng->getConfInt("ym2612Core",0));
}
((DivPlatformGenesisExt*)dispatch)->setSoftPCM(false);
((DivPlatformGenesisExt*)dispatch)->setCSMChannel(6);
break;
case DIV_SYSTEM_YM2612_DUALPCM:
dispatch=new DivPlatformGenesis;
((DivPlatformGenesis*)dispatch)->setYMFM(eng->getConfInt("ym2612Core",0));
if (isRender) {
((DivPlatformGenesis*)dispatch)->setYMFM(eng->getConfInt("ym2612CoreRender",0));
} else {
((DivPlatformGenesis*)dispatch)->setYMFM(eng->getConfInt("ym2612Core",0));
}
((DivPlatformGenesis*)dispatch)->setSoftPCM(true);
break;
case DIV_SYSTEM_YM2612_DUALPCM_EXT:
dispatch=new DivPlatformGenesisExt;
((DivPlatformGenesisExt*)dispatch)->setYMFM(eng->getConfInt("ym2612Core",0));
if (isRender) {
((DivPlatformGenesisExt*)dispatch)->setYMFM(eng->getConfInt("ym2612CoreRender",0));
} else {
((DivPlatformGenesisExt*)dispatch)->setYMFM(eng->getConfInt("ym2612Core",0));
}
((DivPlatformGenesisExt*)dispatch)->setSoftPCM(true);
break;
case DIV_SYSTEM_SMS:
dispatch=new DivPlatformSMS;
((DivPlatformSMS*)dispatch)->setNuked(eng->getConfInt("snCore",0));
if (isRender) {
((DivPlatformSMS*)dispatch)->setNuked(eng->getConfInt("snCoreRender",0));
} else {
((DivPlatformSMS*)dispatch)->setNuked(eng->getConfInt("snCore",0));
}
break;
case DIV_SYSTEM_GB:
dispatch=new DivPlatformGB;
@ -267,39 +291,71 @@ void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, do
break;
case DIV_SYSTEM_NES:
dispatch=new DivPlatformNES;
((DivPlatformNES*)dispatch)->setNSFPlay(eng->getConfInt("nesCore",0)==1);
if (isRender) {
((DivPlatformNES*)dispatch)->setNSFPlay(eng->getConfInt("nesCoreRender",0)==1);
} else {
((DivPlatformNES*)dispatch)->setNSFPlay(eng->getConfInt("nesCore",0)==1);
}
break;
case DIV_SYSTEM_C64_6581:
dispatch=new DivPlatformC64;
((DivPlatformC64*)dispatch)->setCore(eng->getConfInt("c64Core",0));
if (isRender) {
((DivPlatformC64*)dispatch)->setCore(eng->getConfInt("c64CoreRender",0));
} else {
((DivPlatformC64*)dispatch)->setCore(eng->getConfInt("c64Core",0));
}
((DivPlatformC64*)dispatch)->setChipModel(true);
break;
case DIV_SYSTEM_C64_8580:
dispatch=new DivPlatformC64;
((DivPlatformC64*)dispatch)->setCore(eng->getConfInt("c64Core",0));
if (isRender) {
((DivPlatformC64*)dispatch)->setCore(eng->getConfInt("c64CoreRender",0));
} else {
((DivPlatformC64*)dispatch)->setCore(eng->getConfInt("c64Core",0));
}
((DivPlatformC64*)dispatch)->setChipModel(false);
break;
case DIV_SYSTEM_YM2151:
dispatch=new DivPlatformArcade;
((DivPlatformArcade*)dispatch)->setYMFM(eng->getConfInt("arcadeCore",0)==0);
if (isRender) {
((DivPlatformArcade*)dispatch)->setYMFM(eng->getConfInt("arcadeCoreRender",0)==0);
} else {
((DivPlatformArcade*)dispatch)->setYMFM(eng->getConfInt("arcadeCore",0)==0);
}
break;
case DIV_SYSTEM_YM2610:
case DIV_SYSTEM_YM2610_FULL:
dispatch=new DivPlatformYM2610;
((DivPlatformYM2610*)dispatch)->setCombo(eng->getConfInt("opnCore",1)==1);
if (isRender) {
((DivPlatformYM2610*)dispatch)->setCombo(eng->getConfInt("opnCoreRender",1)==1);
} else {
((DivPlatformYM2610*)dispatch)->setCombo(eng->getConfInt("opnCore",1)==1);
}
break;
case DIV_SYSTEM_YM2610_EXT:
case DIV_SYSTEM_YM2610_FULL_EXT:
dispatch=new DivPlatformYM2610Ext;
((DivPlatformYM2610Ext*)dispatch)->setCombo(eng->getConfInt("opnCore",1)==1);
if (isRender) {
((DivPlatformYM2610Ext*)dispatch)->setCombo(eng->getConfInt("opnCoreRender",1)==1);
} else {
((DivPlatformYM2610Ext*)dispatch)->setCombo(eng->getConfInt("opnCore",1)==1);
}
break;
case DIV_SYSTEM_YM2610B:
dispatch=new DivPlatformYM2610B;
((DivPlatformYM2610B*)dispatch)->setCombo(eng->getConfInt("opnCore",1)==1);
if (isRender) {
((DivPlatformYM2610B*)dispatch)->setCombo(eng->getConfInt("opnCoreRender",1)==1);
} else {
((DivPlatformYM2610B*)dispatch)->setCombo(eng->getConfInt("opnCore",1)==1);
}
break;
case DIV_SYSTEM_YM2610B_EXT:
dispatch=new DivPlatformYM2610BExt;
((DivPlatformYM2610BExt*)dispatch)->setCombo(eng->getConfInt("opnCore",1)==1);
if (isRender) {
((DivPlatformYM2610BExt*)dispatch)->setCombo(eng->getConfInt("opnCoreRender",1)==1);
} else {
((DivPlatformYM2610BExt*)dispatch)->setCombo(eng->getConfInt("opnCore",1)==1);
}
break;
case DIV_SYSTEM_AMIGA:
dispatch=new DivPlatformAmiga;
@ -312,26 +368,46 @@ void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, do
break;
case DIV_SYSTEM_FDS:
dispatch=new DivPlatformFDS;
((DivPlatformFDS*)dispatch)->setNSFPlay(eng->getConfInt("fdsCore",0)==1);
if (isRender) {
((DivPlatformFDS*)dispatch)->setNSFPlay(eng->getConfInt("fdsCoreRender",0)==1);
} else {
((DivPlatformFDS*)dispatch)->setNSFPlay(eng->getConfInt("fdsCore",0)==1);
}
break;
case DIV_SYSTEM_TIA:
dispatch=new DivPlatformTIA;
break;
case DIV_SYSTEM_YM2203:
dispatch=new DivPlatformYM2203;
((DivPlatformYM2203*)dispatch)->setCombo(eng->getConfInt("opnCore",1)==1);
if (isRender) {
((DivPlatformYM2203*)dispatch)->setCombo(eng->getConfInt("opnCoreRender",1)==1);
} else {
((DivPlatformYM2203*)dispatch)->setCombo(eng->getConfInt("opnCore",1)==1);
}
break;
case DIV_SYSTEM_YM2203_EXT:
dispatch=new DivPlatformYM2203Ext;
((DivPlatformYM2203Ext*)dispatch)->setCombo(eng->getConfInt("opnCore",1)==1);
if (isRender) {
((DivPlatformYM2203Ext*)dispatch)->setCombo(eng->getConfInt("opnCoreRender",1)==1);
} else {
((DivPlatformYM2203Ext*)dispatch)->setCombo(eng->getConfInt("opnCore",1)==1);
}
break;
case DIV_SYSTEM_YM2608:
dispatch=new DivPlatformYM2608;
((DivPlatformYM2608*)dispatch)->setCombo(eng->getConfInt("opnCore",1)==1);
if (isRender) {
((DivPlatformYM2608*)dispatch)->setCombo(eng->getConfInt("opnCoreRender",1)==1);
} else {
((DivPlatformYM2608*)dispatch)->setCombo(eng->getConfInt("opnCore",1)==1);
}
break;
case DIV_SYSTEM_YM2608_EXT:
dispatch=new DivPlatformYM2608Ext;
((DivPlatformYM2608Ext*)dispatch)->setCombo(eng->getConfInt("opnCore",1)==1);
if (isRender) {
((DivPlatformYM2608Ext*)dispatch)->setCombo(eng->getConfInt("opnCoreRender",1)==1);
} else {
((DivPlatformYM2608Ext*)dispatch)->setCombo(eng->getConfInt("opnCore",1)==1);
}
break;
case DIV_SYSTEM_OPLL:
case DIV_SYSTEM_OPLL_DRUMS:
@ -396,7 +472,11 @@ void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, do
break;
case DIV_SYSTEM_POKEY:
dispatch=new DivPlatformPOKEY;
((DivPlatformPOKEY*)dispatch)->setAltASAP(eng->getConfInt("pokeyCore",1)==1);
if (isRender) {
((DivPlatformPOKEY*)dispatch)->setAltASAP(eng->getConfInt("pokeyCoreRender",1)==1);
} else {
((DivPlatformPOKEY*)dispatch)->setAltASAP(eng->getConfInt("pokeyCore",1)==1);
}
break;
case DIV_SYSTEM_QSOUND:
dispatch=new DivPlatformQSound;

View File

@ -822,22 +822,8 @@ void DivEngine::runExportThread() {
size_t curFadeOutSample=0;
bool isFadingOut=false;
setConf("arcadeCore",getConfInt("arcadeCoreRender",0));
setConf("ym2612Core",getConfInt("ym2612CoreRender",0));
setConf("snCore",getConfInt("snCoreRender",0));
setConf("nesCore",getConfInt("nesCoreRender",0));
setConf("fdsCore",getConfInt("fdsCoreRender",0));
setConf("c64Core",getConfInt("c64CoreRender",0));
setConf("pokeyCore",getConfInt("pokeyCoreRender",0));
setConf("opnCore",getConfInt("opnCoreRender",0));
if (switchMaster(true)) {
logI("successfully switched to render cores!");
} else {
logE("could not switch to render cores!");
exporting = false;
return;
}
quitDispatch();
initDispatch(true);
switch (exportMode) {
case DIV_EXPORT_MODE_ONE: {
@ -1163,21 +1149,8 @@ void DivEngine::runExportThread() {
}
}
setConf("arcadeCore",getConfInt("arcadeCorePlayback",0));
setConf("ym2612Core",getConfInt("ym2612CorePlayback",0));
setConf("snCore",getConfInt("snCorePlayback",0));
setConf("nesCore",getConfInt("nesCorePlayback",0));
setConf("fdsCore",getConfInt("fdsCorePlayback",0));
setConf("c64Core",getConfInt("c64CorePlayback",0));
setConf("pokeyCore",getConfInt("pokeyCorePlayback",0));
setConf("opnCore",getConfInt("opnCorePlayback",0));
if (switchMaster(true)) {
logI("successfully switched to playback cores!");
} else {
logE("could not switch to playback cores!");
}
quitDispatch();
initDispatch(false);
stopExport=false;
}
#else
@ -4600,10 +4573,11 @@ void DivEngine::rescanAudioDevices() {
}
}
void DivEngine::initDispatch() {
void DivEngine::initDispatch(bool isRender) {
BUSY_BEGIN;
if (isRender) logI("render cores set");
for (int i=0; i<song.systemLen; i++) {
disCont[i].init(song.system[i],this,getChannelCount(song.system[i]),got.rate,song.systemFlags[i]);
disCont[i].init(song.system[i],this,getChannelCount(song.system[i]),got.rate,song.systemFlags[i],isRender);
disCont[i].setRates(got.rate);
disCont[i].setQuality(lowQuality);
}

View File

@ -201,7 +201,7 @@ struct DivDispatchContainer {
void flush(size_t count);
void fillBuf(size_t runtotal, size_t offset, size_t size);
void clear();
void init(DivSystem sys, DivEngine* eng, int chanCount, double gotRate, const DivConfig& flags);
void init(DivSystem sys, DivEngine* eng, int chanCount, double gotRate, const DivConfig& flags, bool isRender=false);
void quit();
DivDispatchContainer():
dispatch(NULL),
@ -1132,7 +1132,7 @@ class DivEngine {
TAAudioDesc& getAudioDescGot();
// init dispatch
void initDispatch();
void initDispatch(bool isRender=false);
// quit dispatch
void quitDispatch();

View File

@ -1419,14 +1419,6 @@ class FurnaceGUI {
int c64Core;
int pokeyCore;
int opnCore;
int arcadeCorePlayback;
int ym2612CorePlayback;
int snCorePlayback;
int nesCorePlayback;
int fdsCorePlayback;
int c64CorePlayback;
int pokeyCorePlayback;
int opnCorePlayback;
int arcadeCoreRender;
int ym2612CoreRender;
int snCoreRender;

View File

@ -1193,7 +1193,7 @@ void FurnaceGUI::drawSettings() {
ImGui::Text("Arcade/YM2151 core");
ImGui::SameLine();
ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x*0.4f);
ImGui::Combo("##ArcadeCorePlayback",&settings.arcadeCorePlayback,arcadeCores,2);
ImGui::Combo("##ArcadeCore",&settings.arcadeCore,arcadeCores,2);
ImGui::SameLine();
ImGui::Combo("##ArcadeCoreRender",&settings.arcadeCoreRender,arcadeCores,2);
ImGui::PopItemWidth();
@ -1202,7 +1202,7 @@ void FurnaceGUI::drawSettings() {
ImGui::Text("Genesis/YM2612 core");
ImGui::SameLine();
ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x*0.4f);
ImGui::Combo("##YM2612CorePlayback",&settings.ym2612CorePlayback,ym2612Cores,2);
ImGui::Combo("##YM2612Core",&settings.ym2612Core,ym2612Cores,2);
ImGui::SameLine();
ImGui::Combo("##YM2612CoreRender",&settings.ym2612CoreRender,ym2612Cores,2);
ImGui::PopItemWidth();
@ -1211,7 +1211,7 @@ void FurnaceGUI::drawSettings() {
ImGui::Text("SN76489 core");
ImGui::SameLine();
ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x*0.4f);
ImGui::Combo("##SNCorePlayback",&settings.snCorePlayback,snCores,2);
ImGui::Combo("##SNCore",&settings.snCore,snCores,2);
ImGui::SameLine();
ImGui::Combo("##SNCoreRender",&settings.snCoreRender,snCores,2);
ImGui::PopItemWidth();
@ -1220,7 +1220,7 @@ void FurnaceGUI::drawSettings() {
ImGui::Text("NES core");
ImGui::SameLine();
ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x*0.4f);
ImGui::Combo("##NESCorePlayback",&settings.nesCorePlayback,nesCores,2);
ImGui::Combo("##NESCore",&settings.nesCore,nesCores,2);
ImGui::SameLine();
ImGui::Combo("##NESCoreRender",&settings.nesCoreRender,nesCores,2);
ImGui::PopItemWidth();
@ -1229,7 +1229,7 @@ void FurnaceGUI::drawSettings() {
ImGui::Text("FDS core");
ImGui::SameLine();
ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x*0.4f);
ImGui::Combo("##FDSCorePlayback",&settings.fdsCorePlayback,nesCores,2);
ImGui::Combo("##FDSCore",&settings.fdsCore,nesCores,2);
ImGui::SameLine();
ImGui::Combo("##FDSCoreRender",&settings.fdsCoreRender,nesCores,2);
ImGui::PopItemWidth();
@ -1238,7 +1238,7 @@ void FurnaceGUI::drawSettings() {
ImGui::Text("SID core");
ImGui::SameLine();
ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x*0.4f);
ImGui::Combo("##C64CorePlayback",&settings.c64CorePlayback,c64Cores,3);
ImGui::Combo("##C64Core",&settings.c64Core,c64Cores,3);
ImGui::SameLine();
ImGui::Combo("##C64CoreRender",&settings.c64CoreRender,c64Cores,3);
ImGui::PopItemWidth();
@ -1247,7 +1247,7 @@ void FurnaceGUI::drawSettings() {
ImGui::Text("POKEY core");
ImGui::SameLine();
ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x*0.4f);
ImGui::Combo("##POKEYCorePlayback",&settings.pokeyCorePlayback,pokeyCores,2);
ImGui::Combo("##POKEYCore",&settings.pokeyCore,pokeyCores,2);
ImGui::SameLine();
ImGui::Combo("##POKEYCoreRender",&settings.pokeyCoreRender,pokeyCores,2);
ImGui::PopItemWidth();
@ -1256,7 +1256,7 @@ void FurnaceGUI::drawSettings() {
ImGui::Text("OPN/OPNA/OPNB cores");
ImGui::SameLine();
ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x*0.4f);
ImGui::Combo("##OPNCorePlayback",&settings.opnCorePlayback,opnCores,2);
ImGui::Combo("##OPNCore",&settings.opnCore,opnCores,2);
ImGui::SameLine();
ImGui::Combo("##OPNCoreRender",&settings.opnCoreRender,opnCores,2);
ImGui::PopItemWidth();
@ -2962,22 +2962,14 @@ void FurnaceGUI::syncSettings() {
settings.audioQuality=e->getConfInt("audioQuality",0);
settings.audioBufSize=e->getConfInt("audioBufSize",1024);
settings.audioRate=e->getConfInt("audioRate",44100);
settings.arcadeCore=settings.arcadeCorePlayback;
settings.ym2612Core=settings.ym2612CorePlayback;
settings.snCore=settings.snCorePlayback;
settings.nesCore=settings.nesCorePlayback;
settings.fdsCore=settings.fdsCorePlayback;
settings.c64Core=settings.c64CorePlayback;
settings.pokeyCore=settings.pokeyCorePlayback;
settings.opnCore=settings.opnCorePlayback;
settings.arcadeCorePlayback=e->getConfInt("arcadeCorePlayback",0);
settings.ym2612CorePlayback=e->getConfInt("ym2612CorePlayback",0);
settings.snCorePlayback=e->getConfInt("snCorePlayback",0);
settings.nesCorePlayback=e->getConfInt("nesCorePlayback",0);
settings.fdsCorePlayback=e->getConfInt("fdsCorePlayback",0);
settings.c64CorePlayback=e->getConfInt("c64CorePlayback",0);
settings.pokeyCorePlayback=e->getConfInt("pokeyCorePlayback",1);
settings.opnCorePlayback=e->getConfInt("opnCorePlayback",1);
settings.arcadeCore=e->getConfInt("arcadeCore",0);
settings.ym2612Core=e->getConfInt("ym2612Core",0);
settings.snCore=e->getConfInt("snCore",0);
settings.nesCore=e->getConfInt("nesCore",0);
settings.fdsCore=e->getConfInt("fdsCore",0);
settings.c64Core=e->getConfInt("c64Core",0);
settings.pokeyCore=e->getConfInt("pokeyCore",1);
settings.opnCore=e->getConfInt("opnCore",1);
settings.arcadeCoreRender=e->getConfInt("arcadeCoreRender",0);
settings.ym2612CoreRender=e->getConfInt("ym2612CoreRender",0);
settings.snCoreRender=e->getConfInt("snCoreRender",0);
@ -3146,14 +3138,6 @@ void FurnaceGUI::syncSettings() {
clampSetting(settings.c64Core,0,2);
clampSetting(settings.pokeyCore,0,1);
clampSetting(settings.opnCore,0,1);
clampSetting(settings.arcadeCorePlayback,0,1);
clampSetting(settings.ym2612CorePlayback,0,1);
clampSetting(settings.snCorePlayback,0,1);
clampSetting(settings.nesCorePlayback,0,1);
clampSetting(settings.fdsCorePlayback,0,1);
clampSetting(settings.c64CorePlayback,0,2);
clampSetting(settings.pokeyCorePlayback,0,1);
clampSetting(settings.opnCorePlayback,0,1);
clampSetting(settings.arcadeCoreRender,0,1);
clampSetting(settings.ym2612CoreRender,0,1);
clampSetting(settings.snCoreRender,0,1);
@ -3344,14 +3328,14 @@ void FurnaceGUI::commitSettings() {
settings.mu5Path!=e->getConfString("mu5Path","");
bool coresChanged=(
settings.arcadeCorePlayback!=e->getConfInt("arcadeCore",0) ||
settings.ym2612CorePlayback!=e->getConfInt("ym2612Core",0) ||
settings.snCorePlayback!=e->getConfInt("snCore",0) ||
settings.nesCorePlayback!=e->getConfInt("nesCore",0) ||
settings.fdsCorePlayback!=e->getConfInt("fdsCore",0) ||
settings.c64CorePlayback!=e->getConfInt("c64Core",0) ||
settings.pokeyCorePlayback!=e->getConfInt("pokeyCore",1) ||
settings.opnCorePlayback!=e->getConfInt("opnCore",1) ||
settings.arcadeCore!=e->getConfInt("arcadeCore",0) ||
settings.ym2612Core!=e->getConfInt("ym2612Core",0) ||
settings.snCore!=e->getConfInt("snCore",0) ||
settings.nesCore!=e->getConfInt("nesCore",0) ||
settings.fdsCore!=e->getConfInt("fdsCore",0) ||
settings.c64Core!=e->getConfInt("c64Core",0) ||
settings.pokeyCore!=e->getConfInt("pokeyCore",1) ||
settings.opnCore!=e->getConfInt("opnCore",1) ||
settings.arcadeCoreRender!=e->getConfInt("arcadeCore",0) ||
settings.ym2612CoreRender!=e->getConfInt("ym2612Core",0) ||
settings.snCoreRender!=e->getConfInt("snCore",0) ||
@ -3384,14 +3368,6 @@ void FurnaceGUI::commitSettings() {
e->setConf("c64Core",settings.c64Core);
e->setConf("pokeyCore",settings.pokeyCore);
e->setConf("opnCore",settings.opnCore);
e->setConf("arcadeCorePlayback",settings.arcadeCorePlayback);
e->setConf("ym2612CorePlayback",settings.ym2612CorePlayback);
e->setConf("snCorePlayback",settings.snCorePlayback);
e->setConf("nesCorePlayback",settings.nesCorePlayback);
e->setConf("fdsCorePlayback",settings.fdsCorePlayback);
e->setConf("c64CorePlayback",settings.c64CorePlayback);
e->setConf("pokeyCorePlayback",settings.pokeyCorePlayback);
e->setConf("opnCorePlayback",settings.opnCorePlayback);
e->setConf("arcadeCoreRender",settings.arcadeCoreRender);
e->setConf("ym2612CoreRender",settings.ym2612CoreRender);
e->setConf("snCoreRender",settings.snCoreRender);