EsotericLabs

DB50XG / SW60XG / NEC XR385 driver code

14 posts in this topic

Hello Midibox friends,

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!

Beta0.4.3 Xcode project here: . Ready to upload .hex here: .

Hardware requirements:

  • 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

Have fun!


References for daughterboard adapters:

  • copyright of respective owners.
Edited by EsotericLabs

Share this post


Link to post
Share on other sites

Have been playing with this since last night, these cards really are great.

 

If anyone wants to join in the fun, I have three adapters available.

Share this post


Link to post
Share on other sites

+1 New version Beta 0.4.2! Bugs fixed in synchonization of voice menu and incoming midi. Now working properly both in GM and XG.

Beta 0.4.3 has global function master volume, master tune, transpose implemented.

I've got a real DB50XG for a very fair price. Let the feast begin!!

Edited by EsotericLabs

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Hello sompost,

I think you are correct: no QS voices on the clones.

If you have an unbroken link, please post it here.

Good luck with the core8 coding. asm right? Or get a lpc17 core and come join the fun! There are more xr385 heads out here...

Edited by EsotericLabs

Share this post


Link to post
Share on other sites

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.

 

Cheers!

Share this post


Link to post
Share on other sites

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!

Share this post


Link to post
Share on other sites

Hi sompost, I made a box for my db60 clone (), based on MB64E with lot of code customization, so the PIC18 is sufficient, but it needs a lot of ASM work. I'll take some pictures at the weekend.

 

My NEC clone works fine with QS voices! Just upload the voices simply via midi.

Share this post


Link to post
Share on other sites

Oh that's great norbim. I couldn't get it to work on the clones. If you have voices to share, I d be glad to try again. Maybe my code is wrong.

Share this post


Link to post
Share on other sites

Quote from the DB50 doc:
 
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)

 

qs300_voices_e.zip

Share this post


Link to post
Share on other sites

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!

Share this post


Link to post
Share on other sites

I can confirm that the QS sounds can be loaded onto an XR385 using the above method, thanks a lot for that tip.

Can you post some more details of your project?

So far this version using the LPC core features GM/XG voice, MIDI file player, transpose, volume plus the features of the MIDIO128. It's great!

Share this post


Link to post
Share on other sites

Nääää, 

 

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..

Edited by EsotericLabs

Share this post


Link to post
Share on other sites
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!

Hello members

 

You can also use the sw60xg, see my project

Nice if the QS voices  are working and will be made to edit.

(sorry niet zo goed in engels) :)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now