Giter VIP home page Giter VIP logo

mega-drive-midi-interface's Introduction

SEGA Mega Drive MIDI Interface

Build GitHub release (latest by date)

Control the Yamaha YM2612 and PSG of the Sega Mega Drive via MIDI.

Features

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

Contributions

Pull requests are welcome, as are donations!

paypal

mega-drive-midi-interface's People

Contributors

dquenne avatar mrobinson513 avatar rhargreaves avatar uzer avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mega-drive-midi-interface's Issues

Connection troubles

First I would like to thank you so much for creating this!

I am using your latest build with an Everdrive MD and a FTDL to controller port cable. (I have not tried burning the binary to a rom yet)

I have verified if the FTDL to controller port cable is working with your Mega Drive Serial Port Diagnostic Tool. I do receive "0123456789\n" correctly and I am able to send characters to the SEGA. So far so good.

On first boot the "mega-drive-midi-interface" shows "Unknown Status 75 X7 USB" in the lower left corner of the screen.

If I reset the SEGA this message disappears and If I reset again it will show "Waiting" in the lower left corner and after a few seconds "PRO SUB"

So I setup Hairless MIDI<->Serial Bridge and "IAC Device Bus" to send MIDI messages from Logic Pro but the SEGA is not receiving any signals.

Then I tried your "mega-midi-ping-pong" which outputs:
In: IAC-besturingsbestand Bus 1
Out: IAC-besturingsbestand Bus 1
20.431µs: Ping? Mismatch! f000227701f70000
21.192749ms: Ping? Mismatch! f000227701f70000
43.507758ms: Ping? Mismatch! f000227701f70000
67.299257ms: Ping? Mismatch! f000227701f70000

EDIT

I now have programmed an 27C322 with the latest release ( I know, that's a lot of wasted space). When I power on the SEGA it shows "serial 4800bps" :) So it seems there is a problem when running this from the Everdrive MD.

But when I run "mega-midi-ping-pong" I still get a mismatch. So now I am wondering what is the problem?

Total Level compatibility with genMDM Editor

Hey,

This is fantastic work!
I've been working on an editor for genMDM (https://github.com/2xAA/genmdm-editor) and I just picked up an Everdrive to try this project out.

Checking compatibility with my editor and it seems the Total Level CCs are being interpreted as 127-0 when they should be inverted for genMDM compatibility (0 being quietest and 127 being loudest).

I'm not sure if you'd be willing to invert the CC at this stage in the project, but maybe adding a genMDM compatibility flag somewhere in SysEx might be a neat solution?

Looking forward to your reply,
Sam

P.S. - I'm also in London, usually free if you wanna chat chiptune/music/code!

The problem of changing the preset through the "presets.c" file

To begin with, I would like to thank the author for his gorgeous creation. We have already given several successful concerts thanks to this.

But now we would like to be able to download our presets in ROM
When I myself create a ROM, everything goes successfully, and it starts on the Blastem emulator. Everything works as it should, but all the settings of sounds always remain as if I had just cloned the repository from github. Perhaps this problem is solved very simply and the whole point is that I am a beginner in this. I hope it is and I hope for help.

I use the following system settings:
Windows 11
WSL 2
Docker
VSCODE
BlastEm (night build)
rtpMIDI
midiTls

I just cloning the repository from Hithab through the Git Clone team, or download the right version. Then I change the settings of presets in the file ./SRC/PResets.C.
Then I edit the path of the output folder a little to avoid error in the
file on line 19 ./utils/docker-run
-v $(pwd)/out:/app/out \ -> -v "/$(pwd)"/out:/app/out \
Then I launch the command in WSL ./docker-make ROM_TYPE=MEGAWIFI
Next, the creation of the ROM takes place and it seems to me, successfully and ends on the line in the terminal RM Res/Sprite.rs
When this new ROM is opened in Blastem, I again see old presets.

What do you think, what could be the problem with the return of the presets to the original ones?

PSG note off event always stops last note

If there's two note on events, for example:

On --> A
On --> B
Off --> A

B is silenced rather than A. A is silenced automatically by the B note on event, so the event itself should just be dropped.

A GNU/Linux alternative for hairless-midiserial: ttymidi (patched by me)

On GNU/Linux (debian) I first had trouble compiling
hairless-midiserial, but after a few tweaks, got it to build. After
that it still didn't see any of my MIDI interfaces to use to bridge
with. Never one to give up, I looked at your code changes to it, and
ported it to a more linux-native simple program: ttymidi. When that
worked, I also decided to add support for standard MIDI 31250 baud
rate (nonstandard serial baud, apparently), which Scott Baker had
modified it for, and my own changes allowing SysEx output (although
not SysEx input), to give my Roland MIDI modules another source from
GNU/Linux. Of course, real USB MIDI is available on GNU/Linux for
them.

Here's the source to share with anyone interested:
ttymidi-mega-drive-midi-interface.tar.bz2

It's a simple program, which "make" will build (with a few compiler
warnings), at least on my systems. It works great for the mega
everdrive pro and your latest prebuilt ROM. Before knowing I'd need
serial conversion, your mega-drive-midi-interface was the best excuse
I had to buy the Mega EverDrive PRO, and now I'm truly enjoying it as
much as I thought I would. Thanks for your great idea and its quality
implementation!

Using the "-m" or "--megaeverdrivepro" option enables your Mega EverDrive PRO-required header.

By the way, are the MIDI instrument patches heard, custom coded by
you, or are the sounds built-in and dictated by an API for the
Genesis/Mega Drive?

Thanks again, it's been fun so far,

Lucas

Add bank editor, easy change channel to drums

Hello everyone.
It would be a good idea to add a bank editor. I'm using a midi controller via UART and it's great, I just miss the ability to implement my own .wopn bank or add .tfi/.dmp instruments and .wav drums.

Another idea would be to make it easier to switch a channel to drum mode via midi cc, since I can't handle SysEx and the programs I've tested on Windows don't work.

DAC Sample and Expanded Ch. 3 Support?

Hello! I just stumbled into this and it looks very promising for some of the music work I'd like to do.

Are there any plans for this software to support sample playback on FM channel 6 or the extended channel modes on 3?

Thank you!

MIDI channel volume should persist between program changes

Channel volume currently is only applied once, which means preset changes will overwrite the total level set by the CC. The CC should instead set a channel-level synth "volume" which can be applied automatically within the synth layer whenever an output total level operator parameter is changed.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.