Reverse Engineering the EDIROL V-8 MIDI Dump for Total Control

So, on my journey to hook up the EDIROL V-8 to Touchdesigner, I realized that a lot of menu parameters aren’t able to be accessed normally through the MIDI interface by assigning them to CC channels. One of the things I wanted to be able to do is change the effects and transitions on the fly from software without having to go through clunky menus or actually properly plan out my sets. So rather than working on self improvement or trying to find a video toaster or a stack of 8 capture cards so I can do this all digitally, I’ve decided to reverse engineer the parameter memory map for full control over this thing.

When you go to the MIDI menu on the EDIROL V-8 and go to MIDI Bulk Dump, the output looks something like this:

f0417f417f00000028122001000000003d0040001000520029010c0020005d005f010c01010101035af7
f0417f417f0000002812200200000000340108003b0044001b007d00650061005f0115010101010348f7
f0417f417f00000028122003000001005c020300100044001b007d00650061005f0115272501010303f7
f0417f417f00000028122004000003012b01680015004d005b010c000b0061005f0115202101010353f7
f0417f417f000000281220050000000025005c000b002000290052010d011001120114010101010366f7
f0417f417f000000281220060000000007015500000020002900440000005d005f010f01010101031df7
f0417f417f000000281220070000000007006a000b00200029007d010c0061005f010d010101010236f7
f0417f417f0000002812201000007e0015056a036100200000001f0000002000000001000000000af7
f0417f417f0000002812201100011b00210528032e00200000001f00000020000000010000000054f7
f0417f417f00000028122020000060005d005b005a005c005e005f00600055f7
f0417f417f000000281220210000070008000b000c0011000f001000120057f7
f0417f417f000000281220220000330039003600370033003900360037020af7
f0417f417f00000028122023000059004e0065002e001a0046001a00590030f7
f0417f417f00000028122030000342013b002800280028000300010000000000052ef7
f0417f417f00000028122031000041013b0028002800280003000100000000000531f7
f0417f417f0000002812203200034200400028002800280003000100000000000528f7
f0417f417f000000281220330000410040002800280028000300010000000000052bf7
f0417f417f00000028122034000000014f012001200120000600010000000000056df7
f0417f417f0000002812203500012301160120012001200006000900000000000579f7
f0417f417f00000028122036000152010300500050005000060001000b000000054cf7
f0417f417f00000028122037000057013201200120012000040001000b000e000519f7
f0417f417f00000028122040000100000e0100000e00010100000a010075f7
f0417f417f0000002812205000000000000024331000000000000000000000000000000a0000000006000000000000020000000000000017f7
f0417f417f000000281220600200300100007f007601000076010a00000000000000000000000a0148000000020000000500010000000001000100000079f7
f0417f417f00000028122f7f000052f7

I’ve taken the liberty to make this more sane to read by stripping off all the extra bits.

200100: 00 00 00 3d 00 40 00 10 00 52 00 29 01 0c 00 20 
200110: 00 5d 00 5f 01 0c 01 01 01 01 03 00 00 00 34 01 
200205: 08 00 3b 00 44 00 1b 00 7d 00 65 00 61 00 5f 01 
200215: 15 01 01 01 01 03 00 01 00 5c 02 03 00 10 00 44 
20030a: 00 1b 00 7d 00 65 00 61 00 5f 01 15 27 25 01 01 
20031a: 03 00 03 01 2b 01 68 00 15 00 4d 00 5b 01 0c 00 
20040f: 0b 00 61 00 5f 01 15 20 21 01 01 03 00 00 00 25 
200504: 00 5c 00 0b 00 20 00 29 00 52 01 0d 01 10 01 12 
200514: 01 14 01 01 01 01 03 00 00 00 07 01 55 00 00 00 
200609: 20 00 29 00 44 00 00 00 5d 00 5f 01 0f 01 01 01 
200619: 01 03 00 00 00 07 00 6a 00 0b 00 20 00 29 00 7d 
20070e: 01 0c 00 61 00 5f 01 0d 01 01 01 01 02 00 7e 00 
201003: 15 05 6a 03 61 00 20 00 00 00 1f 00 00 00 20 00 
201013: 00 00 01 00 00 00 00 01 1b 00 21 05 28 03 2e 00 
201109: 20 00 00 00 1f 00 00 00 20 00 00 00 01 00 00 00 
201119: 00 00 60 00 5d 00 5b 00 5a 00 5c 00 5e 00 5f 00 
20200f: 60 00 00 07 00 08 00 0b 00 0c 00 11 00 0f 00 10 
20210e: 00 12 00 00 33 00 39 00 36 00 37 00 33 00 39 00 
20220d: 36 00 37 02 00 59 00 4e 00 65 00 2e 00 1a 00 46 
20230c: 00 1a 00 59 00 03 42 01 3b 00 28 00 28 00 28 00 
20300b: 03 00 01 00 00 00 00 00 05 00 41 01 3b 00 28 00 
203107: 28 00 28 00 03 00 01 00 00 00 00 00 05 03 42 00 
203203: 40 00 28 00 28 00 28 00 03 00 01 00 00 00 00 00 
203213: 05 00 41 00 40 00 28 00 28 00 28 00 03 00 01 00 
20330f: 00 00 00 00 05 00 00 01 4f 01 20 01 20 01 20 00 
20340b: 06 00 01 00 00 00 00 00 05 01 23 01 16 01 20 01 
203507: 20 01 20 00 06 00 09 00 00 00 00 00 05 01 52 01 
203603: 03 00 50 00 50 00 50 00 06 00 01 00 0b 00 00 00 
203613: 05 00 57 01 32 01 20 01 20 01 20 00 04 00 01 00 
20370f: 0b 00 0e 00 05 01 00 00 0e 01 00 00 0e 00 01 01 
20400b: 00 00 0a 01 00 00 00 00 00 00 24 33 10 00 00 00 
20500b: 00 00 00 00 00 00 00 00 00 00 00 0a 00 00 00 00 
20501b: 06 00 00 00 00 00 00 02 00 00 00 00 00 00 00 00 
206003: 30 01 00 01 0a 00 76 01 00 00 76 01 0a 00 00 00 
206013: 00 00 00 00 00 00 00 00 0a 01 48 00 00 00 02 00 
206023: 00 00 05 00 01 00 00 00 00 01 00 01 00 00 00 00

You might notice there’s no FF values in here. That’s because MIDI is only 7 bits, which makes the max value 7F. This threw me for a loop when trying to identify how one of the settings worked.

As an example. I’ve already taken a look at how the VideoA Color Adjust setting is stored in memory.

The byte at address 206006 is set to 01 when the number is positive (+0 to +11) and 00 when the number is negative (-1 to -10).

The byte at address 206007 has a positive range of 00 to 0b (0-11 in hex) and a negative range of 7f to 76 (-1 to -10 in hex because the eighth bit is unused in MIDI)

This looks a lot like a signed integer to me and I think it might be possible to write values outside of the range it’s expecting and get stronger saturation or desaturation than what it natively lets you do. I don’t know how it will respond to this yet (may very well crash it), so I am going to open up the mixer and back up EEPROM and Flash contents with a chip programmer before potentially breaking something. For now I will be sticking to known safe values.

Essentially, you are able to poke values directly into the V-8’s memory on the fly over MIDI. The end result of this project is going to be full documentation on what each one of these bytes does, what setting it corresponds to, the range of values, and address it exists at. This will allow for the expansion of the capabilities of the V-8 (and possibly other V- series mixers on the same architecture) beyond anything previously possible.

I’m posting this here to gauge interest and see if anybody would be willing to collaborate with me on this.

I’ve set up a public GitHub repository and I will keep both this post and the respository up to date with any developments. GitHub - geepot/edirol-midi-dump: A project for reverse engineering the MIDI Bulk Dump of the EDIROL V-4 and V-8 series of video mixers to allow for total control of all parameters of the mixer via sysex commands.

5 Likes

oh wow this is such great research ! thank you for dipping into this.

i dont own a v8 but i do own a v4 and am happy to test / poke around anything in there if its helpful

1 Like

@cyberboy666 If you don’t mind using Touchdesigner to grab the MIDI dump then I have the project I used for it posted here: midi_dump.toe ~ pixeldrain

Just go to the Dialogs > MIDI Device Mapper menu and change the In/Out devices to your particular USB MIDI adapter and change the MIDI Out/Thru Switch option to Out on your V-4. To confirm it’s working, if you move the T-Bar it should output some hex in the Python console on the side. Just clear the console and run the MIDI Dump from the V-4 and post the output from that.

In my case, my T-Bar is a little worn out so that was messing up the dump. You can temporarily disable the MIDI output on the controls by changing the Panel Mode option to 03:Midi Out Only. Just remember to set it back afterwards.

I’ll work on throwing some standalone python scripts together so this doesn’t depend on Touchdesigner and make a Github project to keep everything organized. I’ll update the original post with that once I have that set up.

2 Likes

unfortunately i cant run touchdesigner rn coz my only computer is running linux… but let me see if i can dual boot my old laptop for this.

or i can help w python scripting !

1 Like

Ultimately the output just needs to be in that same format as the first code block in the original post to work with the scripts I am going to be committing. All I’m using Touchdesigner for at the moment is to print out the MIDI commands as hex in the terminal. Should be pretty straightforward to do with native Python and mido/rtmidi.

I’m intending on modifying my comparison script to read out directly from the MIDI device and automate this more so I don’t have to paste in each dump, but this is my quick and dirty hack for the moment. I’m working on the initial commit right now to at least get something up on the repo for people to play with.

You are definitely welcome to help with scripting!

3 Likes

I managed to mess up the preview output when I accidentally poked something into the wrong address and the only thing that was able to recover it was a full factory initialization procedure (at least I know it’s recoverable).

I recommend taking a backup of your current settings if you plan on doing any experimentation with this, as it is very possible to mess things up when you are sending byte data over MIDI. Be extra sure of your addresses to make sure you are not writing data anywhere you shouldn’t be. This site has links to some MIDI SysEx dump software that should work for backups and restoring. MIDI System Exclusive Software

2 Likes

Updates!

I’ve completely overhauled the mididump_compare.py script on the Github repo. It now interfaces with the mixer directly via MIDI and adds some really nice features that will make this much more painless to document. It takes an original snapshot of the mixer settings as a base comparison. This is compared to all future dumps as the “Current” values and is recorded as such in the CSV. Still on my todo list is fixing optional write-back to restore your original parameters at the end of the session.

You need to have a recent version of Python 3 (I am using 3.9.16, but higher should work) to run this. Make sure you install “mido” with pip install mido or pip -r requirements.txt in the script directory. When you run the script it will list out the currently attached MIDI devices. If you see nothing here, you need to troubleshoot before moving forward. It should look something like this:

There’s no error handling or input sanitization here because I forgot to add it, so make sure you only put the number of the device in here. Anything else and it’ll crash. Hit enter and the script will guide you through the rest.

This is your original dump. I would recommend setting things like color or brightness settings back to 0 or doing a factory reset just so you have a reference for the 0-value. You can use one of the pieces of software I linked in the post above this one to backup your settings and then factory reset to get a clean baseline if you want.

To perform the dump, go to your Menu > MIDI Setup > MIDI Bulk Dump down near the bottom. Click on that and click yes. Your console should now look like this:

If you want to turn off the hex dump in the console, comment out line 25 (I’ll make this clearer in a future commit). I prefer to have this in the console so I can double check which are the min and max values because sometimes it’s confusing, but it’s not required for the program to function.

Navigate the menu of your mixer to the setting of your choice that you want to record. Enter the name of the setting exactly as you see on the mixer for consistency (if you wish to contribute to the docs). This will be saved in the CSV file with everything else. In this example it is VideoA Hue Adjust.

On your mixer, set the setting to its minimum value first, perform a MIDI dump, set it to its maximum value, and perform another MIDI dump. Once you have completed that it will ask you to make notes for each address. You can just leave this blank if you’re not sure what’s going on, but there are patterns. Here’s an example of some notes that I took.

If you say “n” here, it won’t save anything to the CSV file and it won’t ask you to edit either. That was an oversight on my part and I’ll add that in the next commit. You’ll probably want to type “y” and press enter.

It will ask you if you want to record another setting. If you say yes, it will take you back through the minimum and maximum steps skipping over the initial snapshot step. You can do this as many times as you want until your fingers start hurting from holding down the menu buttons. Everything will be saved in the CSV file for you to go through or contribute to the project.

Let me know if you guys have any questions or any suggestions to improve this. Have fun reverse engineering!

1 Like

I just added experimental support for the V-4. I don’t have one to test with, but I updated the MIDI message handling code with the model ID bytes for the V-4 according to the manual. Please give this a try and let me know if it dumps successfully.

4 Likes

Discovered a couple of limitations when writing back settings. Looks like it is doing EEPROM writes so no realtime control of things like the ProcAmp settings for feedback control. You certainly can do it, but I would advise against it.

Some observations:

  • Writing back values causes a brief hitch on some effects like SHAKE
  • You can change the Effect button bindings on your current memory setting, however, that change will not take effect until it is toggled off and back on again
    • This means your currently active effect will remain in effect despite the change on the EEPROM
    • Also applies to Transitions (at least on my firmware version)

I think the end goal I will be working towards with this project is a computer based GUI for setting up and controlling various parameters of the video mixer with the option for both realtime and batched changes.

2 Likes

very keen to try this - got too busy with other stuff this week but should get to it next week - great research all round !

It looks like there is no way to do a MIDI dump on the V4. It is not in the MIDI menu nor under MIDI in the hidden test menu. The docs make it look like you can read and right to specific addresses with SysEx. However the addresses they show look to only be the settings for which MIDI note or CC is set to which button. You can edit that in the menu and I can’t think of a reason why you would need to change that in real time.

Damn, looks like you’re correct about that. There’s no way to back-up or restore the memory on the V-4. I’ll remove the support in the repo then. I wonder if they ever ended up backporting that to the V-4 with later firmware or if it’s a V-8 exclusive feature.

1 Like

Mine is v1.1. Despite their being a part number for the update disk in the service manual I can’t find anything online about the firmware.