Заказал пару YM2149F из китая. Одна будет стоять в ПК "Дуэт" в виде отдельной платы, вставляющейся в слот расширения. Вторая YM2149F типа запасная, но вот подумалось - нельзя ли ее как-то прикрутить к PC ? Ну не знаю, в качестве ISA-8 платы или с помощью топора, LTP-порта и какого-нибуть микроконтроллера? А то чего оно будет просто так лежать....
UPD 10.01.2015:
В результате этой темы сначала подключил YM к LPT (схема здесь), а затем захотелось подключить и к USB. В итоге получилось следующее:
Используемый микроконтроллер - дешевый старенький PIC16F628A, без аппаратного USB. Используется программная реализация USB 1.1 с помощью библиотеки 16fusb . В качестве проигрывателя выступает знаменитый ZX Tune. Напрямую он не поддерживает AY-USB, зато если находит у себя в директории одну из библиотек dlportio.dll/inpout32.dll/inpoutx64.dll , то позволяет переключится в настройках вывода звука на YM-LPT, а затем использует функцию __stdcall void DlPortWritePortUchar(unsigned short port, unsigned char val); для выдачи байт YM2149.
Так, если написать библиотеку-заглушку с этой функцией, то возможно перенаправлять вывод байт на USB устройство. Что я и сделал, взял за основу исходники inpout32. На выходе получаются библиотеки inpout32.dll или inpoutx64.dll, в зависимости от используемой версии плеера (x86/x64). Они уже есть в скомпилированном виде в приложенном архиве, достаточно одну их них скопировать в папку с ZX Tune, запустить плеер, зайти в настройки звука и переместить на самый верх устройство "aylpt".
Драйвера для Win XP, Win 7 x86/x64 скачиваются здесь: http://16fusb.googlecode.com/files/1...32-1.2.6.0.zip
Уже скомпилированная прошивка для PIC, библиотеки inpout32.dll/inpoutx64.dll . Так же выложены исходники прошивки, исходники библиотеки-заглушки и конечно схема устройства.
Немного по схеме
для тактирования PIC применен кварцевый генератор, а не кварц, тем самым высвобождая одну ногу МК (RA6), необходимую для управления сигналом RESET. Нога RA5, торчащая в воздухе, в данном семействе работает только на вход и не может быть использована для управления выходным сигналом. Можно было бы попробовать ее (ногу RA5) использовать как входной сигнал U+ или U- USB, но в обработчике прерывания тогда бы увеличилась задержка из-за разбросанности на разных портах (порт A и порт B) сигналов, что скорее всего привело бы к неработоспособности USB стека. Хотя не отрицаю, что возможно бы и получилось перенести с ноги RB2 функционал на RA5, а RB2 использовать для управления RESET, а МК тактовать просто от кварца. Но, как получилось. С другой стороны, для тактирования YM2149F собран генератор на микросхеме 74HC02 и кварце 3.579545 MHz. Можно было бы попробовать использовать вторую свободную половину микросхемы для сборки аналогичного генератора и для PIC, но остановило два момента: 1) у меня нету кварца на 24МГц (а кварцевый генератор был, с какой-то древней мамки) 2) я не знаю, как поведет себя 74HC02, если с "разных боков" у нее будут разные частоты, причем одна из них довольно высокая (24МГц все таки большая частота).
Дальше, нога RA4, которая управляет сигналом BDIR, с открытым коллектором, поэтому ее обязательно нужно подтянуть к питанию - на схеме это 10K резистор R5.[свернуть]
Немного деталей по прошивке
Прошивка базируется на оригинале библиотеки 16FUSB, но многое подогнано "под себя":
- выкинуто все, что связано с чтением сигналов из PIC в хост (компьютер) для увеличения быстродействия обработки реквестов USB;
- состояние направлений портов ввода-вывода жёстко задано при инициализации МК и не изменяется в процедурах выдачи байта на ноги.
- организован кольцевой буфер на 30 байт. При декодировании запроса от хоста байты складываются в буфер. Когда есть свободное время, данные из буфера выдаются на YM.
- дичайше оптимизирована скорость выдачи байта на ноги МК. Частично за счет жестко указанных направлений ввода-вывода, частично из-за известности предыдущего состояния управляющих бит.
- что-то еще по мелочи.
UPD: 17.01.2015:
- Пофикшен глюк с зацикливанием PIC через несколько тысяч пакетов (развернут цикл RxLoop в файле isr.asm, вместо goto RxLoop вставлена проверка на признак конца пакета)
- Теперь данные передаются сразу по 16 байт, то есть два дата-пакета USB без UBR по 8 байт. Буфер в контроллере расширен до 64 байт.
[свернуть]
Про стабильность и скорость: Сначала было ооочень медленно, потом было медленно и, наконец стало нормально. Проверил на двух машинах - одна с Win7 x64 быстрая современная, другая - ноут с Win XP на атоме. Работает одинаково и там и там. Но не исключаю, что на какой-то другой конфигурации может вести себя по другому, поэтому собирая устройство помните - вы делаете это на свой страх и риск.
PS: К ПК "Дуэт" тоже подключил YM, как и хотел. Тут подробнее:тема про Дуэт