genMDM – в настоящий момент, древний проект почти десятилетней давности. Когда-то автор колхозно (топором и зубилом) клепал на коленке его аппаратную часть (не аккуратно и убого) и барыжил ей вместе с софтом, как единым «законченным решением». Сейчас проект полностью заброшен автором и формально недоступен как для покупки, так и навскидку для воссоздания ввиду его изначальной закрытости (ведь на его продаже автор «деньги делал» в те времена). На различных торговых площадках можно найти древние экземпляры genMDM, цены на которые определяются исключительно жадностью их владельцев, стимулируемой раритетностью этой фигушки.
Но воссоздать и попробовать этого «зверя» в действии возможность все-таки есть.
Авторский сайт до сих пор доступен, и он содержит множество фотографий интерфейсной части genMDM, построенной на открытой платформе Teensy 2.0 (mega32u4), так что незамысловатую распиновку подключения можно срисовать оттуда. Прошивка для Teensy доступна публично на авторском сайте (как-бы в рамках цели самостоятельного апгрейда ПО для купивших его «продукцию») – «кот в мешке» (т.е. без исходников), но этого достаточно. Ардуино-Леонардо вместо Тинси не подойдет (хоть и имеет аналогичный контроллер) - нужные ноги у Леонарды бездарно занимают светодиоды: так что нужен именно древний Teensy 2.0 (цена клона порядка 7баксов), ну или голый контроллер. Импровизируем доступным способом подключение прошитого Тинси к Мегадрайву – штатное решение: к порту второго джойстика, распиновка на рисунке ниже.
Распиновка порта расширений аналогична порту джойстика (см. рис.) по принципу «как вижу», т.е. формально нумерация контактов разъемов DB9M и DB9F зеркальна с целью одноименного сопряжения – но получается, что у Мегадрайва номера пинов ext-порта не совпадают по схеме, но под распайку выглядят «один-в-один».
Дело за малым – программная часть для Мегадрайва (дамп картриджа genMDM) … Несколько лет назад его взять было негде, и всё – сушите вёсла … Но нашлись добрые люди, которые (не иначе как) сняли дамп с приобретенного в прошлом комплектного genMDM-картриджа (ведь там ни защит ни чего подобного нет, все открыто). Воспроизвести дамп в железе в настоящее время тоже проще-простого: можно использовать как устройства подобные EverDrive, так и изготовить флэш-картридж.
Ура! Оно вроде как работает! Но «вроде как» тут является ключевой фразой, запустить комплекс – целый шаманский танец! В какой последовательности все включать? В ходе многочисленных экспериментов остановился на таком варианте:
- Подключаем Тинси к Мегадрайву (но не к ПК);
- Включаем Сегу (плюс запускаем дамп, в случае Эвердрайва), слышим проигрывание ноты;
- Подключаем Тинси к ПК, слышим на Сеге аккорд (который должен в случае корректного подключения замолкнуть). Далее дожидаемся когда на ПК в системе появится наше «аудио-устройство» - миди-синтезатор, установится драйвер и т.п.;
- И лишь теперь запускаем всякий там миди-софт который уже коннектим между собой и к genMDM в качестве синтезатора.
Да, учесть что по-умолчанию genMDM загружает в сеговский YM2612 лишь один пресет (инструмент), хоть и сразу в несколько слотов … Так что сходу проиграть миди-файл вразумительно не удастся, а вот полязгать на клавиатуре – вполне. Для конфигурирования получившегося миди-синтезатора (а вернее заливки патчей в YM2612 через миди-интерфейс) «в разрыв» миди-цепочки полезно включить спец.-софтину genMDM editor (входом может служить, например, любая миди-клавиатура, хоть эмулируемая; выходом – наш синтезатор genMDM).
Ну так вот, отвлеклись: хотелось стабильности работы, а не шаманств. А еще подключать genMDM к третьему порту джойстика (т.н. порту расширения) – чтоб не дергать постоянно разъем второго джойстика.
Вобщем потребовались определенные временные затраты на реверс-инженеринг софтины (дело незымысловатое: разобрать-собрать), ее разбор причесывание (для понимания что-где фиксить) … ну и небольшие инъекции как функционального, так и косметического характера ;-)
Самое главное – корректную, работоспособную, оптимизированную версию genMDM для работы на третьем порту (сзади официальных приставок «дорестайлингового», первого, поколения). Предлагается как в виде систематизированного и прокомментированного исходного кода, так и готового бинарника. Ну и попутно собрал также версию для работы на втором порту (для клонов и оригиналов второго и т.д. поколений, где третьего порта нет) – разница там в двух цифрах, в исходниках все расписано (это просто кому лень собирать).
- Убран режим «горячего старта», который мешал нормальной работе в ряде случаев, особенно на третьем порту: теперь всегда полная инициализация и одинаково корректная работа.
- Вставлен классический заголовок вместо кастрированного (теперь код начинается штатно с 0x200). Актуализирована информация в нем (включая контрольную сумму).
- Убран явно лишний код инициализации VDP, который и так никак не используется данной программой.
- Код разложен «по полочкам», прокомментирован для удобства понимания и возможных дальнейших модернизаций. Прилагаю также дизассемблированные блоки кода сопроцессора Z80: первый из них так вообще сторонний копи-паст (ибо классика), второй – а-ля «драйвер» управления YM2612.
- Чуток «магии» и размер бинарника стал ровно 1500 байт. Но красота-красотой (в классик-версии для второго порта оставил этот исходник: genMDM-newbuild.asm), а бесполезного говно-кода осталось еще немало: решил вычистить и его (версия для третьего порта еще глубже оптимизирована и прокомментирована - её считаем основной: genMDM-3-newbuild.asm), результат еще компактее и изящней.
Вобщем авторский вариант genMDM написан местами через пень-колоду, на базе шаблона какой-то другой «ассемблерной проги» без глубокого понимания «что там и зачем» - в результате и свистопляска была. Теперь код работает стабильно всегда, включать и подключать всё можно в любой последовательности! ;-)) Да, и если мы не распаиваем аппаратный миди на Тинси – то прошивки genMDM версии 1.01 для него более чем достаточно. Если нужен миди-вход в genMDM с другого инструмента или контроллера (у Тинси на площадке D2) - то рекомендую версию 1.02, т.к. 1.03 как-то менее стабильно работает в связке с genMDM-editor'ом, а без него пресеты (банки) заливать неудобно. Вход можно юзать напрямую без оптопарной развязки при условии толерантности уровней сигналов (avr-контроллеры я соединял просто проводом).
На фотографии пример использования миди-моста (в тестовых целях), подробное описание которого в статье на моем сайте.
Кстати о пресетах, т.е. т.н. "патчах": по-умолчанию наш genMDM синтезатор голый! Заливать в него в рукопашку инструменты из .tfi файлов можно, но обременительно - да и подборку (банк) найти еще нужно ... Вобщем в подборке материалов и инструментов для Мегадрайв-творчества нашел такой полезный редактор банков, а в нем полноинструментальный банк XG (под YM2612 в формате .wopn - приложен здесь). Ксожалению сконвертировать один банк в другой навскидку софтового решения не нашел - формат банка для genMDM (.genm) не поддерживает ни одна другая софтина. Потратил вобщем часок на копипаст и через поинструментный экспорт-импорт создал аналогичный XG-банк для genMDM (xg-genmdm-bank.genm).
PS. genMDM не шедевр конечно, но штучка занятная – потратить 10баксов и собрать ее самому из подручных компонентов, думаю, будет интересно любому гику, интересующемуся творчеством под Мегадрайв.
PPS. Слыхали пословицу где «лох платит всегда»? Так вот на такой уровень потребителей, видимо, рассчитывает барыга, продающий свою самоделку (вариант реинкарнации genMDM) по восьмикратно завышенной цене. Будьте внимательны. Убежден, что решения для некоммерческого творчества должны быть свободными и общедоступными, в случае аппаратной составляющей – распространятся исключительно по себестоимости.
Рекомендую также обратить внимание на аналогичный проект.