From bf0c58aedc5e5915efa4c593b6ea0d03ba7b9079 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 12 Jan 2023 18:47:02 -0500 Subject: [PATCH] OPNA/OPNB: implement pitch macro issue #838 --- src/engine/platform/ym2608.cpp | 11 +++++++++++ src/engine/platform/ym2610.cpp | 11 +++++++++++ src/engine/platform/ym2610b.cpp | 11 +++++++++++ 3 files changed, 33 insertions(+) diff --git a/src/engine/platform/ym2608.cpp b/src/engine/platform/ym2608.cpp index f23cf935..16953746 100644 --- a/src/engine/platform/ym2608.cpp +++ b/src/engine/platform/ym2608.cpp @@ -715,6 +715,17 @@ void DivPlatformYM2608::tick(bool sysTick) { } chan[15].freqChanged=true; } + + if (chan[15].std.pitch.had) { + if (chan[15].std.pitch.mode) { + chan[15].pitch2+=chan[15].std.pitch.val; + CLAMP_VAR(chan[15].pitch2,-65535,65535); + } else { + chan[15].pitch2=chan[15].std.pitch.val; + } + chan[15].freqChanged=true; + } + if (chan[15].std.panL.had) { if (chan[15].pan!=(chan[15].std.panL.val&3)) { chan[15].pan=chan[15].std.panL.val&3; diff --git a/src/engine/platform/ym2610.cpp b/src/engine/platform/ym2610.cpp index 8e493c76..bec65c78 100644 --- a/src/engine/platform/ym2610.cpp +++ b/src/engine/platform/ym2610.cpp @@ -650,6 +650,17 @@ void DivPlatformYM2610::tick(bool sysTick) { } chan[adpcmBChanOffs].freqChanged=true; } + + if (chan[adpcmBChanOffs].std.pitch.had) { + if (chan[adpcmBChanOffs].std.pitch.mode) { + chan[adpcmBChanOffs].pitch2+=chan[adpcmBChanOffs].std.pitch.val; + CLAMP_VAR(chan[adpcmBChanOffs].pitch2,-65535,65535); + } else { + chan[adpcmBChanOffs].pitch2=chan[adpcmBChanOffs].std.pitch.val; + } + chan[adpcmBChanOffs].freqChanged=true; + } + if (chan[adpcmBChanOffs].std.panL.had) { if (chan[adpcmBChanOffs].pan!=(chan[adpcmBChanOffs].std.panL.val&3)) { chan[adpcmBChanOffs].pan=chan[adpcmBChanOffs].std.panL.val&3; diff --git a/src/engine/platform/ym2610b.cpp b/src/engine/platform/ym2610b.cpp index c69d28bf..4a58878e 100644 --- a/src/engine/platform/ym2610b.cpp +++ b/src/engine/platform/ym2610b.cpp @@ -717,6 +717,17 @@ void DivPlatformYM2610B::tick(bool sysTick) { } chan[adpcmBChanOffs].freqChanged=true; } + + if (chan[adpcmBChanOffs].std.pitch.had) { + if (chan[adpcmBChanOffs].std.pitch.mode) { + chan[adpcmBChanOffs].pitch2+=chan[adpcmBChanOffs].std.pitch.val; + CLAMP_VAR(chan[adpcmBChanOffs].pitch2,-65535,65535); + } else { + chan[adpcmBChanOffs].pitch2=chan[adpcmBChanOffs].std.pitch.val; + } + chan[adpcmBChanOffs].freqChanged=true; + } + if (chan[adpcmBChanOffs].std.panL.had) { if (chan[adpcmBChanOffs].pan!=(chan[adpcmBChanOffs].std.panL.val&3)) { chan[adpcmBChanOffs].pan=chan[adpcmBChanOffs].std.panL.val&3;