diff --git a/src/engine/dispatch.h b/src/engine/dispatch.h index 3118eef2f..528dcebc5 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 b716c77b2..48332e53a 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 b7e72e534..cabdf9c07 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 c4292d47a..29af32e74 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 c7f1ce71d..dfe26777c 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 56c2741de..1ce6264d4 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 e015c2432..310108c0c 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 d0c858d5d..490971c2b 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 6bc4bfa39..719ad3175 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 d9c265475..f9ab3bb5d 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 1748c5836..47d21e616 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 6bb0ffb53..eeaed1217 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 7638fe11b..6d8a3ab53 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; } }