Below is the MB50XG project in beta version. It is MIDIO128v3.13 with a driver for the Yamaha DB50XG, DB60XG and NEC XR385 wavetable daughterboards. With thanks to fellow midiboxers Roman01 & Sparx, hardware geeks Chiel & Serge and of course TK and all of you for the MB platform!
LPC17 core, SCS, SD card, any daughterboard adapter (see references below) plus a working soundcard of the said types.
Functionalities:
voicing system and effect operation in db50xg_base.h / .c / db50xg_list.h.
Beta 0.4.3 with global parameters master volume, transpose and master tune implemented
currently being tested for Beta0.4.4: line in functionality for DB60XG/NEC XR385 cards (not DB50XG). Pre-release here:
rudimentary support in db50xg_extra.c for drum setups, multiparts and QS users voices.
Menu support for SCS based apps in db50xg_scs_ui.c/.h, db50xg_scs.ui.inc goes into your scs_config.c file (see example 1).
Basic midi implementation with cc’s managing main effect settings:
cc12 = effect type; cc13 = effect return; cc14=effect pan; cc15 = dry/wet; cc16-31 = effect parameters 1-16 with proper value range checking.
chn1 = reverb; chn2 = chorus ; chn3 = variation (see example 2).
To-do list:
patch filing system,
imidi implementation for master volume, transpose, master tune
separated transpose for midi file, midi in ports etc (see known issues).
sysex handler,
midi implementation for advanced parameters of variation effect (connection, insert, control depths),
SEQV4 menu support (based on seq_ui_todo.c) memory allowing,
Full support for QS, drum setup, multipart and TB300 mode.
Known issues:
transpose function transposes all midi going to soundcard.
Example 1. Include the MB50XG include file into your scs_config.c like this:
/////////////////////////////////////////////
// menu items added for MB50XG
/////////////////////////////////////////////
#include "db50xg_scs_ui.inc"
Then add the MB50XG menu pages to your main menu like this:
const scs_menu_page_t rootMode0[] = {
SCS_SUBPAGE("DB50 ", subpageDB50XG), // this is the new one
SCS_SUBPAGE("Midi ", subpageMIDI), // these three were already there
SCS_SUBPAGE("I/O ", subpageIO),
SCS_SUBPAGE("Sys ", subpageSYS),};
Example 2:
MIOS32_MIDI_SendCC(soundcard.midi_port, Chn1, 12, 4);
// sets reverb effect to reverb type = Room 2
MIOS32_MIDI_SendCC(soundcard.midi_port, Chn2, 15, 0x64);
// sets dry/wet of chorus effect to 0x64
MIOS32_MIDI_SendCC(soundcard.midi_port, Chn3, 18, 27);
// sets effect parameter 3 of variation effect to value 27, look it up in your db50xg manual
Great stuff! I have a rather similar project simmering on low heat. Mine is based on the Core8 module, though. Anyway, I read somewhere on the Intertubes that the DB50XG clones by NEC don’t support the QS300 mode of the original. Have you verified this by any chance?
I can see in your code that you provide a specific macro to turn QS300 processing off, so perhaps you know more.
Thanks for the link. I though I read all of what I could find on DB50XG and midibox.
Perhaps I should have used an LPC17 core to start with. But then, there’s an engineer inside me that tells me, it’s only UI work I do and that a PIC18 is sufficient (you know, “make it as simple as possible…” etc).
I write in “C redux”, i.e. I try hard avoiding all C constructs that produce lots of code.
As for the QS300 thing, that’s disappointing. I thought because Yamaha’s spec defines a QS bulk dump, the clones would implement that too.
Hello sompost, If you’re experienced with pics and asm, that’s great. I’ m always building code and then spend even more time simplifying it. I started this in C but might have should have in C++. Less lines & trickery, more power. I like the esoteric ring of virtual template polymorphy and operator overloading. The clones won’t give you QS voices. They are OEM version of the db60xg, which gives you audio-in in return. There’s also a sw60xg but that’s not a daughter board but a full pc sound card. Check out http://www.studio4all.de/htmle/frameset090.html I think the clones feature sections 3 and 4. I’m now building the code, sparx will test it. Have fun!
Up to 32 Voices created by the QS300 can be saved in the DB50XG’s User Memory by bulk dump messages. (Effective only when the XG mode is active.)
QS300 User Voices are stored in Bank MSB = 63, LSB = 00. Program Change numbers for User Voices are 1 – 32.
I used MIDI-OX. First you should switch the DB to XG mode (MIDI-OX menu: Actions/Send/XG on). Next send one of the QS bank midi file to the DB. I use the MIDI-OX MIDIBar player (Actions/Play MIDI…).
The 32 voices are now available in Bank MSB = 63, Bank LSB = 00. PC = 1 – 32. (you can set it with MIDI-OX Control Panel)
Thank you, I will certainly try the voices. I know the db50xg has qs voices, but found some info that the db60xg and xr385 don’t. Would be great if they do have them!
integrating the DB50XG driver into the SEQ V4 is not gonna work: the LPC1769 has too little SRAM to support both. I could try to squeeze out every single last byte, save mem by disabling SEQ v4 modules I don’t need myself (like CV). But even then there’s only enough mem for a very reduced DB50XG feature set. Dead end street.. TK had warned me, but these DIY spirits made me find out for myself anyway. (Well, coding does not blister my fingers as soldering does…)
So the new strategy is to fully develop DB50XG/DB60XG/XR385 functionality into the MIDIO128 platform. Unless you guys & gals think its better to port to the NG?
Now I come to think of it: a Midibox DB50XG sound module in a commodore datasette case might look quite cool..
Hello sompost, If you’re experienced with pics and asm, that’s great. I’ m always building code and then spend even more time simplifying it. I started this in C but might have should have in C++. Less lines & trickery, more power. I like the esoteric ring of virtual template polymorphy and operator overloading. The clones won’t give you QS voices. They are OEM version of the db60xg, which gives you audio-in in return. There’s also a sw60xg but that’s not a daughter board but a full pc sound card. Check out http://www.studio4all.de/htmle/frameset090.html I think the clones feature sections 3 and 4. I’m now building the code, sparx will test it. Have fun!