Updated:
Tested on: Roland JUNO-D (MIDI Implementation; requests checked on the device on 2026-09-27)

While writing MIDIFabric’s device definition for the JUNO-D, we built RQ1 messages from Roland’s MIDI Implementation and sent them to the synth to check its replies.

Roland synths use two System Exclusive messages for parameters. RQ1 (command 11H) asks the device to send the data at an address, for a given size. DT1 (command 12H) writes data to an address, or is what the device sends back. Both end with a checksum: add up the address bytes and the size or data bytes, and the checksum is the number that makes that total a multiple of 128. In other words, 128 − (total mod 128), or 0 when the remainder is already 0.

Message layout

Using the JUNO-D (JUNO-D6/D7/D8) as the example:

RQ1:  F0 41 dev 01 05 0A 11  aa bb cc dd  ss tt uu vv  sum F7
DT1:  F0 41 dev 01 05 0A 12  aa bb cc dd  data ...     sum F7
PartMeaning
F0 / F7Start and end of SysEx
41Roland’s manufacturer ID
devDevice ID, 10H–1FH (the spec’s example uses 10H, shown as device ID 17), or 7FH
01 05 0AModel ID of the JUNO-D
11 / 12RQ1 / DT1
aa bb cc ddAddress (4 bytes)
ss tt uu vvSize of the requested data (4 bytes, RQ1 only)
sumChecksum

The device ignores both messages if its Rx Exclusive setting is off.

Calculating the checksum

Add the address bytes and the data bytes (or the size bytes, for RQ1). Take the remainder after dividing by 128. The checksum is 128 minus that remainder; if the remainder is 0, the checksum is 0.

Example 1: set Scene Level to 74 (DT1). This is the example in Roland’s MIDI Implementation.

  • Address 01 00 00 11, data 4A (74).
  • Total: 01 + 00 + 00 + 11 + 4A = 1 + 0 + 0 + 17 + 74 = 92.
  • 92 mod 128 = 92, so the checksum is 128 − 92 = 36 = 24H.
F0 41 10 01 05 0A 12 01 00 00 11 4A 24 F7

Example 2: request the whole of Tone Part 1 (RQ1).

  • Address 02 00 00 00, size 00 00 41 1E.
  • Total: 2 + 0 + 0 + 0 + 0 + 0 + 65 + 30 = 97, so the checksum is 128 − 97 = 31 = 1FH.
F0 41 10 01 05 0A 11 02 00 00 00 00 00 41 1E 1F F7

To check a message you received: add the address, data and checksum bytes. The low 7 bits of the total must be 0.

Addresses and sizes are 7-bit numbers

Each address or size byte holds only 7 bits (0–127). Read them like digits in base 128: aa bb = aa × 128 + bb. So the size 00 00 41 1E above is 65 × 128 + 30 = 8,350 bytes.

When you add an offset to an address, carry at 128, not 256. For example, the JUNO-D’s Scene Sequencer Data 8 starts at 00 47 00 + 7 × 00 20 00: the middle byte becomes 0x47 + 0xE0 = 295 = 2 × 128 + 39, so the result is 01 02 27 00 inside the scene area. Getting the carry wrong is a common reason for a request that the device silently ignores.

What we found on the JUNO-D

  • Roland’s MIDI Implementation says to request data using the fixed start addresses and sizes listed in the address map.
  • On 2026-09-27, a JUNO-D also answered requests for larger ranges: the whole of Tone Part 1 (example 2 above, 8,350 bytes including unused gaps between blocks) and the whole scene (01 00 00 00, size 00 02 47 00 = 41,856 bytes).
  • This is outside the specification and we confirmed it only on the JUNO-D. Other models may not answer.

Large data arrives in several messages

The JUNO-D’s MIDI Implementation says DT1 data larger than 256 bytes must be split into packets of 256 bytes or less, sent at least 20 ms apart, and the JUNO-D sends large data the same way. So when you request a large range, expect several DT1 messages in reply, and when you send a large dump, leave at least 20 ms between packets.

About MIDIFabric

MIDIFabric adds the Roland checksum automatically when you send RQ1 or DT1 from its MIDI Debugger, and lets you type JUNO-D addresses by name instead of bytes. How that works is described in Sending and reading JUNO-D SysEx by name.

← All notes