From 65ab3a2b5de17880cea73adca2317a449f382fb9 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 8 Dec 2021 00:33:00 -0500 Subject: [PATCH] keyOffAffectsArp is now per-channel --- src/engine/dispatch.h | 2 +- src/engine/platform/abstract.cpp | 2 +- src/engine/platform/genesis.cpp | 4 ++++ src/engine/platform/genesis.h | 1 + src/engine/platform/genesisext.cpp | 4 ++++ src/engine/platform/genesisext.h | 1 + src/engine/platform/nes.cpp | 2 +- src/engine/platform/nes.h | 2 +- src/engine/platform/pce.cpp | 2 +- src/engine/platform/pce.h | 2 +- src/engine/platform/sms.cpp | 2 +- src/engine/platform/sms.h | 2 +- src/engine/playback.cpp | 2 +- 13 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/engine/dispatch.h b/src/engine/dispatch.h index 3118eef2..528dcebc 100644 --- a/src/engine/dispatch.h +++ b/src/engine/dispatch.h @@ -99,7 +99,7 @@ class DivDispatch { virtual void tick(); virtual bool isStereo(); - virtual bool keyOffAffectsArp(); + virtual bool keyOffAffectsArp(int ch); /** * initialize this DivDispatch. diff --git a/src/engine/platform/abstract.cpp b/src/engine/platform/abstract.cpp index b716c77b..48332e53 100644 --- a/src/engine/platform/abstract.cpp +++ b/src/engine/platform/abstract.cpp @@ -14,7 +14,7 @@ bool DivDispatch::isStereo() { return false; } -bool DivDispatch::keyOffAffectsArp() { +bool DivDispatch::keyOffAffectsArp(int ch) { return false; } diff --git a/src/engine/platform/genesis.cpp b/src/engine/platform/genesis.cpp index b7e72e53..cabdf9c0 100644 --- a/src/engine/platform/genesis.cpp +++ b/src/engine/platform/genesis.cpp @@ -344,6 +344,10 @@ bool DivPlatformGenesis::isStereo() { return true; } +bool DivPlatformGenesis::keyOffAffectsArp(int ch) { + return (ch>5); +} + int DivPlatformGenesis::init(DivEngine* p, int channels, int sugRate) { parent=p; rate=213068; diff --git a/src/engine/platform/genesis.h b/src/engine/platform/genesis.h index c4292d47..29af32e7 100644 --- a/src/engine/platform/genesis.h +++ b/src/engine/platform/genesis.h @@ -52,6 +52,7 @@ class DivPlatformGenesis: public DivDispatch { int dispatch(DivCommand c); void tick(); bool isStereo(); + bool keyOffAffectsArp(int ch); int init(DivEngine* parent, int channels, int sugRate); }; #endif diff --git a/src/engine/platform/genesisext.cpp b/src/engine/platform/genesisext.cpp index c7f1ce71..dfe26777 100644 --- a/src/engine/platform/genesisext.cpp +++ b/src/engine/platform/genesisext.cpp @@ -254,6 +254,10 @@ void DivPlatformGenesisExt::tick() { } } +bool DivPlatformGenesisExt::keyOffAffectsArp(int ch) { + return (ch>8); +} + int DivPlatformGenesisExt::init(DivEngine* parent, int channels, int sugRate) { DivPlatformGenesis::init(parent,channels,sugRate); diff --git a/src/engine/platform/genesisext.h b/src/engine/platform/genesisext.h index 56c2741d..1ce6264d 100644 --- a/src/engine/platform/genesisext.h +++ b/src/engine/platform/genesisext.h @@ -17,5 +17,6 @@ class DivPlatformGenesisExt: public DivPlatformGenesis { public: int dispatch(DivCommand c); void tick(); + bool keyOffAffectsArp(int ch); int init(DivEngine* parent, int channels, int sugRate); }; diff --git a/src/engine/platform/nes.cpp b/src/engine/platform/nes.cpp index e015c243..310108c0 100644 --- a/src/engine/platform/nes.cpp +++ b/src/engine/platform/nes.cpp @@ -270,7 +270,7 @@ int DivPlatformNES::dispatch(DivCommand c) { return 1; } -bool DivPlatformNES::keyOffAffectsArp() { +bool DivPlatformNES::keyOffAffectsArp(int ch) { return true; } diff --git a/src/engine/platform/nes.h b/src/engine/platform/nes.h index d0c858d5..490971c2 100644 --- a/src/engine/platform/nes.h +++ b/src/engine/platform/nes.h @@ -39,7 +39,7 @@ class DivPlatformNES: public DivDispatch { void acquire(short* bufL, short* bufR, size_t start, size_t len); int dispatch(DivCommand c); void tick(); - bool keyOffAffectsArp(); + bool keyOffAffectsArp(int ch); int init(DivEngine* parent, int channels, int sugRate); }; diff --git a/src/engine/platform/pce.cpp b/src/engine/platform/pce.cpp index 6bc4bfa3..719ad317 100644 --- a/src/engine/platform/pce.cpp +++ b/src/engine/platform/pce.cpp @@ -259,7 +259,7 @@ bool DivPlatformPCE::isStereo() { return true; } -bool DivPlatformPCE::keyOffAffectsArp() { +bool DivPlatformPCE::keyOffAffectsArp(int ch) { return true; } diff --git a/src/engine/platform/pce.h b/src/engine/platform/pce.h index d9c26547..f9ab3bb5 100644 --- a/src/engine/platform/pce.h +++ b/src/engine/platform/pce.h @@ -54,7 +54,7 @@ class DivPlatformPCE: public DivDispatch { int dispatch(DivCommand c); void tick(); bool isStereo(); - bool keyOffAffectsArp(); + bool keyOffAffectsArp(int ch); int init(DivEngine* parent, int channels, int sugRate); }; diff --git a/src/engine/platform/sms.cpp b/src/engine/platform/sms.cpp index 1748c583..47d21e61 100644 --- a/src/engine/platform/sms.cpp +++ b/src/engine/platform/sms.cpp @@ -159,7 +159,7 @@ int DivPlatformSMS::dispatch(DivCommand c) { return 1; } -bool DivPlatformSMS::keyOffAffectsArp() { +bool DivPlatformSMS::keyOffAffectsArp(int ch) { return true; } diff --git a/src/engine/platform/sms.h b/src/engine/platform/sms.h index 6bb0ffb5..eeaed121 100644 --- a/src/engine/platform/sms.h +++ b/src/engine/platform/sms.h @@ -34,7 +34,7 @@ class DivPlatformSMS: public DivDispatch { void acquire(short* bufL, short* bufR, size_t start, size_t len); int dispatch(DivCommand c); void tick(); - bool keyOffAffectsArp(); + bool keyOffAffectsArp(int ch); int init(DivEngine* parent, int channels, int sugRate); }; diff --git a/src/engine/playback.cpp b/src/engine/playback.cpp index 7638fe11..6d8a3ab5 100644 --- a/src/engine/playback.cpp +++ b/src/engine/playback.cpp @@ -300,7 +300,7 @@ void DivEngine::processRow(int i, bool afterDelay) { } else if (!(pat->data[whatRow][0]==0 && pat->data[whatRow][1]==0)) { chan[i].note=pat->data[whatRow][0]+pat->data[whatRow][1]*12; if (!chan[i].keyOn) { - if (dispatch->keyOffAffectsArp()) { + if (dispatch->keyOffAffectsArp(i)) { chan[i].arp=0; } }