Merge branch 'master' of https://github.com/tildearrow/furnace into ymf289b

This commit is contained in:
cam900 2023-02-23 21:15:49 +09:00
commit e694687fff
415 changed files with 152066 additions and 7336 deletions

View file

@ -1,6 +1,6 @@
/**
* Furnace Tracker - multi-system chiptune tracker
* Copyright (C) 2021-2022 tildearrow and contributors
* Copyright (C) 2021-2023 tildearrow and contributors
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -34,10 +34,16 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
case DIV_SYSTEM_YM2612_DUALPCM_EXT:
case DIV_SYSTEM_YM2612_CSM: {
int clockSel=flags.getInt("clockSel",0);
bool ladder=flags.getBool("ladderEffect",0);
int chipType=0;
if (flags.has("chipType")) {
chipType=flags.getInt("chipType",0);
} else {
chipType=flags.getBool("ladderEffect",0)?1:0;
}
bool noExtMacros=flags.getBool("noExtMacros",false);
bool fbAllOps=flags.getBool("fbAllOps",false);
ImGui::Text("Clock rate:");
if (ImGui::RadioButton("NTSC (7.67MHz)",clockSel==0)) {
clockSel=0;
altered=true;
@ -58,9 +64,21 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
clockSel=4;
altered=true;
}
if (ImGui::Checkbox("Enable DAC distortion",&ladder)) {
ImGui::Text("Chip type:");
if (ImGui::RadioButton("YM3438 (9-bit DAC)",chipType==0)) {
chipType=0;
altered=true;
}
if (ImGui::RadioButton("YM2612 (9-bit DAC with distortion)",chipType==1)) {
chipType=1;
altered=true;
}
if (ImGui::RadioButton("YMF276 (external DAC)",chipType==2)) {
chipType=2;
altered=true;
}
if (type==DIV_SYSTEM_YM2612_EXT || type==DIV_SYSTEM_YM2612_DUALPCM_EXT || type==DIV_SYSTEM_YM2612_CSM) {
if (ImGui::Checkbox("Disable ExtCh FM macros (compatibility)",&noExtMacros)) {
altered=true;
@ -73,7 +91,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
if (altered) {
e->lockSave([&]() {
flags.set("clockSel",clockSel);
flags.set("ladderEffect",ladder);
flags.set("chipType",chipType);
flags.set("noExtMacros",noExtMacros);
flags.set("fbAllOps",fbAllOps);
});
@ -239,7 +257,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
pdm=false;
altered=true;
}
if (ImGui::RadioButton("1-bit PDM (rev C/E)",pdm==1)) {
if (ImGui::RadioButton("8-bit + TDM (rev C/E)",pdm==1)) {
pdm=true;
altered=true;
}
@ -472,6 +490,8 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
int clockSel=flags.getInt("clockSel",0);
bool noExtMacros=flags.getBool("noExtMacros",false);
bool fbAllOps=flags.getBool("fbAllOps",false);
int ssgVol=flags.getInt("ssgVol",128);
int fmVol=flags.getInt("fmVol",256);
if (ImGui::RadioButton("8MHz (Neo Geo MVS)",clockSel==0)) {
clockSel=0;
@ -491,11 +511,25 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
}
}
if (CWSliderInt("SSG Volume",&ssgVol,0,256)) {
if (ssgVol<0) ssgVol=0;
if (ssgVol>256) ssgVol=256;
altered=true;
} rightClickable
if (CWSliderInt("FM/ADPCM Volume",&fmVol,0,256)) {
if (fmVol<0) fmVol=0;
if (fmVol>256) fmVol=256;
altered=true;
} rightClickable
if (altered) {
e->lockSave([&]() {
flags.set("clockSel",clockSel);
flags.set("noExtMacros",noExtMacros);
flags.set("fbAllOps",fbAllOps);
flags.set("ssgVol",ssgVol);
flags.set("fmVol",fmVol);
});
}
break;
@ -829,7 +863,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
altered=true;
}
ImGui::Text("Initial channel limit:");
if (CWSliderInt("##InitialChannelLimit",&channels,1,8)) {
if (CWSliderInt("##N163_InitialChannelLimit",&channels,1,8)) {
if (channels<1) channels=1;
if (channels>8) channels=8;
altered=true;
@ -847,6 +881,32 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
}
break;
}
case DIV_SYSTEM_ES5506: {
int channels=flags.getInt("channels",0x1f)+1;
int volScale=flags.getInt("volScale",4095);
ImGui::Text("Initial channel limit:");
if (CWSliderInt("##OTTO_InitialChannelLimit",&channels,5,32)) {
if (channels<5) channels=5;
if (channels>32) channels=32;
altered=true;
} rightClickable
ImGui::Text("Volume scale:");
if (CWSliderInt("##VolScaleO",&volScale,0,4095)) {
if (volScale<0) volScale=0;
if (volScale>4095) volScale=4095;
altered=true;
} rightClickable
if (altered) {
e->lockSave([&]() {
flags.set("channels",channels-1);
flags.set("volScale",volScale);
});
}
break;
}
case DIV_SYSTEM_YM2203:
case DIV_SYSTEM_YM2203_EXT:
case DIV_SYSTEM_YM2203_CSM: {
@ -854,6 +914,8 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
int prescale=flags.getInt("prescale",0);
bool noExtMacros=flags.getBool("noExtMacros",false);
bool fbAllOps=flags.getBool("fbAllOps",false);
int ssgVol=flags.getInt("ssgVol",128);
int fmVol=flags.getInt("fmVol",256);
ImGui::Text("Clock rate:");
if (ImGui::RadioButton("3.58MHz (NTSC)",clockSel==0)) {
@ -894,6 +956,18 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
altered=true;
}
if (CWSliderInt("SSG Volume",&ssgVol,0,256)) {
if (ssgVol<0) ssgVol=0;
if (ssgVol>256) ssgVol=256;
altered=true;
} rightClickable
if (CWSliderInt("FM Volume",&fmVol,0,256)) {
if (fmVol<0) fmVol=0;
if (fmVol>256) fmVol=256;
altered=true;
} rightClickable
if (type==DIV_SYSTEM_YM2203_EXT || type==DIV_SYSTEM_YM2203_CSM) {
if (ImGui::Checkbox("Disable ExtCh FM macros (compatibility)",&noExtMacros)) {
altered=true;
@ -909,6 +983,8 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
flags.set("prescale",prescale);
flags.set("noExtMacros",noExtMacros);
flags.set("fbAllOps",fbAllOps);
flags.set("ssgVol",ssgVol);
flags.set("fmVol",fmVol);
});
}
break;
@ -920,6 +996,8 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
int prescale=flags.getInt("prescale",0);
bool noExtMacros=flags.getBool("noExtMacros",false);
bool fbAllOps=flags.getBool("fbAllOps",false);
int ssgVol=flags.getInt("ssgVol",128);
int fmVol=flags.getInt("fmVol",256);
ImGui::Text("Clock rate:");
if (ImGui::RadioButton("8MHz (Arcade)",clockSel==0)) {
@ -944,6 +1022,18 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
altered=true;
}
if (CWSliderInt("SSG Volume",&ssgVol,0,256)) {
if (ssgVol<0) ssgVol=0;
if (ssgVol>256) ssgVol=256;
altered=true;
} rightClickable
if (CWSliderInt("FM/ADPCM Volume",&fmVol,0,256)) {
if (fmVol<0) fmVol=0;
if (fmVol>256) fmVol=256;
altered=true;
} rightClickable
if (type==DIV_SYSTEM_YM2608_EXT || type==DIV_SYSTEM_YM2608_CSM) {
if (ImGui::Checkbox("Disable ExtCh FM macros (compatibility)",&noExtMacros)) {
altered=true;
@ -959,6 +1049,8 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
flags.set("prescale",prescale);
flags.set("noExtMacros",noExtMacros);
flags.set("fbAllOps",fbAllOps);
flags.set("ssgVol",ssgVol);
flags.set("fmVol",fmVol);
});
}
break;
@ -1627,6 +1719,20 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
}
break;
}
case DIV_SYSTEM_SM8521: {
bool noAntiClick=flags.getBool("noAntiClick",false);
if (ImGui::Checkbox("Disable anti-click",&noAntiClick)) {
altered=true;
}
if (altered) {
e->lockSave([&]() {
flags.set("noAntiClick",noAntiClick);
});
}
break;
}
case DIV_SYSTEM_SWAN:
case DIV_SYSTEM_BUBSYS_WSG:
case DIV_SYSTEM_PET: