-
Notifications
You must be signed in to change notification settings - Fork 0
Hardware Compatibility Matrix
The bipluk.com platform features modular synthesizer adapters located in sysex_adapters/. Each adapter implements synth-specific header identification, edit buffer auditioning, bank parsing, and checksum recalculation.
Different manufacturers structure SysEx memory through distinct message topologies:
graph TD
Root["Synthesizer SysEx Memory Topologies"] --> TypeA["Bulk Bank Dumps (Monolithic)"]
Root --> TypeB["Single Voice / Edit Buffer Dumps"]
Root --> TypeC["Realtime Parameter Streams"]
TypeA --> A1["Packed Raw (e.g. DX7 4,096 bytes / 32 voices)"]
TypeA --> A2["Block Checksummed (e.g. Roland D-50 35,920 bytes / 64 voices)"]
TypeA --> A3["Nibblized (e.g. Korg M1 16,384 bytes)"]
TypeB --> B1["Immediate Audition (Writes to volatile RAM edit buffer)"]
TypeB --> B2["Direct Patch Storage (Writes to targeted memory slot)"]
TypeC --> C1["Continuous Controller Emulation (e.g. Roland Juno-106 sliders)"]
TypeC --> C2["NRPN / High-Resolution SysEx Parameters"]
Warning
Counterfeit USB-to-MIDI Cables: Budget unbranded USB-to-DIN converter cables (commonly priced under $10) frequently lack internal optocouplers and microprocessor FIFO buffers. These cables reliably fail or corrupt large SysEx bulk transfers. We strongly recommend using genuine Roland, Yamaha, MOTU, or iConnectivity interfaces.
Tip
Roland Super JX / MKS-70: Individual parameter SysEx transmission requires upgraded ROM version 4.08 or Colin Fraser / Fred Vecoven aftermarket firmware. Earlier stock ROMs only support bulk dump transfers.
Below is the verified compatibility matrix for hardware instruments supported by bipluk.com:
| Manufacturer | Model | Single Patch Size | Bank Dump Size | Checksum Algorithm | Recommended Inter-Packet Delay |
|---|---|---|---|---|---|
| Yamaha | DX7 (Mk1) | 163 bytes (155 raw) | 4,104 bytes (4,096 data) | 7-bit two's complement sum | 40ms |
| Yamaha | DX7II-FD / DX7II-D | 266 bytes | 4,096 / 16,384 bytes | Yamaha DX7II checksum | 35ms |
| Yamaha | TX7 | 163 bytes | 4,104 bytes | 7-bit two's complement sum | 50ms |
| Yamaha | TX81Z | 93 bytes (VCED) | 4,096 bytes (32 V + 24 P) | Yamaha 4-OP checksum | 40ms |
| Yamaha | Reface DX | 1,024 bytes (SysEx/JSON) | Bulk voice dumps | Standard Yamaha Syx | USB Native / 10ms |
| Yamaha | FS1R | 1,842 bytes | 128,490 bytes (Bulk) | Yamaha FS1R block check | 30ms |
| Yamaha | YC Series | Custom SysEx | Stage settings | Yamaha YC protocol | USB Native |
| Roland | D-50 / D-550 | 458 bytes | 35,920 bytes (64 patches) | Roland 7-bit two's complement | 30ms |
| Roland | Juno-106 | 18 bytes (parameter) | Realtime slider stream | Direct parameter execution | Immediate / 5ms |
| Roland | JV-1080 / JV-2080 | 1,088 bytes | 65,536 bytes | Roland 7-bit two's complement | 25ms |
| Roland | MKS-70 / Super JX | 156 bytes | 8,960 bytes | Roland two's complement (V4 ROM) | 40ms |
| Roland | JX-8P | 128 bytes | 8,192 bytes | Roland direct block dump | 50ms |
| Roland | JD-Xi | Variable | Variable | Roland 7-bit two's complement | USB Native / 15ms |
| Roland | SE-02 | 128 bytes | Bulk patch dumps | Roland Boutique standard | USB / 15ms |
| Roland | U-20 / U-220 | 256 bytes | Multi-timbral bank dumps | Roland 7-bit two's complement | 35ms |
| Korg | M1 / M1R | 156 bytes | 16,384 bytes (100 combi/prog) | Korg 7-to-8 bit nibble sum | 50ms |
| Korg | MS2000 / MS2000R | 480 bytes | 61,440 bytes (128 programs) | Korg MS checksum | 30ms |
| Korg | microKORG | 256 bytes | 32,768 bytes | Korg micro checksum | 25ms |
| Korg | DW-8000 / EX-8000 | 52 bytes | 3,328 bytes (64 programs) | Korg DW nibble checksum | 45ms |
| Korg | Minilogue XD | Variable | Bulk program dumps | Korg CRC checksum | USB Native |
| Sequential | Prophet-5 Rev4 | 512 bytes | Bank dumps | DSI/Sequential packed nibbles | 30ms |
| Sequential | Prophet-6 | 1,024 bytes | Bulk program dumps | DSI/Sequential packed format | 20ms |
| Sequential | OB-6 | 1,024 bytes | Bulk program dumps | DSI/Sequential packed format | 20ms |
| Sequential | Prophet '08 | 384 bytes | Bulk program dumps | DSI packed format | 25ms |
| Sequential | Prophet 12 | 1,024 bytes | Bulk program dumps | DSI packed format | 20ms |
| Sequential | Tempest | Multi-packet | Drum sound/kit dumps | DSI Tempest packet framing | 25ms |
| Oberheim | Matrix 6 / 6R | 275 bytes | 27,500 bytes (100 patches) | Matrix nibblized format | 60ms |
| Oberheim | Matrix 1000 | 275 bytes | 55,000 bytes (200 RAM) | Matrix nibblized format | 60ms |
| Oberheim | OB-8 / OB-Xa | Variable | Cassette / SysEx format | Oberheim standard | 50ms |
| Oberheim | TEO-5 | 1,024 bytes | Bulk program dumps | Sequential/Oberheim format | 20ms |
| Waldorf | Blofeld | 384 bytes | Bulk bank dump | Waldorf Blofeld checksum | USB / 15ms |
| Waldorf | Pulse / Pulse 2 | 128 bytes | Bulk program dump | Waldorf Pulse checksum | 35ms |
| Waldorf | MicroWave 1 | 256 bytes | Multi-bank dump | Waldorf MW1 framing | 40ms |
| Alesis | Andromeda A6 | 1,024 bytes | Bulk voice dump | Alesis A6 SysEx format | 30ms |
| Ensoniq | ESQ-1 / SQ-80 | 102 bytes | 4,080 bytes (40 programs) | Ensoniq nibble stream | 50ms |
| Kawai | K1 / K1m / K1 II | 98 bytes | 6,272 bytes (64 single + 32 multi) | Kawai K1 block checksum | 45ms |
| Kawai | K4 / K4r | 131 bytes | 8,384 bytes | Kawai K4 block checksum | 40ms |
| Kawai | K5000 / K5000S | Multi-block | Additive sound bank | Kawai K5000 protocol | 30ms |
| Novation | Bass Station II | 512 bytes | Bank dump | Novation AFX/BS2 SysEx | USB Native |
| Casio | CZ-101 / CZ-1000 | 270 bytes (nibblized) | 4,320 bytes (16 voices) | Casio 4-bit nibble stream | 50ms |
| Casio | CZ-5000 / CZ-1 | 270 bytes | 8,640 bytes (32 voices) | Casio 4-bit nibble stream | 45ms |
| Akai | S900 / S1000 / S3000 | Variable | Sample dumps (SDS) | MIDI SDS XOR 7-bit checksum | 40ms |
| Ensoniq | Mirage | Variable | Disk/Sample dumps (SDS) | MIDI SDS protocol | 50ms |
| Behringer | Pro-800 | 256 bytes | Bulk bank dump | Behringer SysEx format | USB / 20ms |
| Behringer | Deepmind 12 | Multi-packet | 1,024 programs | Deepmind SysEx protocol | USB / 15ms |
The adapter engine in sysex_adapters/ uses an object-oriented modular design:
classDiagram
class GenericAdaptation {
+string manufacturerName
+string modelName
+identify(bytes) bool
+extractPatches(bytes) List~Patch~
+calculateChecksum(bytes) int
}
class GenericProgramDumpCapability {
+parseSingleVoice(bytes) Patch
+buildSingleVoice(Patch) bytes
}
class GenericBankDumpCapability {
+int patchCount
+int patchByteLength
+sliceBank(bytes) List~bytes~
}
class GenericEditBufferCapability {
+buildEditBufferMessage(parameterId, value) bytes
}
GenericAdaptation <|-- GenericProgramDumpCapability
GenericAdaptation <|-- GenericBankDumpCapability
GenericAdaptation <|-- GenericEditBufferCapability
To add support for a new synthesizer model:
- Review the protocol mathematical specifications in SysEx Specifications and Checksums and buffer timings in Web MIDI Protocol Engine.
- Implement the parser class inheriting from
GenericAdaptationinsysex_adapters/. - Provide unit tests in
sysex_adapters/test_<ModelName>.pywith representative.syxtest data. - If testing against physical DIN hardware, consult the Hardware MIDI Troubleshooting Guide.
- Submit a Pull Request to https://github.com/maxcomperatore/bipluk.com.
© 2026 bipluk.com. Open source under the GNU General Public License v3.0.
- Home
- Hardware Compatibility Matrix
- Web MIDI Protocol Engine
- SysEx Specifications and Checksums
- FM Synthesis and Algorithm Mathematics
- Reverse Engineering SysEx Protocols
- REST API and Integration
- Vintage Hardware Maintenance Guide
- Hardware MIDI Troubleshooting Guide
- MIDI OX and Snoize Modern Alternatives