From decd2fde0f21cc353a2780cc8d84eb30ce08b3f6 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 28 Aug 2023 16:36:26 -0500 Subject: [PATCH] MSM5232: work around possible chip quirk when changing control, it seemingly retriggers all channels issue #1433 --- src/engine/platform/msm5232.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/engine/platform/msm5232.cpp b/src/engine/platform/msm5232.cpp index e4564134e..8ad6b1da9 100644 --- a/src/engine/platform/msm5232.cpp +++ b/src/engine/platform/msm5232.cpp @@ -20,9 +20,9 @@ #define _USE_MATH_DEFINES #include "msm5232.h" #include "../engine.h" +#include "../../ta-log.h" #include -//#define rWrite(a,v) pendingWrites[a]=v; #define rWrite(a,v) if (!skipRegisterWrites) {writes.push(QueuedWrite(a,v)); if (dumpWrites) {addWrite(a,v);} } #define NOTE_LINEAR(x) ((x)<<7) @@ -49,6 +49,7 @@ void DivPlatformMSM5232::acquire(short** buf, size_t len) { for (size_t h=0; hwrite(w.addr,w.val); regPool[w.addr&0x0f]=w.val; writes.pop(); @@ -125,6 +126,10 @@ void DivPlatformMSM5232::tick(bool sysTick) { for (int i=0; i<2; i++) { if (updateGroup[i]) { rWrite(12+i,groupControl[i]); + // do not retrigger inactive channels + for (int j=i<<2; j<(i+1)<<2; j++) { + if (!chan[j].active) rWrite(j,0); + } updateGroup[i]=false; } if (updateGroupAR[i]) {