commit 3f9a82eef52728d0eb57d73f0eec062d9401054b
parent f3e265a621de7a1e0d0b9400c913cad7f66cbe93
Author: dsp56300 <dsp56300@users.noreply.github.com>
Date: Thu, 28 Jul 2022 21:53:46 +0200
add support to store the 128 RAM multis in plugin state, fixes #110
Diffstat:
2 files changed, 16 insertions(+), 7 deletions(-)
diff --git a/source/virusLib/microcontroller.cpp b/source/virusLib/microcontroller.cpp
@@ -46,8 +46,11 @@ Microcontroller::Microcontroller(HDI08& _hdi08, ROMFile& _romFile) : m_hdi08(_hd
m_globalSettings.fill(0);
- m_rom.getMulti(0, m_multiEditBuffer);
+ for(size_t i=0; i<m_multis.size(); ++i)
+ m_rom.getMulti(0, m_multis[i]);
+ m_multiEditBuffer = m_multis.front();
+
bool failed = false;
// read all singles from ROM and copy first ROM banks to RAM banks
@@ -643,11 +646,12 @@ bool Microcontroller::requestMulti(BankNumber _bank, uint8_t _program, TPreset&
return true;
}
- if (_bank != BankNumber::A)
+ if (_bank != BankNumber::A || _program >= m_multis.size())
return false;
// Load from flash
- return m_rom.getMulti(_program, _data);
+ _data = m_multis[_program];
+ return true;
}
bool Microcontroller::requestSingle(BankNumber _bank, uint8_t _program, TPreset& _data) const
@@ -700,6 +704,12 @@ bool Microcontroller::writeSingle(BankNumber _bank, uint8_t _program, const TPre
bool Microcontroller::writeMulti(BankNumber _bank, uint8_t _program, const TPreset& _data)
{
+ if(_bank == BankNumber::A && _program < m_multis.size())
+ {
+ m_multis[_program] = _data;
+ return true;
+ }
+
if (_bank != BankNumber::EditBuffer)
{
LOG("We do not support writing to RAM or ROM, attempt to write multi to bank " << static_cast<int>(toMidiByte(_bank)) << ", program " << static_cast<int>(_program));
@@ -760,12 +770,10 @@ bool Microcontroller::partProgramChange(const uint8_t _part, const uint8_t _valu
bool Microcontroller::multiProgramChange(uint8_t _value)
{
- TPreset multi;
-
- if(!m_rom.getMulti(_value, multi))
+ if(_value >= m_multis.size())
return true;
- return loadMulti(_value, multi);
+ return loadMulti(_value, m_multis[_value]);
}
bool Microcontroller::loadMulti(uint8_t _program, const TPreset& _multi)
diff --git a/source/virusLib/microcontroller.h b/source/virusLib/microcontroller.h
@@ -70,6 +70,7 @@ private:
dsp56k::HDI08& m_hdi08;
ROMFile& m_rom;
+ std::array<TPreset,128> m_multis;
TPreset m_multiEditBuffer;
std::array<uint8_t, 256> m_globalSettings;