gearmulator

Emulation of classic VA synths of the late 90s/2000s that are based on Motorola 56300 family DSPs
Log | Files | Refs | Submodules | README | LICENSE

commit 355a8a1b2a2c7f4af5fff0c3c7c243a53c26bdf7
parent 94643828a02a8efcda2319fef944012e3b553cd1
Author: dsp56300 <dsp56300@users.noreply.github.com>
Date:   Wed,  4 Dec 2024 21:17:43 +0100

update checksums after applying modifications

Diffstat:
Msource/mqJucePlugin/mqPatchManager.cpp | 2++
Msource/mqLib/mqstate.h | 4++--
Msource/virusJucePlugin/PatchManager.cpp | 5+++++
Msource/virusLib/microcontroller.cpp | 4++--
Msource/virusLib/microcontroller.h | 3++-
Msource/xtJucePlugin/xtPatchManager.cpp | 2++
Msource/xtLib/xtState.h | 4++--
7 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/source/mqJucePlugin/mqPatchManager.cpp b/source/mqJucePlugin/mqPatchManager.cpp @@ -99,6 +99,8 @@ namespace mqJucePlugin result[mqLib::IdxSingleBank] = static_cast<uint8_t>(bank); result[mqLib::IdxSingleProgram] = static_cast<uint8_t>(program); + mqLib::State::updateChecksum(result); + return result; } diff --git a/source/mqLib/mqstate.h b/source/mqLib/mqstate.h @@ -95,8 +95,6 @@ namespace mqLib static void createSequencerMultiData(std::vector<uint8_t>& _data); - private: - template<size_t Size> static bool append(SysEx& _dst, const std::array<uint8_t, Size>& _src) { if(!isValid(_src)) @@ -128,6 +126,8 @@ namespace mqLib return true; } + private: + bool parseSingleDump(const SysEx& _data); bool parseMultiDump(const SysEx& _data); bool parseDrumDump(const SysEx& _data); diff --git a/source/virusJucePlugin/PatchManager.cpp b/source/virusJucePlugin/PatchManager.cpp @@ -252,6 +252,11 @@ namespace genericVirusUI result[249 + 11] = val0; result[249 + 12] = val1; + result[265] = virusLib::Microcontroller::calcChecksum(result, 267 - 2); + + if (result.size() > 267) + result[result.size() - 2] = virusLib::Microcontroller::calcChecksum(result, result.size() - 2); + return result; } diff --git a/source/virusLib/microcontroller.cpp b/source/virusLib/microcontroller.cpp @@ -1244,11 +1244,11 @@ PresetVersion Microcontroller::getPresetVersion(const uint8_t v) return A; } -uint8_t Microcontroller::calcChecksum(const std::vector<uint8_t>& _data, const size_t _offset) +uint8_t Microcontroller::calcChecksum(const std::vector<uint8_t>& _data, const size_t _offset, const size_t _count/* = std::numeric_limits<size_t>::max()*/) { uint8_t cs = 0; - for (size_t i = _offset; i < _data.size(); ++i) + for (size_t i = _offset; i < std::min(_data.size(), _count); ++i) cs += _data[i]; return cs & 0x7f; diff --git a/source/virusLib/microcontroller.h b/source/virusLib/microcontroller.h @@ -8,6 +8,7 @@ #include <list> #include <mutex> +#include <limits> #include "hdi08List.h" #include "hdi08MidiQueue.h" @@ -56,7 +57,7 @@ public: static PresetVersion getPresetVersion(const TPreset& _preset); static PresetVersion getPresetVersion(uint8_t _versionCode); - static uint8_t calcChecksum(const std::vector<uint8_t>& _data, size_t _offset = 5); + static uint8_t calcChecksum(const std::vector<uint8_t>& _data, size_t _offset = 5, size_t _count = std::numeric_limits<size_t>::max()); bool dspHasBooted() const; diff --git a/source/xtJucePlugin/xtPatchManager.cpp b/source/xtJucePlugin/xtPatchManager.cpp @@ -136,6 +136,8 @@ namespace xtJucePlugin _result[xt::SysexIndex::IdxSingleBank ] = static_cast<uint8_t>(bank); _result[xt::SysexIndex::IdxSingleProgram] = static_cast<uint8_t>(program); + xt::State::updateChecksum(_result, wLib::IdxCommand); + return true; }; diff --git a/source/xtLib/xtState.h b/source/xtLib/xtState.h @@ -110,8 +110,6 @@ namespace xt static SysexCommand getCommand(const SysEx& _data); - private: - template<size_t Size> static bool append(SysEx& _dst, const std::array<uint8_t, Size>& _src, uint32_t _checksumStartIndex) { if(!isValid(_src)) @@ -135,6 +133,8 @@ namespace xt return true; } + private: + bool parseSingleDump(const SysEx& _data); bool parseMultiDump(const SysEx& _data); bool parseGlobalDump(const SysEx& _data);