Volca FM firmware 1.09 unofficial

The latest unofficial firmware offering from Pajen (via redit) is available. Check out the video for the new features.

Features

In additon to the features on the previous unofficial firmware 1.08 (link here). The new features are:

  • You can use DEXED (or anything with a DX7 target) and a MIDI cable to tweak patches on your Volca FM.
  • Automate patch parameters in a sequencer of your choice.

Download links

Here’s a link to the files (files updated as at 1st October 2021):

Updating your Volca Firmware

You will need both files (sys_1 and sys_2) for the firmware to work. Instructions on how to update your Volca FM firmware is in the user manual here:

or watch this video:

DX7 Sysex documentation

Sysex Documentation

For those interested in unpacking the uscd.edu DX7 patch data, here is
DX7 data format information.

 compiled from - the DX7 MIDI Data Format Sheet
               - article by Steve DeFuria (Keyboard Jan 87)
               - looking at what my DX7 spits out

I have kept the kinda weird notation used in the DX7 Data Sheet to reduce
typing errors. Where it doesn’t quite make sense to me I’ve added comments.
(And I will not be liable for errors etc ….)

Contents: A: SYSEX Message: Bulk Data for 1 Voice
B: SYSEX Message: Bulk Data for 32 Voices
C: SYSEX Message: Parameter Change
D: Data Structure: Single Voice Dump & Voice Parameter #’s
E: Function Parameter #’s
F: Data Structure: Bulk Dump Packed Format

////////////////////////////////////////////////////////////
A:

SYSEX Message: Bulk Data for 1 Voice

   bits    hex  description

 11110000  F0   Status byte - start sysex
 0iiiiiii  43   ID # (i=67; Yamaha)
 0sssnnnn  00   Sub-status (s=0) & channel number (n=0; ch 1)
 0fffffff  00   format number (f=0; 1 voice)
 0bbbbbbb  01   byte count MS byte
 0bbbbbbb  1B   byte count LS byte (b=155; 1 voice)
 0ddddddd  **   data byte 1

    |       |       |

 0ddddddd  **   data byte 155
 0eeeeeee  **   checksum (masked 2's complement of sum of 155 bytes)
 11110111  F7   Status - end sysex

///////////////////////////////////////////////////////////
B:

SYSEX Message: Bulk Data for 32 Voices

   bits    hex  description

 11110000  F0   Status byte - start sysex
 0iiiiiii  43   ID # (i=67; Yamaha)
 0sssnnnn  00   Sub-status (s=0) & channel number (n=0; ch 1)
 0fffffff  09   format number (f=9; 32 voices)
 0bbbbbbb  20   byte count MS byte
 0bbbbbbb  00   byte count LS byte (b=4096; 32 voices)
 0ddddddd  **   data byte 1

    |       |       |

 0ddddddd  **   data byte 4096  (there are 128 bytes / voice)
 0eeeeeee  **   checksum (masked 2's comp. of sum of 4096 bytes)
 11110111  F7   Status - end sysex

/////////////////////////////////////////////////////////////
C:

SYSEX MESSAGE: Parameter Change

   bits    hex  description

 11110000  F0   Status byte - start sysex
 0iiiiiii  43   ID # (i=67; Yamaha)
 0sssnnnn  10   Sub-status (s=1) & channel number (n=0; ch 1)
 0gggggpp  **   parameter group # (g=0; voice, g=2; function)
 0ppppppp  **   parameter # (these are listed in next section)
                 Note that voice parameter #'s can go over 128 so
                 the pp bits in the group byte are either 00 for
                 par# 0-127 or 01 for par# 128-155. In the latter case
                 you add 128 to the 0ppppppp byte to compute par#. 
 0ddddddd  **   data byte
 11110111  F7   Status - end sysex

//////////////////////////////////////////////////////////////

D:

Data Structure: Single Voice Dump & Parameter #’s (single voice format, g=0)

Parameter
Number Parameter Value Range
——— ——— ———–
0 OP6 EG rate 1 0-99
1 ” ” rate 2 “
2 ” ” rate 3 “
3 ” ” rate 4 “
4 ” ” level 1 “
5 ” ” level 2 “
6 ” ” level 3 “
7 ” ” level 4 “
8 OP6 KBD LEV SCL BRK PT ” C3= $27
9 ” ” ” ” LFT DEPTH “
10 ” ” ” ” RHT DEPTH “
11 ” ” ” ” LFT CURVE 0-3 0=-LIN, -EXP, +EXP, +LIN
12 ” ” ” ” RHT CURVE ” ” ” ” “
13 OP6 KBD RATE SCALING 0-7
14 OP6 AMP MOD SENSITIVITY 0-3
15 OP6 KEY VEL SENSITIVITY 0-7
16 OP6 OPERATOR OUTPUT LEVEL 0-99
17 OP6 OSC MODE (fixed/ratio) 0-1 0=ratio
18 OP6 OSC FREQ COARSE 0-31
19 OP6 OSC FREQ FINE 0-99
20 OP6 OSC DETUNE 0-14 0: det=-7
21 \
| > repeat above for OSC 5, OSC 4, … OSC 1
125 /
126 PITCH EG RATE 1 0-99
127 ” ” RATE 2 “
128 ” ” RATE 3 “
129 ” ” RATE 4 “
130 ” ” LEVEL 1 “
131 ” ” LEVEL 2 “
132 ” ” LEVEL 3 “
133 ” ” LEVEL 4 “
134 ALGORITHM # 0-31
135 FEEDBACK 0-7
136 OSCILLATOR SYNC 0-1
137 LFO SPEED 0-99
138 ” DELAY “
139 ” PITCH MOD DEPTH “
140 ” AMP MOD DEPTH “
141 LFO SYNC 0-1
142 ” WAVEFORM 0-5, (data sheet claims 9-4 ?!?)
0:TR, 1:SD, 2:SU, 3:SQ, 4:SI, 5:SH
143 PITCH MOD SENSITIVITY 0-7
144 TRANSPOSE 0-48 12 = C2
145 VOICE NAME CHAR 1 ASCII
146 VOICE NAME CHAR 2 ASCII
147 VOICE NAME CHAR 3 ASCII
148 VOICE NAME CHAR 4 ASCII
149 VOICE NAME CHAR 5 ASCII
150 VOICE NAME CHAR 6 ASCII
151 VOICE NAME CHAR 7 ASCII
152 VOICE NAME CHAR 8 ASCII
153 VOICE NAME CHAR 9 ASCII
154 VOICE NAME CHAR 10 ASCII
155 OPERATOR ON/OFF
bit6 = 0 / bit 5: OP1 / … / bit 0: OP6

Note that there are actually 156 parameters listed here, one more than in
a single voice dump. The OPERATOR ON/OFF parameter is not stored with the
voice, and is only transmitted or received while editing a voice. So it
only shows up in parameter change SYS-EX’s.

////////////////////////////////////////////////////////

E:

Function Parameters: (g=2)

Parameter
Number Parameter Range
——— ———- ——
64 MONO/POLY MODE CHANGE 0-1 O=POLY
65 PITCH BEND RANGE 0-12
66 ” ” STEP 0-12
67 PORTAMENTO MODE 0-1 0=RETAIN 1=FOLLOW
68 ” GLISS 0-1
69 ” TIME 0-99
70 MOD WHEEL RANGE 0-99
71 ” ” ASSIGN 0-7 b0: pitch, b1:amp, b2: EG bias
72 FOOT CONTROL RANGE 0-99
73 ” ” ASSIGN 0-7 “
74 BREATH CONT RANGE 0-99
75 ” ” ASSIGN 0-7 “
76 AFTERTOUCH RANGE 0-99
77 ” ASSIGN 0-7 “

///////////////////////////////////////////////////////////////

F:

Data Structure: Bulk Dump Packed Format

OK, now the tricky bit. For a bulk dump the 155 voice parameters for each
voice are packed into 32 consecutive 128 byte chunks as follows …

byte bit #
# 6 5 4 3 2 1 0 param A range param B range
—- — — — — — — — ———— —– ———— —–
0 R1 OP6 EG R1 0-99
1 R2 OP6 EG R2 0-99
2 R3 OP6 EG R3 0-99
3 R4 OP6 EG R4 0-99
4 L1 OP6 EG L1 0-99
5 L2 OP6 EG L2 0-99
6 L3 OP6 EG L3 0-99
7 L4 OP6 EG L4 0-99
8 BP LEV SCL BRK PT 0-99
9 LD SCL LEFT DEPTH 0-99
10 RD SCL RGHT DEPTH 0-99
11 0 0 0 | RC | LC | SCL LEFT CURVE 0-3 SCL RGHT CURVE 0-3
12 | DET | RS | OSC DETUNE 0-14 OSC RATE SCALE 0-7
13 0 0 | KVS | AMS | KEY VEL SENS 0-7 AMP MOD SENS 0-3
14 OL OP6 OUTPUT LEV 0-99
15 0 | FC | M | FREQ COARSE 0-31 OSC MODE 0-1
16 FF FREQ FINE 0-99
17 \
| > these 17 bytes for OSC 5
33 /
34 \
| > these 17 bytes for OSC 4
50 /
51 \
| > these 17 bytes for OSC 3
67 /
68 \
| > these 17 bytes for OSC 2
84 /
85 \
| > these 17 bytes for OSC 1
101 /

byte bit #
# 6 5 4 3 2 1 0 param A range param B range
—- — — — — — — — ———— —– ———— —–
102 PR1 PITCH EG R1 0-99
103 PR2 PITCH EG R2 0-99
104 PR3 PITCH EG R3 0-99
105 PR4 PITCH EG R4 0-99
106 PL1 PITCH EG L1 0-99
107 PL2 PITCH EG L2 0-99
108 PL3 PITCH EG L3 0-99
109 PL4 PITCH EG L4 0-99
110 0 0 | ALG | ALGORITHM 0-31
111 0 0 0 |OKS| FB | OSC KEY SYNC 0-1 FEEDBACK 0-7
112 LFS LFO SPEED 0-99
113 LFD LFO DELAY 0-99
114 LPMD LF PT MOD DEP 0-99
115 LAMD LF AM MOD DEP 0-99
116 | LPMS | LFW |LKS| LF PT MOD SNS 0-7 WAVE 0-5, SYNC 0-1
117 TRNSP TRANSPOSE 0-48
118 NAME CHAR 1 VOICE NAME 1 ASCII
119 NAME CHAR 2 VOICE NAME 2 ASCII
120 NAME CHAR 3 VOICE NAME 3 ASCII
121 NAME CHAR 4 VOICE NAME 4 ASCII
122 NAME CHAR 5 VOICE NAME 5 ASCII
123 NAME CHAR 6 VOICE NAME 6 ASCII
124 NAME CHAR 7 VOICE NAME 7 ASCII
125 NAME CHAR 8 VOICE NAME 8 ASCII
126 NAME CHAR 9 VOICE NAME 9 ASCII
127 NAME CHAR 10 VOICE NAME 10 ASCII

/////////////////////////////////////////////////////////////////////

retrieved from: https://github.com/asb2m10/dexed/blob/master/Documentation/sysex-format.txt