OPLL: add setting to not write freq of top/hi-hat

issue #249
This commit is contained in:
tildearrow 2022-11-15 16:53:05 -05:00
parent c167066296
commit 1f6c25643b
3 changed files with 11 additions and 2 deletions

View file

@ -247,7 +247,7 @@ void DivPlatformOPLL::tick(bool sysTick) {
if (chan[i].freq>65535) chan[i].freq=65535; if (chan[i].freq>65535) chan[i].freq=65535;
int freqt=toFreq(chan[i].freq); int freqt=toFreq(chan[i].freq);
chan[i].freqL=freqt&0xff; chan[i].freqL=freqt&0xff;
if (i>=6 && properDrums) { if (i>=6 && properDrums && (i<9 || !noTopHatFreq)) {
immWrite(0x10+drumSlot[i],freqt&0xff); immWrite(0x10+drumSlot[i],freqt&0xff);
immWrite(0x20+drumSlot[i],freqt>>8); immWrite(0x20+drumSlot[i],freqt>>8);
} else if (i<6 || !drums) { } else if (i<6 || !drums) {
@ -963,6 +963,7 @@ void DivPlatformOPLL::setFlags(const DivConfig& flags) {
for (int i=0; i<11; i++) { for (int i=0; i<11; i++) {
oscBuf[i]->rate=rate/2; oscBuf[i]->rate=rate/2;
} }
noTopHatFreq=flags.getBool("noTopHatFreq",false);
} }
int DivPlatformOPLL::init(DivEngine* p, int channels, int sugRate, const DivConfig& flags) { int DivPlatformOPLL::init(DivEngine* p, int channels, int sugRate, const DivConfig& flags) {

View file

@ -82,7 +82,7 @@ class DivPlatformOPLL: public DivDispatch {
bool useYMFM; bool useYMFM;
bool drums; bool drums;
bool properDrums, properDrumsSys; bool properDrums, properDrumsSys, noTopHatFreq;
bool vrc7; bool vrc7;
unsigned char patchSet; unsigned char patchSet;

View file

@ -318,6 +318,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
case DIV_SYSTEM_VRC7: { case DIV_SYSTEM_VRC7: {
int clockSel=flags.getInt("clockSel",0); int clockSel=flags.getInt("clockSel",0);
int patchSet=flags.getInt("patchSet",0); int patchSet=flags.getInt("patchSet",0);
bool noTopHatFreq=flags.getBool("noTopHatFreq",false);
ImGui::Text("Clock rate:"); ImGui::Text("Clock rate:");
if (ImGui::RadioButton("NTSC (3.58MHz)",clockSel==0)) { 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) { if (altered) {
e->lockSave([&]() { e->lockSave([&]() {
flags.set("clockSel",clockSel); flags.set("clockSel",clockSel);
if (type!=DIV_SYSTEM_VRC7) { if (type!=DIV_SYSTEM_VRC7) {
flags.set("patchSet",patchSet); flags.set("patchSet",patchSet);
} }
flags.set("noTopHatFreq",noTopHatFreq);
}); });
} }
break; break;