diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index e8bfb48b2..d2630aca4 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -5443,6 +5443,7 @@ FurnaceGUI::FurnaceGUI(): displayPendingIns(false), pendingInsSingle(false), displayPendingRawSample(false), + snesFilterHex(false), vgmExportVersion(0x171), drawHalt(10), zsmExportTickRate(60), diff --git a/src/gui/gui.h b/src/gui/gui.h index e20656f7a..30a97a684 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -1039,7 +1039,7 @@ class FurnaceGUI { bool portrait, mobileMenuOpen; bool wantCaptureKeyboard, oldWantCaptureKeyboard, displayMacroMenu; bool displayNew, fullScreen, preserveChanPos, wantScrollList, noteInputPoly; - bool displayPendingIns, pendingInsSingle, displayPendingRawSample; + bool displayPendingIns, pendingInsSingle, displayPendingRawSample, snesFilterHex; bool willExport[32]; int vgmExportVersion; int drawHalt; diff --git a/src/gui/sysConf.cpp b/src/gui/sysConf.cpp index 1b793a2fb..967624a5d 100644 --- a/src/gui/sysConf.cpp +++ b/src/gui/sysConf.cpp @@ -19,6 +19,7 @@ #include "gui.h" #include "misc/cpp/imgui_stdlib.h" +#include bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool modifyOnChange) { bool altered=false; @@ -1273,19 +1274,51 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo } rightClickable } + if (ImGui::Button(snesFilterHex?"Hex##SNESFHex":"Dec##SNESFHex")) { + snesFilterHex=!snesFilterHex; + } + ImGui::SameLine(); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); // wavetable text input size found here if (ImGui::InputText("##MMLWave",&mmlStringSNES)) { int actualData[256]; int discardIt=0; memset(actualData,0,256*sizeof(int)); - decodeMMLStrW(mmlStringSNES,actualData,discardIt,-128,127,false); + decodeMMLStrW(mmlStringSNES,actualData,discardIt,snesFilterHex?0:-128,snesFilterHex?255:127,snesFilterHex); + if (snesFilterHex) { + for (int i=0; i<8; i++) { + if (actualData[i]>=128) actualData[i]-=256; + } + } memcpy(echoFilter,actualData,8*sizeof(int)); altered=true; } if (!ImGui::IsItemActive()) { - encodeMMLStr(mmlStringSNES,echoFilter,8,-1,-1,false); + int actualData[8]; + for (int i=0; i<8; i++) { + if (echoFilter[i]<0 && snesFilterHex) { + actualData[i]=echoFilter[i]+256; + } else { + actualData[i]=echoFilter[i]; + } + } + encodeMMLStr(mmlStringSNES,actualData,8,-1,-1,snesFilterHex); } + int filterSum=( + echoFilter[0]+ + echoFilter[1]+ + echoFilter[2]+ + echoFilter[3]+ + echoFilter[4]+ + echoFilter[5]+ + echoFilter[6]+ + echoFilter[7] + ); + + ImGui::PushStyleColor(ImGuiCol_Text,(filterSum<-128 || filterSum>127)?uiColors[GUI_COLOR_LOGLEVEL_WARNING]:uiColors[GUI_COLOR_TEXT]); + ImGui::Text("sum: %d",filterSum); + ImGui::PopStyleColor(); + if (altered) { e->lockSave([&]() { flags.set("volScaleL",127-vsL);