diff --git a/src/engine/platform/saa.cpp b/src/engine/platform/saa.cpp index b2b3a04e5..d59c27929 100644 --- a/src/engine/platform/saa.cpp +++ b/src/engine/platform/saa.cpp @@ -67,6 +67,10 @@ void DivPlatformSAA1099::tick() { if (chan[i].std.hadWave) { chan[i].psgMode=chan[i].std.wave&3; } + if (chan[i].std.hadEx1) { + saaEnv[i/3]=chan[i].std.ex1; + rWrite(0x18+(i/3),saaEnv[i/3]); + } if (chan[i].freqChanged || chan[i].keyOn || chan[i].keyOff) { chan[i].freq=parent->calcFreq(chan[i].baseFreq,chan[i].pitch,true); if (chan[i].freq>=32768) { diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 01c876b25..c6973b16e 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -1028,6 +1028,10 @@ const char* ssgEnvBits[5]={ "0", "1", "2", "enabled", NULL }; +const char* saaEnvBits[9]={ + "mirror", "loop", "cut", "direction", "resolution", "fixed", "N/A","enabled", NULL +}; + const int orderedOps[4]={ 0, 2, 1, 3 }; @@ -1507,6 +1511,8 @@ void FurnaceGUI::drawInsEdit() { int ex1Max=(ins->type==DIV_INS_AY8930)?8:0; int ex2Max=(ins->type==DIV_INS_AY || ins->type==DIV_INS_AY8930)?4:0; + if (ins->type==DIV_INS_SAA1099) ex1Max=8; + if (settings.macroView==0) { // modern view MACRO_BEGIN(28*dpiScale); NORMAL_MACRO(ins->std.volMacro,ins->std.volMacroLen,ins->std.volMacroLoop,volMin,volMax,"vol",volumeLabel,160,ins->std.volMacroOpen,false,NULL,false,NULL,0,0,0,NULL,uiColors[GUI_COLOR_MACRO_VOLUME],mmlString[0],volMin,volMax); @@ -1518,7 +1524,11 @@ void FurnaceGUI::drawInsEdit() { NORMAL_MACRO(ins->std.waveMacro,ins->std.waveMacroLen,ins->std.waveMacroLoop,0,waveMax,"wave","Waveform",bitMode?64:160,ins->std.waveMacroOpen,bitMode,waveNames,false,NULL,0,0,((ins->type==DIV_INS_AY || ins->type==DIV_INS_AY8930)?1:0),NULL,uiColors[GUI_COLOR_MACRO_WAVE],mmlString[3],0,waveMax); } if (ex1Max>0) { - NORMAL_MACRO(ins->std.ex1Macro,ins->std.ex1MacroLen,ins->std.ex1MacroLoop,0,ex1Max,"ex1","Duty",160,ins->std.ex1MacroOpen,false,NULL,false,NULL,0,0,0,NULL,uiColors[GUI_COLOR_MACRO_OTHER],mmlString[4],0,ex1Max); + if (ins->type==DIV_INS_SAA1099) { + NORMAL_MACRO(ins->std.ex1Macro,ins->std.ex1MacroLen,ins->std.ex1MacroLoop,0,ex1Max,"ex1","Envelope",160,ins->std.ex1MacroOpen,true,saaEnvBits,false,NULL,0,0,0,NULL,uiColors[GUI_COLOR_MACRO_OTHER],mmlString[4],0,ex1Max); + } else { + NORMAL_MACRO(ins->std.ex1Macro,ins->std.ex1MacroLen,ins->std.ex1MacroLoop,0,ex1Max,"ex1","Duty",160,ins->std.ex1MacroOpen,false,NULL,false,NULL,0,0,0,NULL,uiColors[GUI_COLOR_MACRO_OTHER],mmlString[4],0,ex1Max); + } } if (ex2Max>0) { NORMAL_MACRO(ins->std.ex2Macro,ins->std.ex2MacroLen,ins->std.ex2MacroLoop,0,ex2Max,"ex2","Envelope",64,ins->std.ex2MacroOpen,true,ayEnvBits,false,NULL,0,0,0,NULL,uiColors[GUI_COLOR_MACRO_OTHER],mmlString[5],0,ex2Max);