From 39ecab5abd3e422de87b5b0c7bfe91e517fed7fb Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 21 May 2025 18:00:51 -0500 Subject: [PATCH] OPN: ExtCh ALG effect --- src/engine/platform/genesisext.cpp | 6 ++++++ src/engine/platform/ym2203ext.cpp | 6 ++++++ src/engine/platform/ym2608ext.cpp | 6 ++++++ src/engine/platform/ym2610bext.cpp | 6 ++++++ src/engine/platform/ym2610ext.cpp | 6 ++++++ 5 files changed, 30 insertions(+) diff --git a/src/engine/platform/genesisext.cpp b/src/engine/platform/genesisext.cpp index 068a7fc78..11314aa5e 100644 --- a/src/engine/platform/genesisext.cpp +++ b/src/engine/platform/genesisext.cpp @@ -237,6 +237,12 @@ int DivPlatformGenesisExt::dispatch(DivCommand c) { rWrite(0x22,lfoValue); break; } + case DIV_CMD_FM_ALG: { + chan[extChanOffs].state.alg=c.value&7; + // TODO: TL compensation? + rWrite(ADDR_FB_ALG+chanOffs[extChanOffs],(chan[extChanOffs].state.alg&7)|(chan[extChanOffs].state.fb<<3)); + break; + } case DIV_CMD_FM_FB: { chan[extChanOffs].state.fb=c.value&7; rWrite(chanOffs[extChanOffs]+ADDR_FB_ALG,(chan[extChanOffs].state.alg&7)|(chan[extChanOffs].state.fb<<3)); diff --git a/src/engine/platform/ym2203ext.cpp b/src/engine/platform/ym2203ext.cpp index 6f983a41c..1d03bb4f0 100644 --- a/src/engine/platform/ym2203ext.cpp +++ b/src/engine/platform/ym2203ext.cpp @@ -193,6 +193,12 @@ int DivPlatformYM2203Ext::dispatch(DivCommand c) { } break; } + case DIV_CMD_FM_ALG: { + chan[extChanOffs].state.alg=c.value&7; + // TODO: TL compensation? + rWrite(ADDR_FB_ALG+chanOffs[extChanOffs],(chan[extChanOffs].state.alg&7)|(chan[extChanOffs].state.fb<<3)); + break; + } case DIV_CMD_FM_FB: { chan[2].state.fb=c.value&7; rWrite(chanOffs[2]+ADDR_FB_ALG,(chan[2].state.alg&7)|(chan[2].state.fb<<3)); diff --git a/src/engine/platform/ym2608ext.cpp b/src/engine/platform/ym2608ext.cpp index 21449f1ed..798c121bc 100644 --- a/src/engine/platform/ym2608ext.cpp +++ b/src/engine/platform/ym2608ext.cpp @@ -218,6 +218,12 @@ int DivPlatformYM2608Ext::dispatch(DivCommand c) { rWrite(0x22,lfoValue); break; } + case DIV_CMD_FM_ALG: { + chan[extChanOffs].state.alg=c.value&7; + // TODO: TL compensation? + rWrite(ADDR_FB_ALG+chanOffs[extChanOffs],(chan[extChanOffs].state.alg&7)|(chan[extChanOffs].state.fb<<3)); + break; + } case DIV_CMD_FM_FB: { chan[2].state.fb=c.value&7; rWrite(chanOffs[2]+ADDR_FB_ALG,(chan[2].state.alg&7)|(chan[2].state.fb<<3)); diff --git a/src/engine/platform/ym2610bext.cpp b/src/engine/platform/ym2610bext.cpp index abedea0f5..e8757590c 100644 --- a/src/engine/platform/ym2610bext.cpp +++ b/src/engine/platform/ym2610bext.cpp @@ -214,6 +214,12 @@ int DivPlatformYM2610BExt::dispatch(DivCommand c) { rWrite(0x22,lfoValue); break; } + case DIV_CMD_FM_ALG: { + chan[extChanOffs].state.alg=c.value&7; + // TODO: TL compensation? + rWrite(ADDR_FB_ALG+chanOffs[extChanOffs],(chan[extChanOffs].state.alg&7)|(chan[extChanOffs].state.fb<<3)); + break; + } case DIV_CMD_FM_FB: { chan[extChanOffs].state.fb=c.value&7; rWrite(chanOffs[extChanOffs]+ADDR_FB_ALG,(chan[extChanOffs].state.alg&7)|(chan[extChanOffs].state.fb<<3)); diff --git a/src/engine/platform/ym2610ext.cpp b/src/engine/platform/ym2610ext.cpp index e61ff6d68..2cab7c326 100644 --- a/src/engine/platform/ym2610ext.cpp +++ b/src/engine/platform/ym2610ext.cpp @@ -214,6 +214,12 @@ int DivPlatformYM2610Ext::dispatch(DivCommand c) { rWrite(0x22,lfoValue); break; } + case DIV_CMD_FM_ALG: { + chan[extChanOffs].state.alg=c.value&7; + // TODO: TL compensation? + rWrite(ADDR_FB_ALG+chanOffs[extChanOffs],(chan[extChanOffs].state.alg&7)|(chan[extChanOffs].state.fb<<3)); + break; + } case DIV_CMD_FM_FB: { chan[extChanOffs].state.fb=c.value&7; rWrite(chanOffs[extChanOffs]+ADDR_FB_ALG,(chan[extChanOffs].state.alg&7)|(chan[extChanOffs].state.fb<<3));