Awesome
SEGA Mega Drive MIDI Interface
Control the Yamaha YM2612 and PSG of the Sega Mega Drive via MIDI.
<p align="center"> <img src="https://github.com/rhargreaves/mega-drive-midi-interface/raw/main/docs/blastem_chan.png" width="600" /> </p>Features
- On-screen per-channel activity indicators & log
- Built-in FM presets for General MIDI compatibility
- Built-in PSG envelopes based on the EEF format
- Supports MIDI 1.0 CCs & events (e.g. panning, volume, pitch bending)
- Polyphony via dynamic FM channel mapping
- Portamento (glide)
- Connectivity via:
- Mega EverDrive X7 USB port.
- Mega EverDrive PRO USB port.
- Controller port via custom USB serial cable.
- MegaWiFi cartridge / BlastEm emulator (experimental)
- Control of YM2612 registers via GenMDM-style CCs
Getting Started
Head over to the Wiki for more information and detailed reference pages.
Build & Test
Unit & system tests are compiled and ran as x86 binaries using CMocka. Mega Drive interfaces are mocked.
There are two flavours of ROM:
- The standard build is intended for use in EverDrives or any generic flash ROM cart.
- The MegaWiFi build is intended for use with the BlastEm emulator or MegaWiFi hardware.
The key difference between the two builds is the console header. The standard build has SEGA SSF
as the console string in the ROM header which will instruct an EverDrive to expose its SSF API to the ROM as required for USB communication. The MegaWiFi build has SEGA MEGAWIFI
which will instruct BlastEm and the MegaWiFi Hardware to expose the MegaWiFi APIs to the ROM.
Docker:
Build EverDrive / Generic Flash ROM:
./docker-make release
Build MegaWiFi ROM:
./docker-make release ROM_TYPE=MEGAWIFI
Linux without Docker
You'll need to configure SGDK in your environment accordingly and make changes to the Makefile to support building outside of Docker. I've never tried to build it outside of Docker :)
make
[!WARNING] Building this project requires certain modifications to be applied to the SGDK. If you are not building using Docker you will need to manually apply patches from the docker-sgdk repo (*.patch files in the root) otherwise the build or tests may fail.
Contributions
Pull requests are welcome, as are donations!