diff --git a/src/engine/platform/opll.cpp b/src/engine/platform/opll.cpp index 264f3a7a..a8b51b10 100644 --- a/src/engine/platform/opll.cpp +++ b/src/engine/platform/opll.cpp @@ -247,7 +247,7 @@ void DivPlatformOPLL::tick(bool sysTick) { if (chan[i].freq>65535) chan[i].freq=65535; int freqt=toFreq(chan[i].freq); chan[i].freqL=freqt&0xff; - if (i>=6 && properDrums) { + if (i>=6 && properDrums && (i<9 || !noTopHatFreq)) { immWrite(0x10+drumSlot[i],freqt&0xff); immWrite(0x20+drumSlot[i],freqt>>8); } else if (i<6 || !drums) { @@ -963,6 +963,7 @@ void DivPlatformOPLL::setFlags(const DivConfig& flags) { for (int i=0; i<11; i++) { oscBuf[i]->rate=rate/2; } + noTopHatFreq=flags.getBool("noTopHatFreq",false); } int DivPlatformOPLL::init(DivEngine* p, int channels, int sugRate, const DivConfig& flags) { diff --git a/src/engine/platform/opll.h b/src/engine/platform/opll.h index 390d79a9..8dd8743d 100644 --- a/src/engine/platform/opll.h +++ b/src/engine/platform/opll.h @@ -82,7 +82,7 @@ class DivPlatformOPLL: public DivDispatch { bool useYMFM; bool drums; - bool properDrums, properDrumsSys; + bool properDrums, properDrumsSys, noTopHatFreq; bool vrc7; unsigned char patchSet; diff --git a/src/gui/sysConf.cpp b/src/gui/sysConf.cpp index f1b6822f..9ac674bc 100644 --- a/src/gui/sysConf.cpp +++ b/src/gui/sysConf.cpp @@ -318,6 +318,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo case DIV_SYSTEM_VRC7: { int clockSel=flags.getInt("clockSel",0); int patchSet=flags.getInt("patchSet",0); + bool noTopHatFreq=flags.getBool("noTopHatFreq",false); ImGui::Text("Clock rate:"); if (ImGui::RadioButton("NTSC (3.58MHz)",clockSel==0)) { @@ -356,12 +357,19 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo } } + if (type==DIV_SYSTEM_OPLL_DRUMS) { + if (ImGui::Checkbox("Ignore top/hi-hat frequency changes",&noTopHatFreq)) { + altered=true; + } + } + if (altered) { e->lockSave([&]() { flags.set("clockSel",clockSel); if (type!=DIV_SYSTEM_VRC7) { flags.set("patchSet",patchSet); } + flags.set("noTopHatFreq",noTopHatFreq); }); } break;