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 2311db7801418b13cef4bba0938ecd4c32932687
parent fcf2389a9d2904903ad6b917de4c886e19108994
Author: dsp56300 <dsp56300@users.noreply.github.com>
Date:   Thu, 15 Jul 2021 03:43:36 +0200

multi page C controllers & dump definitions

Diffstat:
Msource/virusLib/microcontroller.cpp | 6+++++-
Msource/virusLib/microcontroller.h | 152+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------
2 files changed, 119 insertions(+), 39 deletions(-)

diff --git a/source/virusLib/microcontroller.cpp b/source/virusLib/microcontroller.cpp @@ -12,6 +12,10 @@ using namespace synthLib; constexpr uint32_t g_sysexPresetHeaderSize = 9; constexpr uint32_t g_singleRamBankCount = 2; +constexpr uint8_t g_pageC_global[] = {45,63,64,65,66,67,68,69,70,85,86,87,90,91,92,93,94,95,96,97,98,99,105,106,110,111,112,113,114,115,116,117,118,120,121,122,123,124,125,126,127}; +constexpr uint8_t g_pageC_multi[] = {5,6,7,8,9,10,11,12,13,14,22,31,32,33,34,35,36,37,38,39,40,41,72,73,74,75,77,78}; +constexpr uint8_t g_pageC_multiPart[] = {31,32,33,34,35,36,37,38,39,40,41,72,73,74,75,77,78}; + namespace virusLib { Microcontroller::Microcontroller(HDI08& _hdi08, ROMFile& _romFile) : m_hdi08(_hdi08), m_rom(_romFile), m_currentBanks({0}), m_currentSingles({0}) @@ -63,7 +67,7 @@ void Microcontroller::sendInitControlCommands() sendControlCommand(GLOBAL_CHANNEL, 0x0); // Set global midi channel to 0 sendControlCommand(MIDI_CONTROL_LOW_PAGE, 0x1); // Enable midi CC to edit parameters on page A sendControlCommand(MIDI_CONTROL_HIGH_PAGE, 0x1); // Enable poly pressure to edit parameters on page B - sendControlCommand(CC_MASTER_VOLUME, 100); // Set master volume to 100 + sendControlCommand(MASTER_VOLUME, 100); // Set master volume to 100 } void Microcontroller::createDefaultState() diff --git a/source/virusLib/microcontroller.h b/source/virusLib/microcontroller.h @@ -35,44 +35,120 @@ public: enum ControlCommand { - CC_DEVICE_ID = 0x5d, // 93 - CC_PART_ENABLE = 0x48, // 72 - CC_PART_MIDI_CHANNEL = 0x22, // 34 - CC_PART_OUTPUT_SELECT = 0x29, // 41 - - CC_PART_MIDI_VOLUME_ENABLE = 0x49, // 73 - CC_PART_MIDI_VOLUME_INIT = 0x28, // 40 - CC_PART_VOLUME = 0x27, // 39 - CC_MASTER_VOLUME = 0x7f, // 127 - - AUDITION = 0x01, // 01 - UNK1a = 0x1a, // 26 - UNK1b = 0x1b, // 27 - UNK1c = 0x1c, // 28 - UNK1d = 0x1d, // 29 - PART_BANK_SELECT = 0x1f, // 31 The change is executed once a program change is received - PART_BANK_CHANGE = 0x20, // 32 The change is executed immediately - PART_PROGRAM_CHANGE = 0x21, // 33 - SECOND_OUTPUT_SELECT = 0x2d, // 45 - UNK35 = 0x35, // 53 - UNK36 = 0x36, // 54 - UNK76 = 0x4c, // 76 - INPUT_THRU_LEVEL = 0x5a, // 90 - INPUT_BOOST = 0x5b, // 91 - MASTER_TUNE = 0x5c, // 92 - DEVICE_ID = 0x5d, // 93 - MIDI_CONTROL_LOW_PAGE = 0x5e, // 94 - MIDI_CONTROL_HIGH_PAGE = 0x5f, // 95 - MIDI_ARPEGGIATOR_SEND = 0x60, // 96 - MULTI_PROGRAM_CHANGE = 0x69, // 105 - MIDI_CLOCK_RX = 0x6a, // 106 - UNK_6d = 0x6d, // 109 - PLAY_MODE = 0x7a, // 122 - PART_NUMBER = 0x7b, // 123 - GLOBAL_CHANNEL = 0x7c, // 124 - LED_MODE = 0x7d, // 125 - LCD_CONTRAST = 0x7e, // 126 - PANEL_DESTINATION = 0x79, // 121 + AUDITION = 01, + + // Multi + MULTI_NAME_CHAR_0 = 5, + MULTI_NAME_CHAR_1 = 6, + MULTI_NAME_CHAR_2 = 7, + MULTI_NAME_CHAR_3 = 8, + MULTI_NAME_CHAR_4 = 9, + MULTI_NAME_CHAR_5 = 10, + MULTI_NAME_CHAR_6 = 11, + MULTI_NAME_CHAR_7 = 12, + MULTI_NAME_CHAR_8 = 13, + MULTI_NAME_CHAR_9 = 14, + + MULTI_DELAY_OUTPUT_SELECT = 22, + + UNK1a = 26, + UNK1b = 27, + UNK1c = 28, + UNK1d = 29, + + // Multi parts + PART_BANK_SELECT = 31, // The change is executed once a program change is received + PART_BANK_CHANGE = 32, // The change is executed immediately + PART_PROGRAM_CHANGE = 33, + PART_MIDI_CHANNEL = 34, + PART_LOW_KEY = 35, + PART_HIGH_KEY = 36, + PART_TRANSPOSE = 37, + PART_DETUNE = 38, + PART_VOLUME = 39, + PART_MIDI_VOLUME_INIT = 40, + PART_OUTPUT_SELECT = 41, + + SECOND_OUTPUT_SELECT = 45, + + UNK35 = 53, + UNK36 = 54, + + // Multi parts + PART_ENABLE = 72, + PART_MIDI_VOLUME_ENABLE = 73, + PART_HOLD_PEDAL_ENABLE = 74, + PART_KEYB_TO_MIDI = 75, + UNK76 = 76, + PART_NOTE_STEAL_PRIO = 77, + PART_PROG_CHANGE_ENABLE = 78, + + INPUT_THRU_LEVEL = 90, + INPUT_BOOST = 91, + MASTER_TUNE = 92, + DEVICE_ID = 93, + MIDI_CONTROL_LOW_PAGE = 94, + MIDI_CONTROL_HIGH_PAGE = 95, + MIDI_ARPEGGIATOR_SEND = 96, + MULTI_PROGRAM_CHANGE = 105, + MIDI_CLOCK_RX = 106, + UNK6d = 109, + PLAY_MODE = 122, + PART_NUMBER = 123, + GLOBAL_CHANNEL = 124, + LED_MODE = 125, + LCD_CONTRAST = 126, + PANEL_DESTINATION = 121, + MASTER_VOLUME = 127 + }; + + enum MultiDump + { + MD_NAME_CHAR_0 = 4, + MD_NAME_CHAR_1 = 5, + MD_NAME_CHAR_2 = 6, + MD_NAME_CHAR_3 = 7, + MD_NAME_CHAR_4 = 8, + MD_NAME_CHAR_5 = 9, + MD_NAME_CHAR_6 = 10, + MD_NAME_CHAR_7 = 11, + MD_NAME_CHAR_8 = 12, + MD_NAME_CHAR_9 = 13, + + MD_CLOCK_TEMPO = 15, + MD_DELAY_MODE = 16, + MD_DELAY_TIME = 17, + MD_DELAY_FEEDBACK = 18, + MD_DELAY_RATE = 19, + MD_DELAY_DEPTH = 20, + MD_DELAY_SHAPE = 21, + MD_DELAY_OUTPUT_SELECT = 22, + MD_DELAY_CLOCK = 23, + MD_DELAY_COLOR = 24, + + MD_PART_BANK_NUMBER = 32, + MD_PART_PROGRAM_NUMBER = 48, + MD_PART_MIDI_CHANNEL = 64, + MD_PART_LOW_KEY = 80, + MD_PART_HIGH_KEY = 96, + MD_PART_TRANSPOSE = 112, + MD_PART_DETUNE = 128, + MD_PART_VOLUME = 144, + MD_PART_MIDI_VOLUME_INIT = 160, + MD_PART_OUTPUT_SELECT = 176, + MD_PART_EFFECT_SEND = 192, + MD_PART_STATE = 240, + }; + + enum MultiPartStateBits + { + MD_PART_ENABLE, + MD_PART_MIDI_VOLUME_ENABLE, + MD_PART_HOLD_PEDAL_ENABLE, + MD_PART_KEYB_TO_MIDI, + MD_PART_INTERNAL_BIT4, + MD_PART_NOTE_STEAL_PRIORITY, + MD_PART_PROG_CHANGE_ENABLE }; enum Page