diff --git a/src/engine/dispatch.h b/src/engine/dispatch.h index d1121673d..3b9d231f9 100644 --- a/src/engine/dispatch.h +++ b/src/engine/dispatch.h @@ -315,6 +315,8 @@ enum DivDispatchCmds { DIV_CMD_WS_GLOBAL_SPEAKER_VOLUME, // (multiplier) + DIV_CMD_FM_ALG, + DIV_CMD_MAX }; diff --git a/src/engine/platform/genesis.cpp b/src/engine/platform/genesis.cpp index be99595cb..2ef13b1aa 100644 --- a/src/engine/platform/genesis.cpp +++ b/src/engine/platform/genesis.cpp @@ -1539,6 +1539,9 @@ int DivPlatformGenesis::dispatch(DivCommand c) { break; case DIV_CMD_PRE_NOTE: break; + case DIV_CMD_FM_ALG: + if (c.value>7) break; + rWrite(ADDR_FB_ALG+chanOffs[c.chan], c.value&7); default: //printf("WARNING: unimplemented command %d\n",c.cmd); break; diff --git a/src/engine/playback.cpp b/src/engine/playback.cpp index 2085f279f..e5c0050d6 100644 --- a/src/engine/playback.cpp +++ b/src/engine/playback.cpp @@ -309,7 +309,9 @@ const char* cmdName[]={ "SID3_CUTOFF_SCALING", "SID3_RESONANCE_SCALING", - "WS_GLOBAL_SPEAKER_VOLUME" + "WS_GLOBAL_SPEAKER_VOLUME", + + "FM_ALGORITHM" }; static_assert((sizeof(cmdName)/sizeof(void*))==DIV_CMD_MAX,"update cmdName!"); diff --git a/src/engine/sysDef.cpp b/src/engine/sysDef.cpp index d9bf59f94..c235ac443 100644 --- a/src/engine/sysDef.cpp +++ b/src/engine/sysDef.cpp @@ -502,6 +502,7 @@ void DivEngine::registerSystems() { {0x5e, {DIV_CMD_FM_D2R, _("5Exx: Set decay 2 of operator 3 (0 to 1F)"), constVal<2>, effectValAnd<31>}}, {0x5f, {DIV_CMD_FM_D2R, _("5Fxx: Set decay 2 of operator 4 (0 to 1F)"), constVal<3>, effectValAnd<31>}}, {0x60, {DIV_CMD_FM_OPMASK, _("60xx: Set operator mask (bits 0-3)")}}, + {0xb3, {DIV_CMD_FM_ALG, _("B3xx: Set algorithm (0 to 7)")}}, }; EffectHandlerMap fmOPMPostEffectHandlerMap(fmOPNPostEffectHandlerMap); diff --git a/src/gui/guiConst.cpp b/src/gui/guiConst.cpp index 561bb632f..40938b42d 100644 --- a/src/gui/guiConst.cpp +++ b/src/gui/guiConst.cpp @@ -478,7 +478,7 @@ const FurnaceGUIColors fxColors[256]={ GUI_COLOR_PATTERN_EFFECT_SYS_PRIMARY, GUI_COLOR_PATTERN_EFFECT_SYS_PRIMARY, GUI_COLOR_PATTERN_EFFECT_SYS_PRIMARY, - GUI_COLOR_PATTERN_EFFECT_INVALID, + GUI_COLOR_PATTERN_EFFECT_SYS_PRIMARY, GUI_COLOR_PATTERN_EFFECT_INVALID, GUI_COLOR_PATTERN_EFFECT_INVALID, GUI_COLOR_PATTERN_EFFECT_INVALID,