diff --git a/src/engine/platform/powernoise.cpp b/src/engine/platform/powernoise.cpp index f7393e264..52ee9e99f 100644 --- a/src/engine/platform/powernoise.cpp +++ b/src/engine/platform/powernoise.cpp @@ -101,6 +101,7 @@ void DivPlatformPowerNoise::acquire(short** buf, size_t len) { * EX5 - tap B location (0-15) - noise only * EX6 - portion A offset (0-15) - slope only * EX7 - portion B offset (0-15) - slope only + * EX8 - load LFSR (0-65535) - noise only **/ void DivPlatformPowerNoise::tick(bool sysTick) { @@ -126,16 +127,21 @@ void DivPlatformPowerNoise::tick(bool sysTick) { } } if (chan[i].std.ex2.had && chan[i].slope) { - cWrite(i, 0x03, chan[i].std.ex2.val) + cWrite(i, 0x03, chan[i].std.ex2.val); } if (chan[i].std.ex3.had && chan[i].slope) { - cWrite(i, 0x04, chan[i].std.ex3.val) + cWrite(i, 0x04, chan[i].std.ex3.val); } if ((chan[i].std.ex4.had || chan[i].std.ex5.had) && !chan[i].slope) { - cWrite(i, 0x05, (chan[i].std.ex4.val << 4) | chan[i].std.ex5.val) + cWrite(i, 0x05, (chan[i].std.ex4.val << 4) | chan[i].std.ex5.val); } if ((chan[i].std.ex6.had || chan[i].std.ex7.had) && chan[i].slope) { - cWrite(i, 0x05, (chan[i].std.ex6.val << 4) | chan[i].std.ex7.val) + cWrite(i, 0x05, (chan[i].std.ex6.val << 4) | chan[i].std.ex7.val); + } + if (chan[i].std.ex8.had && !chan[i].slope && chan[i].active && chan[i].std.phaseReset.had && chan[i].std.phaseReset.val==1) { + cWrite(i, 0x03, chan[i].std.ex8.val & 0xff); + cWrite(i, 0x04, chan[i].std.ex8.val >> 8); + chan[i].keyOn=true; } if (chan[i].std.vol.had) { @@ -167,11 +173,6 @@ void DivPlatformPowerNoise::tick(bool sysTick) { cWrite(i, 0x00, slopeCtl(true, true, chan[i].slopeA, chan[i].slopeB)); chan[i].keyOn=true; } - else if (chan[i].active) { - cWrite(i, 0x03, 0x01); - cWrite(i, 0x04, 0x00); - chan[i].keyOn=true; - } } if (chan[i].freqChanged || chan[i].keyOn || chan[i].keyOff) { @@ -239,8 +240,6 @@ void DivPlatformPowerNoise::tick(bool sysTick) { } else { cWrite(i, 0x00, noiseCtl(true, chan[i].am, chan[i].tapBEnable)); - cWrite(i, 0x03, 0x01); - cWrite(i, 0x04, 0x00); } } if (chan[i].keyOff) { diff --git a/src/gui/insEdit.cpp b/src/gui/insEdit.cpp index 99282d974..839f122b0 100644 --- a/src/gui/insEdit.cpp +++ b/src/gui/insEdit.cpp @@ -7264,12 +7264,13 @@ void FurnaceGUI::drawInsEdit() { } if (ins->type==DIV_INS_POWER_NOISE) { macroList.push_back(FurnaceGUIMacroDesc("Control",&ins->std.ex1Macro,0,6,64,uiColors[GUI_COLOR_MACRO_OTHER],false,NULL,NULL,true)); - macroList.push_back(FurnaceGUIMacroDesc("Portion A Length",&ins->std.ex2Macro,0,255,64,uiColors[GUI_COLOR_MACRO_OTHER])); - macroList.push_back(FurnaceGUIMacroDesc("Portion B Length",&ins->std.ex3Macro,0,255,64,uiColors[GUI_COLOR_MACRO_OTHER])); - macroList.push_back(FurnaceGUIMacroDesc("Tap A Location",&ins->std.ex4Macro,0,15,64,uiColors[GUI_COLOR_MACRO_OTHER])); - macroList.push_back(FurnaceGUIMacroDesc("Tap B Location",&ins->std.ex5Macro,0,15,64,uiColors[GUI_COLOR_MACRO_OTHER])); - macroList.push_back(FurnaceGUIMacroDesc("Portion A Offset",&ins->std.ex6Macro,0,15,64,uiColors[GUI_COLOR_MACRO_OTHER])); - macroList.push_back(FurnaceGUIMacroDesc("Portion B Offset",&ins->std.ex7Macro,0,15,64,uiColors[GUI_COLOR_MACRO_OTHER])); + macroList.push_back(FurnaceGUIMacroDesc("Portion A Length",&ins->std.ex2Macro,0,255,128,uiColors[GUI_COLOR_MACRO_OTHER])); + macroList.push_back(FurnaceGUIMacroDesc("Portion B Length",&ins->std.ex3Macro,0,255,128,uiColors[GUI_COLOR_MACRO_OTHER])); + macroList.push_back(FurnaceGUIMacroDesc("Tap A Location",&ins->std.ex4Macro,0,15,96,uiColors[GUI_COLOR_MACRO_OTHER])); + macroList.push_back(FurnaceGUIMacroDesc("Tap B Location",&ins->std.ex5Macro,0,15,96,uiColors[GUI_COLOR_MACRO_OTHER])); + macroList.push_back(FurnaceGUIMacroDesc("Portion A Offset",&ins->std.ex6Macro,0,15,96,uiColors[GUI_COLOR_MACRO_OTHER])); + macroList.push_back(FurnaceGUIMacroDesc("Portion B Offset",&ins->std.ex7Macro,0,15,96,uiColors[GUI_COLOR_MACRO_OTHER])); + macroList.push_back(FurnaceGUIMacroDesc("Load LFSR",&ins->std.ex8Macro,0,16,256,uiColors[GUI_COLOR_MACRO_OTHER],false,NULL,NULL,true)); } drawMacros(macroList,macroEditStateMacros);