Вход

Просмотр полной версии : Прикрутить YM2149F к IBM-PC?



Tronix
19.11.2013, 11:09
Заказал пару YM2149F из китая. Одна будет стоять в ПК "Дуэт" в виде отдельной платы, вставляющейся в слот расширения. Вторая YM2149F типа запасная, но вот подумалось - нельзя ли ее как-то прикрутить к PC ? Ну не знаю, в качестве ISA-8 платы или с помощью топора, LTP-порта и какого-нибуть микроконтроллера? А то чего оно будет просто так лежать....

UPD 10.01.2015:
В результате этой темы сначала подключил YM к LPT (схема здесь (http://zx-pk.ru/showpost.php?p=656456&postcount=102)), а затем захотелось подключить и к USB. В итоге получилось следующее:

http://habrastorage.org/files/e33/25d/981/e3325d9819e74fe6866a5cc09b558395.JPG

Используемый микроконтроллер - дешевый старенький PIC16F628A, без аппаратного USB. Используется программная реализация USB 1.1 с помощью библиотеки 16fusb (http://code.google.com/p/16fusb/) . В качестве проигрывателя выступает знаменитый ZX Tune (http://zxtune.bitbucket.org/). Напрямую он не поддерживает AY-USB, зато если находит у себя в директории одну из библиотек dlportio.dll/inpout32.dll/inpoutx64.dll , то позволяет переключится в настройках вывода звука на YM-LPT, а затем использует функцию __stdcall void DlPortWritePortUchar(unsigned short port, unsigned char val); для выдачи байт YM2149.

http://habrastorage.org/files/315/8fa/c12/3158fac127cd491898983d633539d174.png

Так, если написать библиотеку-заглушку с этой функцией, то возможно перенаправлять вывод байт на USB устройство. Что я и сделал, взял за основу исходники inpout32 (http://www.highrez.co.uk/Downloads/InpOut32/). На выходе получаются библиотеки inpout32.dll или inpoutx64.dll, в зависимости от используемой версии плеера (x86/x64). Они уже есть в скомпилированном виде в приложенном архиве, достаточно одну их них скопировать в папку с ZX Tune, запустить плеер, зайти в настройки звука и переместить на самый верх устройство "aylpt".

Драйвера для Win XP, Win 7 x86/x64 скачиваются здесь: http://16fusb.googlecode.com/files/16FUSB_driver-libusb-win32-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, как и хотел. Тут подробнее:тема про Дуэт (http://zx-pk.ru/showthread.php?t=7503&highlight=%E4%F3%FD%F2&page=6)

Hacker VBI
19.11.2013, 11:11
а смысл

Tronix
19.11.2013, 11:17
Играть AY музыку на него....

psb
19.11.2013, 12:42
AY-LPT давно существует, хотя устарел сильно. к усб тоже были попытки цеплять, только вот софта нет.

vlad
19.11.2013, 13:00
Back to the Future. Глубокий смысл в этом есть...


ayplayer (https://github.com/sisoftrg/ayplayer)

Sound player for popular ZX Spectrum formats for AY8910 sound chip on LTP port or with software emulation.

LPT AY by Vitaly Mayatskih & Alexander Kulik [Wolf^eTc/Scene] (http://ru.scribd.com/doc/103838815/LPT-AY-by-Vitaly-Mayatskih)

In same day I built this little board, connected to PC and wrote plug-in
for Zx-Spectrum emulator by Shalaev.
Совсем недавно в эхе ZX.Spectrum была затpонута тема подключения музыкального пpоцессоpа AY к паpаллельному поpту LPT. Меня это очень заинтеpесовало и я отписался от эхи что-бы завеpшить pаботу над нашими пpоектами, а также осуществить подключение AY к LPT поpту. И тут ко мне пpишло письмо от Vitaly Mayatskih с уже готовой схемой подключения. После ее пpосмотpа, я пpоизвел небольшое изменение в плане pеализации сигнала Select. В пеpвоначальной ваpианте необходимо было подключать к 13 выводу поpта, а я заменил на 17 вывод, т.к. Select (13) pаботает только в pежиме input. И еще были добавлены два резистора и два конденсатора, вместо одного резистора :). После этого, я нагpел свой паяльник и спаял эту схему, в тот же день я ее отладил и написал plug-in к Шалаеву.
Оказалось что самое сложное, в реализации этой схеме, так это найти
лишний AY-8910 :)

Эмулятор AY-8910 на ATMega (http://zx.pk.ru/showthread.php?t=10510&page=9)

Wild Sound... (http://zx.pk.ru/showthread.php?t=5440&highlight=wild+sound)

ZX Spectrum Computer Sound Chip Emulator (http://bulba.untergrund.net/elect.htm)

Схема подключения YM2149F к порту принтера (LPT) PC от Romanich'а с печатной платой, фотографией, описанием и плеерами YM3 и YM5/YM6-файлов (с исходным текстом).

YM2149 sound generator, Arduino and fast pin switching (http://electronicfields.wordpress.com/2012/04/09/ym2149-sound-generator-arduino-fast-pin-switching/)

To be continued...

psb
19.11.2013, 16:33
Глубокий смысл в этом есть...
где-то очень глубоко...

нужен нормальный современный продвинутый девайс, тогда может быть появится его поддержка в популярных программах. а на данный момент ничего такого не видно, хотя успешные попытки играть музоны на ay через усб были.

Vitamin
19.11.2013, 16:41
Одно время в ZXTune была поддержка реального чипа через LPT. Поскольку подначивший меня на это товарищ так и не удосужился проверить работоспособность, поддержка почила в бозе.

Tronix
19.11.2013, 17:38
ZX Spectrum Computer Sound Chip Emulator (http://bulba.untergrund.net/elect.htm)

Спасибо, то что нужно. В архиве LPT-YM.7z там даже исходники плееров на паскале, очень удобно. Попробую собрать тогда по схеме
http://habrastorage.org/storage3/ecd/000/576/ecd00057685cc80a05e44f034618aa16.png

Только не понятно, нафига какая-то "кренка" и какие-то 9 вольт. Выкину и возьму 5 вольт с любого разьема, например от харда. Так же не совсем понятно, нужен ли сабжу кварцевый генератор. Где-то читал, что вроде у него свой собственный есть.

---------- Post added at 17:38 ---------- Previous post was at 17:36 ----------


Одно время в ZXTune была поддержка реального чипа через LPT. Поскольку подначивший меня на это товарищ так и не удосужился проверить работоспособность, поддержка почила в бозе.

Ну соберу - готов потестить. Запилить обратно сложно будет?

psb
19.11.2013, 18:20
Так же не совсем понятно, нужен ли сабжу кварцевый генератор.
нужен обязательно, своего нет.

Vitamin
19.11.2013, 18:28
Ну соберу - готов потестить. Запилить обратно сложно будет?
Не должно. Мне главное- гарантии неповторения истории:)
http://zx-pk.ru/showthread.php?t=12109

Tronix
19.11.2013, 22:51
Ок, тогда подождем приезда микросхем, а судя по предыдущей практике едут они около двух месяцев, соответственно будут где-то в конце января.

У меня вот еще какой вопрос - не могу я кварц на 1.75Mhz найти. Как гуглить правильно его, не подскажите?

palsw
20.11.2013, 00:59
Tronix, кренку лучше оставить - она делает аналоговое питание ,по идее можно использовать 12в с любого разьема через дросель и сопротивление+ радиатор на кренку.Если напрямую взять +5в будет ОЧЕНЬ много цифровых шумов.

схемы аналогового питания можно подсмотреть в схеме zxm-soundcard http://www.micklab.narod.ru/ZXMSoundCard.htm

BYTEMAN
20.11.2013, 03:00
к усб тоже были попытки цеплять, только вот софта нет.
угу, мы цепляли, и оно даже норм играло.

Djoni
20.11.2013, 06:45
Я собирал такую штуку работала у меня на PENTIUM 166MMX под DOSом и win98, PC чуть чуть не вытягивала эмулятор RealSpectrum с АУ в режим AY-LPT всё работало отлично :)


А так AY-LPT поддерживают Z80Stealth,RealSpectrum,R80 v0.30.


http://s2.ipicture.ru/uploads/20131120/thumbs/7R86H7D3.jpg (http://s2.ipicture.ru/Gallery/Viewfull/33958960.html)
http://s2.ipicture.ru/uploads/20131120/thumbs/7eSzyU1T.jpg (http://s2.ipicture.ru/Gallery/Viewfull/33958968.html)

Tronix
20.11.2013, 09:43
Tronix, кренку лучше оставить - она делает аналоговое питание ,по идее можно использовать 12в с любого разьема через дросель и сопротивление+ радиатор на кренку.Если напрямую взять +5в будет ОЧЕНЬ много цифровых шумов.

Да ну чему там шуметь-то? Сабж - это же конроллер тащемта, цифровой надо заметить. Выход да - аналоговый, но выход я не буду усиливать никак, этим уже займется усилок на колонках/телеке/etc.. А так - либо YM заработает, либо нет. Третьего состояния имхо быть не может. Ну поставлю для спокойствия электролит между +5V и землей, да и все, как мне кажется. Вон, у Djoni я на фотках никакого такого изврата тоже не вижу, и все работало.

psb
20.11.2013, 13:00
угу, мы цепляли, и оно даже норм играло.
вот если бы оно еще дигитал играло - вот это было бы круто...

Lion17
20.11.2013, 17:32
вот если бы оно еще дигитал играло - вот это было бы круто...

Для дигитала необходимо что-то типа микроконтроллера с буфером, ты туда запихиваешь вывод в порты AY за прошедший кадр вместе с отметками времени, а оно потом в нужные моменты выплевывает это в AY.

psb
20.11.2013, 19:51
Для дигитала необходимо что-то типа микроконтроллера с буфером, ты туда запихиваешь вывод в порты AY за прошедший кадр вместе с отметками времени, а оно потом в нужные моменты выплевывает это в AY.
именно так. сейчас такой контроллер - не проблема, нужна лишь железка и немного времени на это...

Tronix
15.12.2013, 12:01
Приехали. Видно, что немного БУ, но надеюсь что хотя-бы одна из двух окажется рабочей. На неделе поеду за кварцем, панелькой и макеткой, попробуем завести на LPT для начала, а уж потом буду с Дуэтом ковыряться...

Tronix
23.12.2013, 19:02
Господа, чето я запутался нафиг не успев начать. Вот схема:
http://habrastorage.org/storage3/ecd/000/576/ecd00057685cc80a05e44f034618aa16.png

Вот картинка этого девайса:
http://habrastorage.org/storage3/bd6/825/cb7/bd6825cb751b1b66f08b4fd6b4bf0af6.jpg

Получается, что на картинке микросхема вставлена в панельку неправильно (перевернута)? Ибо ближние к LTP должны быть дата сигналы, это судя по схеме 21-40. А на картинке получается микросхема повернута к LTP пинами 1-20. Или как? Паяльник разогрет а тут затупил вдруг. :v2_dizzy_vodka4:

tnt23
23.12.2013, 19:54
С обратной стороны плату можно глянуть? :)

По виду так все правильно - вон керамика стоит у 40 ноги, транзистор у 23.

Tronix
23.12.2013, 20:10
С обратной нету фото. Если смареть на фото, то транзистор стоит как раз не у 23, а у 17-18 ног. И я не пойму, толи я ваще туплю, толи на фото неправильно микросхема просто кверх-ногами вставлена. Толи ноги у нее нумеруются не по человечески.

Да бог с ним с фото, вот если я на YM2149 смотрю сверху, точка у меня допустим тоже сверху, то распиновка соответствует той что на схеме?

vlad
23.12.2013, 20:33
Tronix, какая разница что там на фото, если у Вас есть макетка или плата? Предположим что фото правильное. Проверьте визуально по дорожкам, если печатки нет, то делайте макетку по схеме...

Tronix
23.12.2013, 20:45
Ну смутило меня это фото просто, не хотелось бы дефицитную микросхему попалить. Делаю по схеме короче, ну его это фото.

solegstar
23.12.2013, 22:09
С обратной нету фото.

А чем Вам не нравится файл PCB.PDF из архива LPT-YM.7z (http://bulba.untergrund.net/LPT-YM.7z), ссылку (http://bulba.untergrund.net/elect.htm) на который давал Vlad еще в 5м сообщении?

Чип установлен правильно, если что, просто не все ноги задействованы у ямахи. ;) Кстати, есть же уже готовая печатка, бери да делай ЛУТом/фоторезистом...

Tronix
23.12.2013, 23:13
Ну где ж правильно? Нифига не правильно она на фотке стоит: Нумерация выводов приблизительно:
http://habrastorage.org/storage3/e8f/ff1/282/e8fff1282ec66d6abf94127680584a89.jpg

Верно же? А теперь смотрим с обратной стороны:
http://habrastorage.org/storage3/205/644/9eb/2056449eb341c99c8ba5cf7607eab06a.jpg

Ближе к LTP должны быть выводы 21-40, а на фото она стоит выводами 1-20 к LPT.

---------- Post added at 23:13 ---------- Previous post was at 22:36 ----------

Либо это фотка не этой разведенки.

pavel_1977
23.12.2013, 23:25
вот так

Tronix
23.12.2013, 23:28
Спасибо, во я затупок ваще.
На всякий случай ссылка на даташит http://www.ym2149.com/ym2149.pdf для себя чтоб не потерять.

Tronix
24.12.2013, 11:07
Выход думаю сделать по этой схеме:
http://habrastorage.org/storage3/bd4/9e8/01c/bd49e801c313568136e0d1d0cb989753.jpg
Она мне как то больше нравится в плане микшера. Или нет? Какие мысли?

---------- Post added at 11:07 ---------- Previous post was at 10:34 ----------

И еще вот увидел такую схемку:
http://habrastorage.org/storage3/287/8cf/324/2878cf324ec4b2b023ba487937b1e184.jpg

Тут интересен светодиод. Как я понимаю, он должен моргать когда идет запись в регистры YM. Думаю тоже прикрутить для красоты :)

Tronix
24.12.2013, 18:40
Ну че, работает вроде. Правда странно как-то. Ща кабель спаяю джек-джек, выложу демо.

Вопрос - чем отличаются кварц с нагрузочной емкостью от кварца без онной? Какой кварц применим в этой схеме? Ибо вот что заметил - при проигрывании иногда такие как бы щелчки, если пальцем держать корпус кварца - пропадают. Что это ? Или корпус у кварцев заземляют просто?

Tronix
24.12.2013, 19:47
Вот значит играет мелодия JINGLE.YM (она в архиве). Слушать здесь: http://rghost.ru/51181180 Слышны такие "попердывания". Если держать пальцем кварц - их нет. Что это ?

Tronix
24.12.2013, 22:12
Так, допаял джампер выбора делителя частоты. Включил деление на два. Поставил кондер 470мКф по питанию. Вроде нормально заиграло, вот эта вещь ваще тащит: http://rghost.ru/51185251 :v2_dizzy_punk:

marinovsoft
24.12.2013, 22:29
Вроде нормально заиграло
Звук все еще "дрожит".

Tronix
24.12.2013, 22:52
Звук все еще "дрожит".

Мне бы какой-нибудь "тестовый" .YM , не быстрый, по которому можно ориентироваться. А то я не очень понимаю, что не так. Насчет "дрожит" нет идей, кроме как менять кварц, хотя тоже сомнительно.
UPD: Если вы про самое начало - я там переключал на первых секундах частоту с 60 на 50hz
UPD2: Скомпилял AYPLAYER отсюда https://github.com/sisoftrg/ayplayer . Компилил опен ватком под дос. Нефига не играет :( Попробовать изменить работу с LTP?
UPD3: Подправил работу с портом, начал чето играть
UPD4: Играет оооочень тормознуто. Толи ip166 не тянет, то ли что то не так.
UPD5: Собрал Watcom C 11.0 - теперь играет нормально, но падает в page fault при воспроизведении VTX
UPD6: Короче чето-там с задержкой не так, поэтому нормально собирается только Watcom c 11.0 без апдейта. Еле нашел как размер стека установить в линкере, теперь не падает на VTX файлах. Приложу сюда на всякий случай EXE-шник.

Tronix
25.12.2013, 20:32
Немножко потестили с Vitamin его плеер в режиме LPT. Работает. Но я пока еще не осознал насчет звука. Есть странности. Пока записал несколько треков, которые на мой взгляд нормально звучат:

Dizzy Down the Rapids (https://soundcloud.com/tronix286/dizzy-down-the-rapids-allister)
Wild West Seymour (https://soundcloud.com/tronix286/wild-west-seymour-allister)
Music from BOOT 4 (https://soundcloud.com/tronix286/music-from-boot-4)


Записывал правда модифицированным AYPLAYER by sisoft, нужно потом сравнить со звуком плеера от Vitamin.
UPD: Сравнил с ZXTUNE by Vitamine- все то же самое, даже ZXTUNE лучше в плане синхронизации скорости. Вообще, .YM и .VTX файлы в подавляющем большинстве играются без проблем. А вот с остальными не все понятно. Например, вот так вот STACKER.STC играет: http://rghost.ru/51201628 Не пойму в чем дело, что за "пердеж".

Ramiros
26.12.2013, 08:35
Не пойму в чем дело, что за "пердеж".

Явно проблема с огибающей, ее регистр нельзя тупо переписывать каждое прерывание, это приводит к переинициализации пилы и отсюда пердеж. Проблема в плеере ИМХО.

Vitamin
26.12.2013, 09:42
Явно проблема с огибающей, ее регистр нельзя тупо переписывать каждое прерывание, это приводит к переинициализации пилы и отсюда пердеж. Проблема в плеере ИМХО.
А он и не переписывается каждое прерывание.

vlad
26.12.2013, 10:19
Tronix, глянь частоту на 22 ноге YM. Возможно она не стабильно 3.579МГц и плавает, и посмотри что на 26 ноге YM, должен быть включен делитель (нога на GND). Потом исключая по порядку: LPT (настройки в Setup), soft (настройки по LPT, если винда).

Tronix
26.12.2013, 10:56
Явно проблема с огибающей, ее регистр нельзя тупо переписывать каждое прерывание, это приводит к переинициализации пилы и отсюда пердеж. Проблема в плеере ИМХО.
Я кстати тоже размышлял на эту тему. В прилагаемых исходниках плеера YM на паскале вот так происходит вывод:

procedure AD(b:byte);
begin
Port[LPT+2]:=Port[LPT+2] and $FB or b shl 2;
end;

procedure OutYM2149(Address,Data:byte);
begin
AD(1);
D(Address);
AD(0);
D(Data);
end;

Может AD(0) как раз заодно дает сигнал RESET, я попозже посмотрю в бинарном виде что происходит и почему именно так написаны процедуры.


А он и не переписывается каждое прерывание.
То есть у вас сделано не так, как написано выше?


Tronix, глянь частоту на 22 ноге YM. Возможно она не стабильно 3.579МГц и плавает, и посмотри что на 26 ноге YM, должен быть включен делитель (нога на GND). Потом исключая по порядку: LPT (настройки в Setup), soft (настройки по LPT, если винда).
Увы, глянуть частоту мне нечем. Если что, это вообще моя первая собранная схема, поэтому сильно не пинайте. 26 нога через 2,2kOm на землю идет - это точно. LPT в режиме ECP в DOS и в виндовсе пробовал EPP и Bidirectional - без разницы.

Vitamin
26.12.2013, 11:20
Может AD(0) как раз заодно дает сигнал RESET, я попозже посмотрю в бинарном виде что происходит и почему именно так написаны процедуры.
Там используется вычитывание из порта. Я хз поддерживает ли аппаратура порта такие надругательства.


То есть у вас сделано не так, как написано выше?
"У тебя" :)
Сделано как обычно- каждый фрейм выводятся все регистры, кроме R13- он по требованию.

Попробуй еще раз- я убрал вычитывание из порта и добавил задержки после вывода в порт (на всякий случай). Архив тот же, который mingw32.

Tronix
26.12.2013, 11:44
Попробовал. Ситуация не изменилась, STACKER играется так же со скрипами и тд. VTX файлы (Dizzy) играет нормально, но если появляются тултипы или лазить по меню (например добавление файла) - появляются "затыки" в воспроизведении. Задержку после записи в порт имхо нужно убрать, это ж все-таки не 8086 -).

Vitamin
26.12.2013, 11:48
Попробовал. Ситуация не изменилась, STACKER играется так же со скрипами и тд. VTX файлы (Dizzy) играет нормально, но если появляются тултипы или лазить по меню (например добавление файла) - появляются "затыки" в воспроизведении. Задержку после записи в порт имхо нужно убрать, это ж все-таки не 8086 -).
А если stracker сконвертить в VTX и попробовать воспроизвести там, где вроде как нормально играет, что будет?

Имхо, задержка нужна как раз потому что не 8086:) Операции таки быстрее делаются.

Tronix
26.12.2013, 11:53
А если stracker сконвертить в VTX и попробовать воспроизвести там, где вроде как нормально играет, что будет? А как его сконвертить в VTX?

Vitamin
26.12.2013, 11:54
А как его сконвертить в VTX?
Ну через тот же ayemul можно.

Кстати, на сайте Бульбы есть две схемы подключения и они не совместимы. Совсем.

research
26.12.2013, 11:59
мне не нравится LM386 в схеме. Если втыкаетесь в активные колонки или наушники, выкиньте это божье недоразумение к чертям. Оно заводится. Для активных колонок поставьте приличный опер, хотя бы NE5532 или TL082. Я не говорю о более приличных, вроде OP275 и OPA2134.

Если в звуке похрустывание, попердывание - это 386-я на 146%.
Ну и всю схему бы в экранированный корпус, gainta g0473 может подойти.

Tronix
26.12.2013, 12:07
Я делал по схеме, которая на 1 и 3 странице данного треда. Вот я щаз сматрю в гугле про LPT, там так:
http://habrastorage.org/storage3/6ad/d43/35a/6add4335a27c0a421228feb11f2f8c85.png

Соответственно на схеме 17 вывод - это RESET, сигнал инвертированный. Наверное по этому стоит транзистор.
А вот 16 сигнал какой-то BC1 - не инвертированный. BC2 и BDIR всегда высокий уровень.

Не понятно, как они что-то читают из порта 37A, если туда ничего не отдается.

---------- Post added at 12:07 ---------- Previous post was at 12:05 ----------


мне не нравится LM386 в схеме. Если втыкаетесь в активные колонки или наушники, выкиньте это божье недоразумение к чертям. Оно заводится. Для активных колонок поставьте приличный опер, хотя бы NE5532 или TL082. Я не говорю о более приличных, вроде OP275 и OPA2134.

Если в звуке похрустывание, попердывание - это 386-я на 146%.
Ну и всю схему бы в экранированный корпус, gainta g0473 может подойти.

У меня в схеме нет никакого усилителя. Я выход сделал по схеме
http://habrastorage.org/storage3/bd4/9e8/01c/bd49e801c313568136e0d1d0cb989753.jpg

Vitamin
26.12.2013, 12:08
Соответственно на схеме 17 вывод - это RESET, сигнал инвертированный. Наверное по этому стоит транзистор.
А вот 16 сигнал какой-то BC1 - не инвертированный. BC2 и BDIR всегда высокий уровень.
Ага. Для сброса туда подается 0 на какое-то время (минимум 5мкс по даташиту). Во всех прочих записях там 1.


Не понятно, как они что-то читают из порта 37A, если туда ничего не отдается.
Возможно, контроллер хранит состяние и позволяет его читать. Но это под вопросом (да и бессмысленно).

Tronix
26.12.2013, 12:44
А че за BC1, BC2 и BDIR?
И еще, если я запишу в порт 37A значение 0x04h (00000100) я должен наблюдать на 23 ноге (RESET) низкий уровень, так?

---------- Post added at 12:44 ---------- Previous post was at 12:19 ----------

А, все, посмотрел даташит, соответственно:
http://habrastorage.org/storage3/0e8/a36/abf/0e8a36abf17b597750c1ec9ffb086db9.png

Ну правильно значит они рулят выводом

procedure AD(b:byte);
begin
Port[LPT+2]:=Port[LPT+2] and $FB or b shl 2;
end;

Эта процедура меняет второй бит (1 или 0). То есть засылает в порт либо 11111011 либо 11111111 . Второй бит - это 16 пин LPT или сигнал BC1 ямахи.


procedure OutYM2149(Address,Data:byte);
begin
AD(1);
D(Address);
AD(0);
D(Data);
end;

Ну и понятно - сначала выбирают что будет записываться адрес, пишут адрес, потом что будет дата и пишут дату. Все верно вроде.
Так же и с ресетом тоже понятно - сначала пишут 11111111, затем 11110111, затем 11111111.
Сигнал RESET больше нигде не трогается в процесе проигрывания YM.

Ramiros
26.12.2013, 13:15
Есть одна идея почему такое происходит, Для корректной работы микросхемы надо сигналы BC1 и BDIR переводить в 0, т.е. в режим inactive, иначе YM2149/AY8910 находится в режиме записи данных и возможно (если последняя запись была в R13) держит в режиме сброса счетчик огибающей.

Решение - по оканчании записи всего фрейма перевести AY в режим записи адреса и записать туда 0-й адрес.

Tronix
26.12.2013, 13:19
Есть одна идея почему такое происходит, Для корректной работы микросхемы надо сигналы BC1 и BDIR переводить в 0, т.е. в режим inactive, иначе YM2149/AY8910 находится в режиме записи данных и возможно (если последняя запись была в R13) держит в режиме сброса счетчик огибающей.

Переводить когда? Или постоянно?
BC1 и так рулится програмно. Возможно имелось ввиду BC2?

psb
26.12.2013, 13:20
держит в режиме сброса счетчик огибающей
как это так? так не бывает.

vlad
26.12.2013, 13:28
Tronix, попробуй подтянуть сигналы LPT к шине питания с помощью резюков 10К. Я вот к чему [1 (http://electronix.ru/forum/lofiversion/index.php/t60610.html)]

Vitamin
26.12.2013, 13:37
Решение - по оканчании записи всего фрейма перевести AY в режим записи адреса и записать туда 0-й адрес.
Или записывать регистры в обратном порядке.

Tronix, как там прогресс с тестом stracker.vtx ?

Tronix
26.12.2013, 13:41
Решение - по оканчании записи всего фрейма перевести AY в режим записи адреса и записать туда 0-й адрес.
Попробовал, после каждого фрейма сделал AD(1); D(0); Вроде звучание поменялось в лучшую сторону, пердеж немного остался, но хотябы теперь он вроде играет по нотам :) Вот так STACKER.STC: http://rghost.ru/51216668

Ramiros
26.12.2013, 13:41
Переводить когда? Или постоянно?
BC1 и так рулится програмно. Возможно имелось ввиду BC2?

В конце каждого фрейма (когда все данные отправлены)

Tronix
26.12.2013, 13:42
Или записывать регистры в обратном порядке.

Tronix, как там прогресс с тестом stracker.vtx ?

Пока не получилось сконвертировать. Разбираюсь. Или если есть настроенный софт, выложи плиз сюда VTX.

Ramiros
26.12.2013, 13:46
как это так? так не бывает.

Бывает. Запиcь R13 перезапускает огибающую, и пока идет запись счетчик стоит.

Vitamin
26.12.2013, 13:46
Пока не получилось сконвертировать. Разбираюсь. Или если есть настроенный софт, выложи плиз сюда VTX.

Лови.

solegstar
26.12.2013, 14:02
Tronix, во всех схемах подключения AYшек к спектруму 24 вывод подключен к GND, 25 к +5В. у Вас я так понял, что нет?

UPD! Во второй схеме на PIC`e, кстати, тоже они подключены, как надо.

---------- Post added at 12:02 ---------- Previous post was at 11:51 ----------

И еще, если есть осциллограф, можете выложить картинку с осциллограммой на 22 выводе ямашки, там что, некоторое подобие синусоиды??? Должен быть четкий меандр. это я к тому, что на выходе генератора стоит конденсатор, зачем?

solegstar
26.12.2013, 14:08
схема генератора странная, есть же стандартные на кварце и резисторе. вот такая:

44764

solegstar
26.12.2013, 14:13
на той же HC02 можно собрать. можно для надежности пропустить еще через один свободный элемент HC02, чтоб прямоугольные импульсы были более четкие.

Tronix
26.12.2013, 14:14
Лови.

Значит на zxtune играет так же, как и STC версия. В районе ~50 сек скрипы и шипения. В правленом AYPLAYER, где я после каждого фрейма поставил выбор адреса и запись 0, играет так же, как я выкладывал несколькими постами выше - более менее нормально. Но там и STC версия так же играет.


Tronix, во всех схемах подключения AYшек к спектруму 24 вывод подключен к GND, 25 к +5В. у Вас я так понял, что нет?

UPD! Во второй схеме на PIC`e, кстати, тоже они подключены, как надо.

---------- Post added at 12:02 ---------- Previous post was at 11:51 ----------

И еще, если есть осциллограф, можете выложить картинку с осциллограммой на 22 выводе ямашки, там что, некоторое подобие синусоиды??? Должен быть четкий меандр. это я к тому, что на выходе генератора стоит конденсатор, зачем?

Да, 24 и 25 торчат в воздухе. В принципе померял - на них 0 и 1 соответственно. Могу и подтянуть конечно, но не думаю что в этом суть. Осцилогрофа нет, я начинающий. Зачем кондер - хз, попробовать без него?

psb
26.12.2013, 14:25
Бывает. Запиcь R13 перезапускает огибающую, и пока идет запись счетчик стоит.
там запись не по фронту??

Ramiros
26.12.2013, 14:43
там запись не по фронту??

Запись идет покуда BDIR=1, а куда конкретно определяет уже адрес.

т.к. в данном случае BDIR всегде =1 то запись идет всегда, в какой либо регистр.

вообще по уму, BDIR тоже на до управлять, иначе всеравно где то будет кака.

Tronix
26.12.2013, 14:48
Запись идет покуда BDIR=1, а куда конкретно определяет уже адрес.

т.к. в данном случае BDIR всегде =1 то запись идет всегда, в какой либо регистр.

вообще по уму, BDIR тоже на до управлять, иначе всеравно где то будет кака.


Могу ее повесить на 14 пин LPT, например. Только как ей управлять - в каких случаях что в нее писать?
Вообще, после того как добавил сброс адреса после каждого фрейма - практически нормально все трекерные заиграли. Нет отвращения по крайней мере :)

solegstar
26.12.2013, 15:07
Зачем кондер - хз
тут скорее всего просто такая схема генератора, без резистора.

попробовать без него?
без него скорее всего не заведется кварц. пусть уже будет. По уму надо конечно собрать схему генератора, как я выше писал.

Tronix
26.12.2013, 15:23
Вообще, респект конечно Ramiros за идею:

Решение - по оканчании записи всего фрейма перевести AY в режим записи адреса и записать туда 0-й адрес.

Проигрывание до этого: https://soundcloud.com/tronix286/illusion-psq-bad-noise

Проигрывание после этого фикса: https://soundcloud.com/tronix286/illusion-psg-normal

Почувствуйте разницу, как говорится :)

solegstar
26.12.2013, 15:50
Могу ее повесить на 14 пин LPT, например. Только как ей управлять - в каких случаях что в нее писать?

когда идет любая запись в АУшку, BDIR надо переводить в 1. Т.е. когда байт на шине данных стабилен и идет выбор адреса и когда идет запись в регистры.

Vitamin
26.12.2013, 16:05
Tronix, пробуй еще версию:)

Tronix
26.12.2013, 16:28
Tronix, пробуй еще версию:)

Попробовал. Мне кажется, не очень изменилось качество. Во всяком случае AYPLAYER получше играет STACKER вроде.

PS: Задержку надо убрать я думаю совсем после вывода в порт. И вообще, если есть возможность циклу который крутит трек дать высокий приоритет. А то вроде как-будто щелчки какие-то, видимо между фреймами.

ILLUSION.PSG : http://rghost.ru/51219749
STACKER.STC: http://rghost.ru/51219767

research
26.12.2013, 16:30
а это, тест под виндой, или досик в незащищенном режиме?

Tronix
26.12.2013, 16:34
а это, тест под виндой, или досик в незащищенном режиме?
Вот выше записи - это под виндой WinXP с ZXTUNE, а те, что на souncloud - это допиленный протект мод дос4gw AYPLAYER by sisoft

Vitamin
26.12.2013, 16:41
PS: Задержку надо убрать я думаю совсем после вывода в порт.
Убрал
56ac76fa9288f1e101d1010c4fa31c97 *zxtune-qt.exe


И вообще, если есть возможность циклу который крутит трек дать высокий приоритет.
Всему процессу ставь высокий приоритет в менеджере процессов.

Ramiros
26.12.2013, 16:52
Vitamin, можеш прикрутить поддержку виртуального/реального COM порта ?
Идея в следующем - слать в COM порт пакеты по 14 байт + 2 байта "терминатор" ($80$7F),
первые 13 байт - значения регистров, 14-й байт значение огибающей (если менялся, то реальное значение, если неменялся то 255)
Устройство у меня такое собрано и нормально играет под виндой.

Vitamin
26.12.2013, 17:02
Vitamin, можеш прикрутить поддержку виртуального/реального COM порта ?
Я уже давно с ним не работал, а проверить не на чем. С LPT я тупо через дллку работаю.

Tronix
26.12.2013, 19:00
Убрал
56ac76fa9288f1e101d1010c4fa31c97 *zxtune-qt.exe


Всему процессу ставь высокий приоритет в менеджере процессов.


Потестил, но увы - STACKER играется ровно так же, то есть проблема с огибающей видимо осталась. Фикшеный AYPLAYER ее играет гораздо четче (я уже давал ссылку).
AYPLAYER : https://soundcloud.com/tronix286/illusion-psg-normal
ZXTUNE: http://rghost.ru/51219767

---------- Post added at 19:00 ---------- Previous post was at 17:44 ----------

Смотрю вот схему http://ru.scribd.com/doc/103838815/LPT-AY-by-Vitaly-Mayatskih и вижу, что BDIR подключен к 1 пину LPT (Strobe). Но дальше авторы нигде его не контролируют. Или Strobe такой умный, что его сам контроллер выставляет? Не определюсь - BDIR на Strobe вешать или на 14 пин.

psb
26.12.2013, 19:50
вот еще вариант подключенного AY (а точнее tsfm) через усб: http://dlcorp.nedopc.com/viewtopic.php?f=21&t=732&start=0

Tronix
26.12.2013, 21:40
Подключил к Strobe 1 пин LPT. И ничего не понимаю. Пишу в порт 37A значение 0xF6 (11110110) Должно быть на стробе высокий уровень (нулевой бит, сигнал инвертирован), а на 16 пине - низкий. У меня наоборот, на первом - низкий, на 16 - высокий . Что за?

---------- Post added at 20:58 ---------- Previous post was at 20:37 ----------

Хм, почему то первый пин LPT оказывается контролируется первым битом, а не нулевым. Заиграл так:

void AD(unsigned char b)
{
outp(0xF9 | b << 2,LPT_PORT+2);
}

void R(unsigned char b)
{
outp(0xF5 | b << 3, LPT_PORT+2);
}

void ResetYM2149()
{
R(1);
R(0);
R(1);
}

void sreg(char reg, unsigned char dat)
{
AD(1);
D(reg);
AD(0);
D(dat);
}

Но щаз получается, что на BDIR у меня всегда высокий уровень. То есть по-сути как и было раньше. Когда его делать низким? После того как все записал, и адрес и данные?

---------- Post added at 21:40 ---------- Previous post was at 20:58 ----------

Ага, кажется понял. Сделал так:

void AD(_UC b,_UC c)
{
outb((0xF9 | b << 2) | c << 1,LPT_PORT+2); //FB
}

void R(_UC b)
{
outb(0xF5 | b << 3,LPT_PORT+2); //F7
}

void ResetYM2149()
{
R(1);
R(0);
R(1);
}

void sreg(char reg,_UC dat)
{
#ifdef LPT_PORT
AD(1,0); // BC1=1, BDIR=1
D(reg);
AD(0,0); //BC1=0, BDIR=1
D(dat);
AD(0,1); //BC1=0, BDIR=0

Выкинул после фрейма запись

/* AD(1);
D(0);*/


Результат - играет так же, как и вариант с записью после фрейма. Видимо, это максимальное качество :)

Ramiros
26.12.2013, 21:40
Правильно было бы при BC1=BDIR=0 выставить данные на шину данных, после чего выставить одновременно BC1 и BDIR в соответсвии с тем что пишем (адрес/данные), после чего сного выставить BC1=BDIR=0 и только после этого снимать данные с шины данных.

Tronix
26.12.2013, 21:44
Всмысле так?
AD(0,1); //BC1=0, BDIR=0
D(reg);
AD(1,0); // BC1=1, BDIR=1
D(reg);

AD(0,1); //BC1=0, BDIR=0
D(dat);
AD(0,0); //BC1=0, BDIR=1
D(dat);
AD(0,1); //BC1=0, BDIR=0

Ramiros
26.12.2013, 21:58
Ну да :) вроде так

кстати в винде нереально заставить LPT работать в реалтайм режиме, если только написать драйвер в режиме ядра, только в DOS mode будет чистый звук.

Tronix
26.12.2013, 21:59
Ну я ковыряю AYPLAYER досовый. А дайте какой-нибудь "эталонный" музык, с огибающими и тд, хорошо знакомый вам. Попробую записать и сравнить.

Ramiros
26.12.2013, 22:09
например это:

Tronix
26.12.2013, 23:15
BALTIYSKIY-32 by DNK! (https://soundcloud.com/tronix286/baltiyskiy-32-compoz-by-dnk)

---------- Post added at 23:15 ---------- Previous post was at 22:22 ----------

А вообще мне нравится звучание :)

Ramiros
27.12.2013, 08:20
BALTIYSKIY-32 by DNK! (https://soundcloud.com/tronix286/baltiyskiy-32-compoz-by-dnk)

---------- Post added at 23:15 ---------- Previous post was at 22:22 ----------

А вообще мне нравится звучание :)

Помоему идеально, только темп немного замедлен, как будто на ~45Гц работает.

Vitamin
27.12.2013, 10:09
Какие-то переделки в железной части были сделаны?
Если надо допилить zxtune, то только сегодня, потом я уже не знаю когда смогу это сделать:)

Tronix
27.12.2013, 10:16
Какие-то переделки в железной части были сделаны?
Если надо допилить zxtune, то только сегодня, потом я уже не знаю когда смогу это сделать:)

Да, я подключил BDIR к первому пину LPT. Сигнал инвертированный, то есть когда в порт пишем 1 - на BDIR ноль и наоборот. На предыдущей странице треда сообщение №79 мое, я подробно расписал.

Vitamin
27.12.2013, 10:44
Да, я подключил BDIR к первому пину LPT. Сигнал инвертированный, то есть когда в порт пишем 1 - на BDIR ноль и наоборот. На предыдущей странице треда сообщение №79 мое, я подробно расписал.
00aab955c3b85d3a7cf5510d7e2caa7f *zxtune-qt.exe

Tronix
27.12.2013, 11:31
00aab955c3b85d3a7cf5510d7e2caa7f *zxtune-qt.exe

Все, заиграло, запело :biggrin: Записи с ZXTUNE:


STACKER.STC (https://soundcloud.com/tronix286/stacker-stc)
BALTIYSKIY-32 COMPOZ BY DNK! (https://soundcloud.com/tronix286/baltiyskiy-32-compoz-by-dnk-1)

Vitamin
27.12.2013, 11:33
Все, заиграло, запело Записи с ZXTUNE:
Какие-то шумы странные.
Получается, доработка критичная и как до этого работало- хз.

Как с паузой/возобновлением?

Tronix
27.12.2013, 11:47
Какие-то шумы странные.
Получается, доработка критичная и как до этого работало- хз.

Как с паузой/возобновлением?

Насчет шумов - а ты сделал, как посоветовал (http://zx-pk.ru/showpost.php?p=656293&postcount=80) Ramiros - то есть выставить BC1, BDIR = 0, после загнать на шину дату (чтоб она там уже была), потом выставить BC1 и BDIR как надо (в зависимости что пишем регистр или дату) и еще раз записать дату.

Доработка да, нужная, но у меня до нее неплохо работал вариант (http://zx-pk.ru/showpost.php?p=656179&postcount=50), посоветованный опять же Ramiros: после каждого фрейма перевести AY в режим записи адреса и записать туда 0-й адрес. А у тебя не работал :)

С паузой/воспроизведением все хорошо. Но не очень со стопом. Например у меня выбран модуль, он играет. Я жму "СТОП". Потом жму "ПЛЭЙ" и он начинает не с 0 секунды, а с секунды 1 или даже 2 играть. При этом если щелкать мышкой два раза на этом же модуле по плейлисту, то начинает играть с 0 секунды.

Vitamin
27.12.2013, 11:53
Насчет шумов - а ты сделал, как посоветовал Ramiros - то есть выставить BC1, BDIR = 0, после загнать на шину дату (чтоб она там уже была), потом выставить BC1 и BDIR как надо (в зависимости что пишем регистр или дату) и еще раз записать дату.
Ну вроде как у тебя в 79 посте описано в самом конце так и сделал:



void Reset()
{
Port->Control(CMD_RESET_STOP);
Port->Control(CMD_RESET_START);
Delay();
Port->Control(CMD_RESET_STOP);
}

void Write(uint_t reg, uint_t val)
{
Port->Control(CMD_SELECT_ADDR);
Port->Data(reg);
Port->Control(CMD_SELECT_DATA);
Port->Data(val);
Port->Control(CMD_WRITE_COMMIT);
}


Значения констант:


BOOST_STATIC_ASSERT(CMD_SELECT_ADDR == 0xfd);
BOOST_STATIC_ASSERT(CMD_SELECT_DATA == 0xf9);
BOOST_STATIC_ASSERT(CMD_WRITE_COMMIT == 0xfb);
BOOST_STATIC_ASSERT(CMD_RESET_START == 0xf5);
BOOST_STATIC_ASSERT(CMD_RESET_STOP == 0xfd);



С паузой/воспроизведением все хорошо. Но не очень со стопом. Например у меня выбран модуль, он играет. Я жму "СТОП". Потом жму "ПЛЭЙ" и он начинает не с 0 секунды, а с секунды 1 или даже 2 играть. При этом если щелкать мышкой два раза на этом же модуле по плейлисту, то начинает играть с 0 секунды.
Странно. А для обычного вывода (через карту) такое же поведение?

Tronix
27.12.2013, 12:02
Ну вроде как у тебя в 79 посте описано в самом конце так и сделал:



void Reset()
{
Port->Control(CMD_RESET_STOP);
Port->Control(CMD_RESET_START);
Delay();
Port->Control(CMD_RESET_STOP);
}

void Write(uint_t reg, uint_t val)
{
Port->Control(CMD_SELECT_ADDR);
Port->Data(reg);
Port->Control(CMD_SELECT_DATA);
Port->Data(val);
Port->Control(CMD_WRITE_COMMIT);
}


В том то и дело, что не совсем так. Это первоначальный вариант с которым у меня вообще заиграло. А потом я доработал немного,


AD(0,1); //BC1=0, BDIR=0
D(reg);
AD(1,0); // BC1=1, BDIR=1
D(reg);

AD(0,1); //BC1=0, BDIR=0
D(dat);
AD(0,0); //BC1=0, BDIR=1
D(dat);
AD(0,1); //BC1=0, BDIR=0

Видишь, сначала переводим YM в Inactive, потом посылаем на шину данных данные. Потом говорим YM что будем писать в него номер регистра и еще раз пишем на шину данных номер регистра. Так же и с данными.

Vitamin
27.12.2013, 12:05
Видишь, сначала переводим YM в Inactive, потом посылаем на шину данных данные. Потом говорим YM что будем писать в него номер регистра и еще раз пишем на шину данных номер регистра.
Т.е. по два раза все повторять?

Tronix
27.12.2013, 12:15
Т.е. по два раза все повторять?

Да. Подожди, чо-то я запутался в константах. Ща проверяю

---------- Post added at 12:11 ---------- Previous post was at 12:08 ----------



void Write(uint_t reg, uint_t val)
{
Port->Control(CMD_WRITE_COMMIT);
Port->Data(reg);
Port->Control(CMD_SELECT_ADDR);
Port->Data(reg);

Port->Control(CMD_WRITE_COMMIT);
Port->Data(val);
Port->Control(CMD_SELECT_DATA);
Port->Data(val);
Port->Control(CMD_WRITE_COMMIT);
}


Походу как то так

---------- Post added at 12:13 ---------- Previous post was at 12:11 ----------

Насчет поведения при стоп - воспроизведения чуть позже днем проверю, щаз нет возможности колонки включить.

---------- Post added at 12:15 ---------- Previous post was at 12:13 ----------

Давай такую версию попробуем?

Vitamin
27.12.2013, 12:19
Походу как то так
2ba54a91d6b793aff65e6a0b70071c14 *zxtune-qt.exe

Ramiros
27.12.2013, 12:19
D(reg) по два раза делать необязательно, хотя она дает задержку между сигналами на BDIR, BC1.

Есть еще один неочевидный момент, регистры тона двухбайтные, и обновляются за два этапа, т.е. за два обращения к LPT порту. Как извесно в винде интервалы через которые данные выпуливают в порт нестабильны, и если задержка между этими двумя передачами будет существенная, то будут искажения в генераторах тона. как с этим боротся я даже непредставляю.

Tronix
27.12.2013, 12:37
STACKER TEST #2 (https://soundcloud.com/tronix286/stacker-stc-test-2)
BALTIYSKI-32 TEST #2 (https://soundcloud.com/tronix286/baltyisky-32-test-2)


Имхо, стало лучше. Правда я слушаю в наушниках (затычки) прямо с ковокса, так как колонки не могу пока включить.

---------- Post added at 12:37 ---------- Previous post was at 12:37 ----------

С ковокса )))) С YM-LPT имелось ввиду конечно )

Vitamin
27.12.2013, 12:43
Имхо, стало лучше. Правда я слушаю в наушниках (затычки) прямо с ковокса, так как колонки не могу пока включить.
Ну, значит так и оставляю. Конечно, магия сплошная, но что поделать:)

Tronix
27.12.2013, 13:04
Еще немножко музыки с ZXTUNE by Vitamine:

Hi,GOdZ!..hmm... Nik-O/TL'99 (https://soundcloud.com/tronix286/hi-godz-hmm-nik-o-tl99)
Illusion.psg (https://soundcloud.com/tronix286/illusion-psg)
NOSTALGY/TUNE BY JOE/DR/AUT.96 (https://soundcloud.com/tronix286/nostalgy-tune-by-joe-dr-aut-96)


Мне кажется, вполне достойный саунд :) На этом наверное можно завершить. Я чуть позже выложу окончательную схему. Всех с наступающим :v2_dizzy_christmas:

Vitamin
27.12.2013, 13:20
Слушай, а в каком битрейте музыка записана-то? А то эти шумы очень напоминают искажения сжатия.

Tronix
27.12.2013, 13:32
Слушай, а в каком битрейте музыка записана-то? А то эти шумы очень напоминают искажения сжатия.
MP3 128. кстати да, в наушниках по другому играет. Да еще плюс ко всему наверно саундклод его пережимает в еще более низкий битрейт. Если успею сегодня, запишу в WAV 44

UPD:
Окончательный вариант схемы в архиве.

Tronix
27.12.2013, 22:06
Записал в WAV
STACKER : http://rghost.ru/51247588
BALTIYSKI-32: http://rghost.ru/51247620

newart
03.01.2014, 12:48
Tronix, посмотри на форму сигнала. У тебя какие то странные пики в одном канале.

https://dl.dropboxusercontent.com/u/6439155/lpt-shit.png

Tronix
03.01.2014, 23:28
Не исключено, что это перегруз идет на моем древнем cowon u2. Нечто подобное я наблюдал, когда пытался засейвить БИОС от компа Дуэт через этот плеер. В итоге пришлось писать через ноут, так как из-за примерно таких-же пиков ни одна прога не могла декодировать сигнал. Алсо возможно это последствия ADPCM кодирования (перескок при большой разнице дельт, не вписывающийся в текущую разрядность) Короче больше склоняюсь к глюкам записывающей аппаратуры.

Tronix
09.12.2014, 09:56
Хочу все-таки сделать USB. Вопрос к многоуважаемому Vitamin: можно будет добавить в твой плеер работу с USB устройством? Там все просто - есть либа (x32, x64), есть функции читать байт/писать байт и два бита читать/писать управляющие сигналы. Пойдут на BC и BDIR, соответственно. Мало чем будет отличаться от работы с LPT, я попробую как-нибудь сначала код тестануть на чужом плеере, или что найду в опен-сорсе, и если все ок - прям приведу куски кода для удобства.
Без поддержки плеера ZXTunes идея обречена на провал (

Замучился под системник лазить, он еще под столом стоит - не так просто включить-выключить LPT.

dennt
09.12.2014, 17:40
Tronix, будет на чем-нибудь таком? http://www.cypress.com/?id=193

Tronix
09.12.2014, 18:37
Tronix, будет на чем-нибудь таком? http://www.cypress.com/?id=193

Да не, все намного проще - хочу попробовать софтварный USB стек на PIC 16F819, ибо лежит он у меня давно без дела. Вот и попробую заюзать сюда.

Tronix
10.12.2014, 12:11
Использовать планирую библиотеку 16FUSB (http://code.google.com/p/16fusb/). Там даже стандартный пример есть - DirectIO - то, что надо практически - по USB рулит одним байтом (8 бит) на чтение-запись и еще двумя битами (control) на чтение-запись и еще плюс один статусный бит только на чтение, но он и не потребуется. Таким образом уже считай готовая прошивка для копеечного контроллера готова. Есть либа для работы по USB с этим DirectIO (x32, x64), есть пример на VisualC для Win. Бери и пользуй.

Пробовал вчера компильнуть для 16F819, сходу не взлетело, с памятью и банками надо разобраться. В крайнем случае если не получится для 819 адаптировать, куплю PIC16F628A, для которого собственно эта либа и написана. Тож копейки стоит.

Но больше всего меня пугает софт для хоста. Без поддержки ZXTunes - идея обречена на провал, ибо я точно такой крутой плеер не напишу. Вообще, думал для проверки взять какой-нибудь простейший опенсорсный AY плеер под венду, однако таковых что-то с ходу не нашлось :( Есть у меня вариант конечно портануть тот LPT-шный досовый для Watcom C, хотя бы просто для .AY файлов для теста - но работка та еще...

Главный вопрос, если я предоставлю всю инфу и примеры работы с библиотекой, сможет и захочет ли уважаемый Vitamin включить поддержку данного девайса в свой плеер? Если нет, то можно закапывать.

Eltaron
10.12.2014, 12:33
Главный вопрос, если я предоставлю всю инфу и примеры работы с библиотекой, сможет и захочет ли уважаемый Vitamin включить поддержку данного девайса в свой плеер? Если нет, то можно закапывать.
USB-AY в связке с мультиплатформенным zxtune - это же бомба. Подключил к Wi-Fi роутеру, прописал пару строк в crontab, и каждое утро просыпаешься под тру-чиптюн.
Лишь бы джиттер (USB всё же не LPT, это шина) жизнь не испортил.

Eagle
10.12.2014, 12:54
Хочу все-таки сделать USB.
Делать так уж сразу Turbo Sound. Честные шесть каналов с правильным подмешиванием шума — таким редкий эмулятор похвастаться может.

Vitamin
10.12.2014, 13:12
Главный вопрос, если я предоставлю всю инфу и примеры работы с библиотекой, сможет и захочет ли уважаемый Vitamin включить поддержку данного девайса в свой плеер? Если нет, то можно закапывать.
Да без проблем. Правда я ну вообще не представляю как работает протокол USB и как там с адресацией устройств, времянками и прочими тонкостями.

daniel
10.12.2014, 18:21
штука полезная получиться, этож можно будет на ноуте например использовать, или на работу таскать. LPT то у нас теперь только дома под столами живут :)

---------- Post added at 18:21 ---------- Previous post was at 18:20 ----------

Tronix, питание тоже от юсб будет?

Tronix
10.12.2014, 18:43
Tronix, питание тоже от юсб будет? Конечно. LPT то у меня уже от USB питается, значит хватает мОщи. PIC будет разогнан до 24MHz против 20MHz даташитных, потребление наверное увеличится, но я не думаю что намного. Должно потянуть короче.

Vitamin
10.12.2014, 18:58
Tronix, кстати о птичках. Если что, ты можешь написать свою версию dlportio библиотеки, работающую с USB, подложить ее ZXTune и проверять.

dlportio.dll/inpout32.dll/inpoutx64.dll:
__stdcall void DlPortWritePortUchar(unsigned short port, unsigned char val);

Порт данных- 0x378, контроля- 0x37a

D2- ~BDIR
D3- BC1
D4- ~RESET

Tronix
14.12.2014, 10:42
D2- ~BDIR
D3- BC1
D4- ~RESET

Это точно? А что тогда D1? Просто похоже, что D3 - это RESET, а D1 и D4 это BC и BDIR..
Начало проигрывания:

Value = 253 ; bc1 = 1 ; bdir = 1 ; res = 0 ; val = 3

Value = 245 ; bc1 = 0 ; bdir = 1 ; res = 0 ; val = 1

Value = 253 ; bc1 = 1 ; bdir = 1 ; res = 0 ; val = 3

bc1 - как будто RESET был....

CHRV
14.12.2014, 11:29
TSFM по USB
Разработка наверно года 2008, так как интереса ни у кого не вызвала , отправилась в ящик.
МОгу кому нить из москвичей отдать с исходниками и сорцами всех софтов (если найду).
Определялось как HID (драйвера не требует), работа шла через файловый стрим.

Tronix
14.12.2014, 11:39
TSFM по USB
Разработка наверно года 2008, так как интереса ни у кого не вызвала , отправилась в ящик.
МОгу кому нить из москвичей отдать с исходниками и сорцами всех софтов (если найду).
Определялось как HID (драйвера не требует), работа шла через файловый стрим.

Что за контроллер? AVRка? Почему так много микросхем на первой плате? Ну, наверное генератор на 74HC04, контроллер и еще что?

Я вообщем-то подключил тоже, но пока - не работает. То ли в скорость USB 1.1 уперся то ли что-то где-то не так.

CHRV
14.12.2014, 11:45
Что за контроллер? AVRка? Почему так много микросхем на первой плате? Ну, наверное генератор на 74HC04, контроллер и еще что?
Какойто PIC.
Там еще РС232 сделан, для отладки - не используется (так что это просто излишки).

Кому нужно, заезжаем и забираем.
Щаз сорцы поищу, все уже работало много лет назад.

Tronix
14.12.2014, 12:02
Какойто PIC. PIC с аппаратным USB на борту? На сорцы я бы посмотрел... Если не затруднит, куда-нить можно выложить?

А у меня пока только шум какой-то левый - это максимум что добился.

CHRV
14.12.2014, 12:06
Выложил сорцы в сообщение с картинкой.

Tronix
14.12.2014, 12:51
Вощем как я и предполагал, D1 - это /BDIR, D2 - BC1 и D3 - /RESET. Звук пошел, но с такими тормозами, что ппц. Не успевает видать софтварный USB... Попробую еще поковыряться конечно, но видимо все-таки придется юзать контроллер с аппаратным USB.

Vitamin
14.12.2014, 13:09
Это точно? А что тогда D1? Просто похоже, что D3 - это RESET, а D1 и D4 это BC и BDIR..
Да, попутал немного. D1 - ~BDIR, D2 - BC1, D3 - ~RESET.

Tronix
14.12.2014, 13:29
Вот такой лол вышел:
https://soundcloud.com/tronix286/joke-of-jsbachby-surgeon

Tronix
16.12.2014, 09:43
Да, попутал немного. D1 - ~BDIR, D2 - BC1, D3 - ~RESET.

Напомни пожалуйста, ты когда вызываешь тот самый WriteUCHAR...() между ними (вызовами) задержки нет? Там вроде насколько помню что-то около 12 или 20 байт подряд пишутся, потом задержка, потом снова. То есть задержка только после 12 или сколько там байт?

Vitamin
16.12.2014, 09:46
Данные пишутся пакетами по 28 байт раз в 20мс (50гц частота)

Tronix
21.12.2014, 12:43
Итого, вместо 9 обращений по USB я ж могу слать только данные (2 обращения), а остальными ногами дергать в самом контроллере, в зависимости от того - первый это байт или второй:

bc1 = 1 ; bdir = 1 ; res = 1 ; Reset
bc1 = 1 ; bdir = 1 ; res = 0 ; Reset
bc1 = 1 ; bdir = 1 ; res = 1 ; Reset

bc1 = 0 ; bdir = 0 ; res = 1 ;YM inactive ;1 IO USB
Data = 12 ; данные ; 2 IO USB
bc1 = 1 ; bdir = 1 ; res = 1 ; писать адрес ;3 IO USB
Data = 12 ; данные ;4 IO USB
bc1 = 0 ; bdir = 0 ; res = 1 ; YM inactive ;5 IO USB
Data = 0 ; данные ;6 IO USB
bc1 = 0 ; bdir = 1 ; res = 1 ; писать данные ;7 IO USB
Data = 0 ; данные ; 8 IO USB
bc1 = 0 ; bdir = 0 ; res = 1 ; YM inactive ; 9 IO USB


bc1 = 0 ; bdir = 0 ; res = 1
Data = 11
bc1 = 1 ; bdir = 1 ; res = 1
Data = 11
bc1 = 0 ; bdir = 0 ; res = 1
Data = 0
bc1 = 0 ; bdir = 1 ; res = 1
Data = 0
bc1 = 0 ; bdir = 0 ; res = 1



То есть в обертке inpout.dll я должен контроллеру выдавать только данные (порт 0x378), причем пропускать каждый второй байт. В самом контроллере я должен использовать флаг, показывающий - первый байт пришел или второй. Если первый - то сам контроллер должен выставить bc1 = 1, bdir = 1. Если второй, то bc1 = 0, bdir1 = 1. И так по-кругу.

Вчера уже поздно вечером попробовал - что-то не взлетает. Какие-то шумы и хрипы. Не очень хорошо в даташите показаны тайминги цикла записи и цикла записи адреса. Пытался сделать так как и было раньше:

установил bc1=0, bdir=0 (YM inactive)
выдал байт данных на ноги D0-D7
если первый байт то bc1=1, bdir=1
иначе bc1=0, bdir = 1
подождал около ~1500 нс
установил bc1=0, bdir=0 (YM inactive)

Не работает (

---------- Post added at 12:43 ---------- Previous post was at 12:19 ----------

То есть процедура вывода байта в ПИКе такая:

DIO_WriteByte:

bcf PORTA,3 ; bc1 = 0
bcf PORTA,4 ; bdir = 0

movlw 0x10 ; delay 0.00005 sec (24MHz)
movwf TMP
wait2:
decfsz TMP
goto wait2

;Put value in RB3-RB7
movlw B'00000111'
andwf PORTB,W
movwf TMP
movlw B'11111000'
andwf RXDATA_BUFFER+4,W ;wIndex Lo
iorwf TMP,W
movwf PORTB

;Put the last bits values in RA0-RA2
movlw B'11111000'
andwf PORTA,W
movwf TMP
movlw B'00000111'
andwf RXDATA_BUFFER+4,W ;wIndex Lo
iorwf TMP,W
movwf PORTA

btfsc ODDEVEN,0 ; this is first byte in queque?
goto second_byte ; no, goto second byte

; yes - thi is firs byte
bsf ODDEVEN,0 ; set zero bit in ODDEVEN flag

bsf PORTA,3 ;bc1 = 1
bsf PORTA,4 ;bdir = 1

goto ctrl_done ; controll done

second_byte:
bcf ODDEVEN,0 ; clear zero bit in ODDEVEN flag
bcf PORTA,3 ; bc1 = 0
bsf PORTA,4 ; bdir = 1
ctrl_done:

movlw 0x10 ; delay 0.00005 sec (24MHz)
movwf TMP
wait:
decfsz TMP
goto wait

bcf PORTA,3 ; bc1 = 0
bcf PORTA,4 ; bdir = 0
return


В обертке inpout32.dll такое:

switch (port)
{
case 0x378:
if (skip_data == 0)
writeByte(Value);
skip_data = ~skip_data;
break;

Tronix
21.12.2014, 23:09
Оказываецо, некошерно менять значения в порту командами BCF/BSF. Есть где-то вроде аппноут от микрочипа, но здесь все детально и так написано: http://www.piclist.com/techref/readmodwrite.htm . Иногда помогает задержка из NOPов между BCF, но тоже быдлокод и так типа нехорошо делать.

Переписал вроде как правильно, через чтение - модификацию - запись. Например установка bc1=1 bdir=1 теперь происходит так:


;bsf PORTA,3 ;bc1 = 1
;bsf PORTA,4 ;bdir = 1
movlw B'11100111'
andwf PORTA,W
movwf TMP
movlw B'00011000'
iorwf TMP,W
movwf PORTA


Все равно, какие-то хрипы и вообще не то все.... Смотрю инет на эту тему - вроде просто все у всех, вот тут (http://www.avrfreaks.net/forum/interfacing-ay-3-8910ym2149-psg-sound-chip) чувак на AVR делает так:

void send_ay(int reg, int data){
PORTC = 0x00; //send 'inactive', logical 0 to BDIR/BC1
PORTD = reg; //put register number on data port
PORTC = 0x03; //send 1 to BDIR/BC1 to latch register address
PORTC = 0x00; //inactive
PORTD = data; //data to send to previously selected register
PORTC = 0x01; //send 1 to BDIR, 0 to BC1 to latch data to register
}

Ну и у меня так же, в принципе.... Чуствую какая-то мелкая ошибка где-то...

Мож сбрасывать YM надо все-таки, а то хз что у него там в памяти сидит... Прикручу сброс. Потом в пошаговом режиме еще потестю, тестором сигналы чтоб мерять.

Tronix
01.01.2015, 16:57
Ну ессно баг был в том, что я переменную в памяти PIC затирал потом в другом месте (не правильно описал). Поправил, заработало как и планировалось - по USB передаются только байты, а контроллер сам дергает BC1 и BDIR в зависимости от того - четный это байт или не четный. Все равно медленно, хотя с первым разом не сравнить:

https://soundcloud.com/tronix286/joke-of-jsbachby-surgeon-1

Щаз еще попробую оптимизировать код в пике, но это уже почти предел я думаю.. Но - "почти" -)

ALS
02.01.2015, 01:05
Как вариант - если применить внешнее тактирование (напр., от генератора типа тех, что стояли на старых материнках), то старые PIC-и работают и на гораздо более высоких частотах.
У меня , напр., PIC16F690 нормально переваривает 32MHz, потребление при этом - ок. 15мА, ессно, ничего не греется.

Tronix
02.01.2015, 11:09
Как вариант - если применить внешнее тактирование (напр., от генератора типа тех, что стояли на старых материнках), то старые PIC-и работают и на гораздо более высоких частотах.
У меня , напр., PIC16F690 нормально переваривает 32MHz, потребление при этом - ок. 15мА, ессно, ничего не греется.

Да, я думал и об этом тоже. Большая проблема в том, что если повысить частоту, то слетают все временные интервалы в софтовом USB стеке. Там часть подогнана с помощью высчитанных заранее машинных тактов, кое-где goto $+D'1', кое-где таймер с константой и тд. Повышаем частоту - PIC перестает распознаваться. Если гнать, нужно полностью вкурить как работает USB на низком уровне, а я чего-то очкую.

ALS
02.01.2015, 13:50
А, да, что-то я не подумал...

Tronix
02.01.2015, 14:29
Вообщем, оптимизировал как мог код записи байта в PIC:


DIO_WriteByte:

;Put value in RB3-RB7
movlw B'00000111'
andwf PORTB,W
movwf TMP
movlw B'11111000'
andwf RXDATA_BUFFER+4,W ;wIndex Lo
iorwf TMP,W
movwf PORTB

;Put the last bits values in RA0-RA2
movlw B'11111000'
andwf PORTA,W
movwf TMP
movlw B'00000111'
andwf RXDATA_BUFFER+4,W ;wIndex Lo
iorwf TMP,W
movwf PORTA

iorlw B'00011000' ;set bc1=1, bdir=1
btfsc ODDEVEN,0 ;skip next intruction if first byte
andlw B'11110111' ;set bc1=0, bdir=1 if second byte
movwf PORTA

andlw B'11100111' ; set bc1=0, bdir=0 (inactive)
movwf PORTA
movlw B'00000001' ; toggle ODDEVEN flag
xorwf ODDEVEN,F

return


Ну, играет вроде:
https://soundcloud.com/tronix286/hig0dzhmm-nik-0tl99

Но мне кажется, что медленно. Или это меня уже глючит, не знаю. Или реально медленно. Дальше еще можно попробовать буферизировать в самом ПИКе паттерн из 28 байт, одновременно принимая байты во второй буфер (двойная буферизация), но это как-то сложно, да и вряд-ли выгорит по времени выполнения. Если только еще сжимать предварительно LZW или что там быстрое. Но это уже больше костыли какие-то. Уперся уже совсем в предел, мне кажется.

Либо так, либо менять на ПИК с хардварным USB.:v2_dizzy_christmas:

---------- Post added at 14:29 ---------- Previous post was at 14:16 ----------

Ну вот выкинул еще одну команду

;Put the last bits values in RA0-RA2
movlw B'11111000'
andwf PORTA,W
movwf TMP
movlw B'00000111'
andwf RXDATA_BUFFER+4,W ;wIndex Lo
iorwf TMP,W
;movwf PORTA

iorlw B'00011000' ;set bc1=1, bdir=1

Так тоже работает. Но это все.

daniel
02.01.2015, 16:01
Но мне кажется, что медленно. Или это меня уже глючит, не знаю. Или реально медленно.
прпробуй две одинаковых мелодии на разных устройствах одновременно запустить и сравнишь.

Tronix
03.01.2015, 12:12
Короче прикрутил еще кольцевой буффер на 28 байт, теперь в декодере складываю туда байты, а иногда, в основном цикле, вывожу их на YM.. Это позволило в библиотеке USB-lib откатится назад на время ожидания в тиках 1000. Раньше стояло 5 и работало только на моей машине, на нетбуке - уже глючило. Щаз полет и там и там нормальный.

Скорость воспроизведения - такая же как и в прошлый раз, имхо. Ну, все, больше я не знаю что делать. Оставляю как есть.

Tronix
03.01.2015, 23:51
На всякий случай выкладываю схему устройства, исходники прошивки, исходники DLL-заглушки для ZX Tune.

Плюс уже скомпилированная прошивка для записи в микроконтроллер PIC16F628A и длл-ки для x86 и x64. Драйвера брать здесь: http://16fusb.googlecode.com/files/16FUSB_driver-libusb-win32-1.2.6.0.zip

Прошивка базируется на оригинале библиотеки 16FUSB (http://code.google.com/p/16fusb/), но многое подогнано "под себя":
- выкинуто все, что связано с чтением сигналов из PIC в хост (компьютер) для увеличения быстродействия обработки реквестов USB;
- состояние направлений портов ввода-вывода жёстко задано при инициализации МК и не изменяется в процедурах выдачи байта на ноги.
- организован кольцевой буфер на 28 байт. При декодировании запроса от хоста байты складываются в буффер. Когда есть свободное время, данные из буфера выдаются на YM.
- дичайше оптимизирована скорость выдачи байта на ноги МК. Частично за счет жестко указанных направлений ввода-вывода, частично из-за известности предыдущего состояния управляющих бит.
- что-то еще по мелочи.

По схеме - для тактирования 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.

Vitamin
04.01.2015, 01:09
Tronix, если ZXTune будет общаться с библиотекой в пакетном режиме (2 байта маски и 0..14/14 (по желанию) байт данных), тебе это поможет?

TSL
04.01.2015, 01:36
[04.01 00:35:42] <deathsoft> TSL, скинь в болото линк http://dlcorp.nedopc.com/viewtopic.php?f=21&t=732

Tronix
04.01.2015, 10:29
Tronix, если ZXTune будет общаться с библиотекой в пакетном режиме (2 байта маски и 0..14/14 (по желанию) байт данных), тебе это поможет?

Не совсем понял мысль? Сейчас и так я шлю только байты данных, без управляющих сигналов. Пропускаю каждый второй байт. Может просто попробовать убрать любые задержки при выводе..

Еще посетила безумная мысль - как только обработали принятый байт в ПИКе, все, выходим в начало суперцикла, не отвечая ничего хосту (компу). Ни NAK, ни ACK, просто ничего. По идее, функция usb_control_msg(..) должна тогда отвалится по таймауту. Таймаут можно минимальный поставить в 1 такт.

Vitamin
04.01.2015, 14:43
Не совсем понял мысль? Сейчас и так я шлю только байты данных, без управляющих сигналов. Пропускаю каждый второй байт. Может просто попробовать убрать любые задержки при выводе..
Ну вот чтоб тебе не приходилось делать эту логику по пропуску байтов и еще чего, твоя лично-персональная длл будет получать на входе сразу массив регистров (сжатый или несжатый, по желанию) и 16-битную маску с закодированными индексами регистров.

Tronix
05.01.2015, 23:40
К сожалению из говна и палок не получилось, хоть и очень хотелось... Прям почти чуть-чуть, но не совсем. Придется все-таки юзать либо контролер с хардварным юсб-стеком, либо фтди какой-нибуть, как нам советуют из болота. На ARM бы поднял за вечер, там и поднимать нечего, но хотелось чтоб люди смогли дома повторить, но не удалось, потому что арм всем хорош, кроме корпуса. Все равно благодарен всем тем, кто нечаянно следил за темой -)

Tronix
09.01.2015, 23:56
Тут провел небольшой тестик - в цикле писал 1000 байт и засек время выполнения: 1.085690 секунд. То есть скорость ~ 1000 байт/сек.....

Tronix
10.01.2015, 14:51
https://soundcloud.com/tronix286/joke-of-jsbachby-surgeon-final

Короче, пришлось таки вкурить немного манов на тему USB протокола, как я ни сопротивлялся -) Поснифал USB-трафик, разобрался. Хотел сначала в след за контрол-пакетом слать дата пакет 8 байт данных, а потом просто запилил в ubr-пакет OUT передачу сразу 3 байт, вместо 1, как было раньше. Тем самым скорость передачи сразу возросла в три раза. Короче, заработало как и хотелось :) Все-таки удалось из говна и палок. Ура!

Tronix
10.01.2015, 15:04
Tronix, так что, можно собирать? ;)

Да! Все работает стабильно. Еще пока тестю, попробую сейчас на всякий случай на WinXP на другом стареньком ноуте. Потом скоро постараюсь оформить в первом посте всю инфу, выложу все прошивки и исходники.

Tronix
10.01.2015, 15:45
Один нюанс меня смущает. В PIC16F628A есть встроенный RC генератор, он может работать без внешнего кварца/генератора.

Я не думаю. Нужна точная частота 24MHz.

Vitamin
10.01.2015, 17:34
Все-таки удалось из говна и палок. Ура!
Все равно какие-то призвуки есть. Это фиксится?

Tronix
10.01.2015, 17:36
Все равно какие-то призвуки есть. Это фиксится?

Не знаю, я в наушниках слушаю - нормально. Возможно как и раньше, плеер перегружает и так записывает.

Tronix
11.01.2015, 16:45
Тут вчерась все-таки сделал посылку дата-блоков по 8 байт, буфер на 64 байта - короче скорость получилась вообще быстрая, может даже потом нужно будет по таймеру синхронизировать, хотя как по мне - так норм:

https://soundcloud.com/tronix286/visual-remix-mystical-shadeby-ishma-18-jun-98-r-e-m-i-x

Но, обнаружилась другая достаточно неприятная проблема: через несколько тысяч фреймов ПЫК перестает реагировать на пакеты, перестает слать ACK хосту и как будто завис. Где, что зависает, как отдебажить - неведомо. Поэтому читал вчера вечером долго вслух сорцы. Пришел к выводу, что скорее всего зацикливается цикл приема бит в isr.asm:


#define USB_DPLUS PORTB,0
#define USB_DMINUS PORTB,1
#define USB_EOPCHK PORTB,2

RxLoop:
btfsc USB_DPLUS
bsf INDF,4
btfss USB_EOPCHK
goto Eop

btfsc USB_DPLUS
bsf INDF,5
btfss USB_EOPCHK
goto Eop

btfsc USB_DPLUS
bsf INDF,6
btfss USB_EOPCHK
goto Eop

btfsc USB_DPLUS
bsf INDF,7
incf FSR,F
clrf INDF

btfsc USB_DPLUS
bsf INDF,0
btfss USB_EOPCHK
goto Eop

btfsc USB_DPLUS
bsf INDF,1
btfss USB_EOPCHK
goto Eop

btfsc USB_DPLUS
bsf INDF,2
btfss USB_EOPCHK
goto Eop

btfsc USB_DPLUS
bsf INDF,3

goto RxLoop

Если смареть на оригинальную схему (у меня впрочем так же):

http://hsto.org/files/7e2/96d/010/7e296d010be446df92ccb7efcb1eb44a.PNG

То видно, что RB2 - это есть D- и D+. Так как в один момент времени не может быть оба сигнала (D- и D+) в одинаковом логическом состоянии, кроме случая, когда это конец пакета. Тогда D- и D+ оба в нуле.

Но видимо так иногда складываются биты, что конец пакета пропускается. И тогда цикл зацикливается навечно. После того, как ПЫК перестал отвечать, если коротнуть RB2 на земелюшку, то он чудным образом начинает снова отвечать на мои ответы.

В цикле конечно нельзя добавлять никаких новых команд, потому что он и так оптимизирован по тактам (4 команды на каждый бит), частота пыка 24МГц. Поэтому счетчик по переполнению не добавить. Думал насчет WDT, но чет вроде не нашел команд как его остановить и включить - похоже он всегда работает в данном пик, а это плохо. Я бы по входу в isr включил его, а по выходу из цикла выключил. Но полный резет девайса - это не круто, слетят все настройки USB и он по любому отвалится от шины. То есть это не решение.

Решение мне видится только с хардварной стороны - когда там (на RB2) получился ноль, подержать его чуть-чуть. Или я не знаю. Впаял кстати вместо R2 15Kом на вышеприведенной схеме 3 Ком - немного отлегло, но не до конца. Может два часа работать, а потом возьми да и зависни.

ALS
11.01.2015, 19:53
WDT включается на постоянку только в конфиге и во время работы его включить/отключить нельзя.
Но можно при входе в прерывание сбрасывать вачдог (clrwdt), а в начальную инициализацию добавить проверку бита POR в регистре PCON : если он установлен, значит был сброс по питанию (тогда уходим в инициализацию), если обнулен - значит был сброс по вачдогу (тогда уходим в основной цикл программы).

Tronix
11.01.2015, 21:11
А сейчас вообще мистику наблюдаю, поменял в посылке wValue с 0x01 на 0x10 и уже час полет нормальный, даже на тех модулях, что стабильно висли... Здорово и интересно, но непонятно. Ладно, работает - не будем трогать.

https://soundcloud.com/tronix286/hyperspace-composed-by-d-n-k
https://soundcloud.com/tronix286/composed-by-dnk-of-ggvg-ym2149f

Tronix
12.01.2015, 00:21
Не, все равно спустя полтора часа зациклился гад.

Но я тут фишку вспомнил времен DOS - цикл то ведь можно развернуть (unroll), тем более большая часть флешки под код свободна. Плюсы у данного решения:
а) вместо goto RxLoop в бывшем цикле, который занимал 2 такта можно вставить дополнительную проверку на окончание пакета (btfss USB_EOPCHK/goto Eop - то же 2 таката);
б) если окончание пакета все таки не поймается, то программа все равно не зациклится, а просто пойдет дальше на выполнение и разбор пакета. Даже данные не должны повредится.

Прошился - полет отличный. Считаю, что наконец поборол этот глюк, сперва показавшийся глобальным. Можно собирать. Новую версию прошивки и ДЛЛ-ек выложу на неделе в первый пост. Пока можно и со старыми собирать, в схеме ничего не поменялось.

Tronix
17.01.2015, 11:17
Выложил на первой страницы новую версию прошивки, DLL-заглушки для ZX Tune и исходники.


- Пофикшен глюк с зацикливанием PIC через несколько тысяч пакетов (развернут цикл RxLoop в файле isr.asm, вместо goto RxLoop вставлена проверка на признак конца пакета)
- Теперь данные передаются сразу по 16 байт, то есть два дата-пакета USB без UBR по 8 байт. Буфер в контроллере расширен до 64 байт.

Ovvnex
17.01.2015, 11:32
Захотелось повторить usb версию схемы. Но возникла проблема с нахождением кварцевого генератора на 24 Mhz. На одной из старых материнок удалось найти генератор на 25 Mhz. Отсюда вопрос - есть ли возможность пофиксать прошивку пика с учетом этого генератора. Или пик просто не заведётся на данной частоте?

Tronix
17.01.2015, 11:46
Захотелось повторить usb версию схемы. Но возникла проблема с нахождением кварцевого генератора на 24 Mhz. На одной из старых материнок удалось найти генератор на 25 Mhz. Отсюда вопрос - есть ли возможность пофиксать прошивку пика с учетом этого генератора. Или пик просто не заведётся на данной частоте?

Завестись то заведется, но все временные интервалы софтового USB стека слетят.. Больше 90% что скорее всего не определится просто. Пофиксить не знаю как, так как частота (25МГц) не кратна ничему. Только если уповать на оставшиеся 10% и все-таки попробовать завести на этой нестандартной частоте....

Другой вариант - если есть кварц на 24Мгц могу попробовать переделать прошивку для тактирования PIC от кварца напрямую, то есть кварц цепляется к ногам RA6, RA7. Все, что было на RB2 цепляется на RA5. RB2 контролирует RESET (вместо RA6). Но тестировать не на чем - нет у меня кварца на 24МГц.

Вариант с которым не надо ничего переделывать - просто собрать свой собственный генератор на чем то вроде 74HC04 и кварце 24MHz.

Ovvnex
17.01.2015, 11:53
Завестись то заведется, но все временные интервалы софтового USB стека слетят..
Этого и опасался. Значит в эту сторону и думать не буду.

Другой вариант - если есть кварц на 24Мгц могу попробовать переделать прошивку для тактирования PIC от кварца напрямую, то есть кварц цепляется к ногам RA6, RA7.
Дык вроде ж генератор и применялся, чтобы освободить одну ногу пика? Что в таком случае будет с функционалом девайса? Так-то кварцев на 24 Mhz нашёл валом на платах от роутеров и ADSL модемов.

просто собрать свой собственный генератор на чем то вроде 74HC04 и кварце 24MHz.
В эту сторону и планировал думать. Или таки искать генератор.

Tronix
17.01.2015, 12:04
Дык вроде ж генератор и применялся, чтобы освободить одну ногу пика? Что в таком случае будет с функционалом девайса?

Ну ведь делалось все "с наскоку", я на первых порах не разобрался, как USB работает вообще, какие ноги можно трогать - какие нет. Вот сейчас думаю, что RB2, которая служит для отлавливания конца пакета, можно вполне себе безболезненно перенести на RA5. Тогда RB2 начинает рулить /RESET вместо RA6. А RA6 высвобождается для кварца.

Тут еще подумал - ведь могу и протестировать, ну только не от кварца буду тактовать, а по прежнему от генератора. Зато все другие ноги перепаяю как выше сказано. А кварц или генератор используется - это просто задается в конфиге (фюзах, если в терминах AVR).

Ovvnex
17.01.2015, 12:18
Тут еще подумал - ведь могу и протестировать
Было бы очень гуд, т.к. уверен, что не только у меня может возникнуть проблема с поиском генератора. А девайс очень даже прикольный должен получиться - буду через него любимые мелодии из демок на работе слушать! =)

Эхх... вот если бы ещё версию схемки TurboSound (TurboSound/FM) реализовать, было бы вообще супер!

Tronix
17.01.2015, 13:16
Фокус не удался. RA5 делит функционал с MCLR и еще VPP для программирования, посему внутри организован вход как триггер шмитта. Ему просто не хватает напряжения для сработки, поэтому там всегда 0.

Ovvnex
17.01.2015, 13:29
Фокус не удался. RA5 делит функционал с MCLR и еще VPP для программирования, посему внутри организован вход как триггер шмитта. Ему просто не хватает напряжения для сработки, поэтому там всегда 0.

Обидно. Значит буду искать генератор. Или ваять генератор из кварца и микросхемы. Кстати, а насколько критично, если вместо HC серии применить LS (или вообще K555) как для генератора на 24 Mhz, так и для генератора на 3,57?

И это.. Нет ли в планах на будущее расширить функционал usb карты и реализовать проигрывание мелодий TurboSound?

Tronix
17.01.2015, 13:38
Обидно. Значит буду искать генератор. Или ваять генератор из кварца и микросхемы. Кстати, а насколько критично, если вместо HC серии применить LS (или вообще K555) как для генератора на 24 Mhz, так и для генератора на 3,57?

Для 3,5 наверное не критично. Для 24MHz - я вообще не уверен, что HC справится. Частота слишком большая... Лучше спросить у тех, кто занимался. А в идеале взять готовый генератор где-нибудь.



И это.. Нет ли в планах на будущее расширить функционал usb карты и реализовать проигрывание мелодий TurboSound?

Нет, нету совсем. Тут где-то в теме CHRV выкладывал сорцы, он тоже делал на PIC, только с аппаратным USB. Если ничего не путаю, именно для TurboSound. А я вообще не в курсе что это такое (TurboSound), где под него брать музыку, и с чем его едят.

Vitamin
17.01.2015, 13:44
А я вообще не в курсе что это такое (TurboSound), где под него брать музыку, и с чем его едят.
Это всего-навсего два АУка. Музыки под него достаточно много.

Tronix
17.01.2015, 14:44
В принципе, есть еще один вариант, как освободить ногу RA6 для кварца. Сигналы BC1 и BDIR принимают только такие значения:

BC1 BDIR
0 0
0 1
1 1

И никогда BC1 = 1, BDIR = 0. Это можно использовать как /RESET. Но толи я вчера лихо пятницу отметил, либо просто не выспался, но не могу на трех NOR (из 74hc02) составить лог функцию чтоб при входных 1, 0 давала 0 на выходе и при всех других комбинациях 1. Конечно можно еще простую логику повесить, но это +1 корпус. А так, если очень кому нужно - можно поправить прошивку, что бы при команде с компьютера сброс выдавала на BC1 единицу и на BDIR нуль, соответственно. Дальше логикой заводим на /RESET AY.

HardWareMan
17.01.2015, 19:11
BC1 1 (NOT) - (NOR) - (NOT) - 0 nRESET
BDIR 0 --------- /

Tronix
17.01.2015, 20:03
BC1 1 (NOT) - (NOR) - (NOT) - 0 nRESET
BDIR 0 --------- /

Чет меня переглючило с утра ваще, у 74HC02 уже занято два NOR, соответственно свободно только два. Поэтому еще один корпус в любом случае.

ALS
17.01.2015, 20:58
Tronix, а не хотите ли попробовать переделать схему под PIC16F690 ?
Поколение - то же, что и у 628.
На две ноги больше.
Доступен, цена даже меньше, тыц (http://trt.ru/Stock.php?Part=160).

Более "прозрачно" можно развести сигналы :
D0-D7 можно подключить на PORTC(0...7)
USB - PORTA(0-1), внешнее прерывание - PORTA,2

HardWareMan
17.01.2015, 21:04
Чет меня переглючило с утра ваще, у 74HC02 уже занято два NOR, соответственно свободно только два. Поэтому еще один корпус в любом случае.
Выходной NOT проще сделать на КТ315. :3

Tronix
17.01.2015, 21:30
Tronix, а не хотите ли попробовать переделать схему под PIC16F690 ?
Поколение - то же, что и у 628.
На две ноги больше.

Наверно не хочу, у меня все работает, зачем все перепаивать на другой контроллер? Тем более у меня нет 690, а это значит специально ехать покупать. Перепиливать прошивку.... Да не, как говорится работает - не трож, а то перестанет. Впрочем, все исходники выложены в первом сообщении, если кто-то хочет - пожалуйста, может попробовать завести и на другом PIC.


Выходной NOT проще сделать на КТ315. :3

Согласен. Итого, если кто-то желает делать с кварцем, а не с генератором, нужно чуть подправить прошивку, а так же в схему добавляется КТ315 и обвязка из пары сопротивлений к нему.

Ovvnex
19.01.2015, 00:27
Пробежался сегодня по всем радио-магазинам Курска, как результат - генератора ни у кого не нашлось. Потом ещё раз перебрал древние платы и таки нашёл кварцевый генератор на древней материнке на 286 проце!
Завтра приступлю к сборке девайса.
материнка (http://ovvnex.narod.ru/misc/board.jpg)
генератор (http://ovvnex.narod.ru/misc/osc.jpg)

Tronix
19.01.2015, 09:27
Мамку жалко :(

Ovvnex
19.01.2015, 10:09
Мамку жалко
Она, по отзывам прежнего владельца, всё равно была неживая. Он её хотел на стенку в гараже прибить, но я, увидев на ней аналоги РУ7, утащил материнку себе в закрома. А теперь вот и генератор пригодился.:)

BobrovS
04.02.2015, 11:58
Приветствую всех участников! Очень заинтересовал данный проект, задумался о возможности сборки (правда не своими силами, т.к. сам не электронщик). Возник следующий вопрос: реализована ли поддержка этого чудного устройства в сборке проигрывателя ZXTune для Android (или может быть планируется в обозримом будущем)?

Bear
19.04.2015, 10:18
Тоже решил повторить данный девайс. Только вот оказалось что YM2149(AY8910) у меня нет. Зато AY8912 целых три штуки. Знаю что была возможность менять один на другой, даже плату переходку делали. Если у кого остался чертеж перпеходки или хотя бы даташиты поделитесь пожалуйста

Bear
19.04.2015, 17:33
Надеюсь этого хватит

Спасибо. Буду пробовать

Vitamin
19.04.2015, 21:01
Возник следующий вопрос: реализована ли поддержка этого чудного устройства в сборке проигрывателя ZXTune для Android (или может быть планируется в обозримом будущем)?
Не реализована. В обозримом будущем не планируется.

pavel_1977
20.04.2015, 16:31
Тоже решил повторить данный девайс. Только вот оказалось что YM2149(AY8910) у меня нет. Зато AY8912 целых три штуки. Знаю что была возможность менять один на другой, даже плату переходку делали. Если у кого остался чертеж перпеходки или хотя бы даташиты поделитесь пожалуйста

скан переходника

zksystem
19.05.2017, 15:25
того, кто схему генератора без емкостей нарисовал нужно в угол поставить)

1N4148
02.03.2020, 10:53
того, кто схему генератора без емкостей нарисовал нужно в угол поставить)
А к чему эта реплика, коллега? Собрал схему, не заводится генератор на 74HC02. Перепроверял сто раз уже монтаж, микросхему менял, кварц менял - нет генерации. Какие емкости имеются в виду?

1N4148
09.03.2020, 14:45
нет генерации.
Сам себе отвечу. Генерации не было потому, что на схеме отсутствует соединение между 2-м и 3-м выводами 74HC02.

STAB
24.04.2020, 21:47
Приветствую всех! Собрал плату на AY-3-8910A с генератором на 74HC02, но что то при всей простоте схемы петь оно не хочет. Чипы менял, плату проверил 20 раз, не играет и все тут. К сожалению осцилографа нет, сигналы и генерацию не посмотреть. Если мультиметром смотреть, на выходе генератора 2.65 вольт. Порт LPT на компе рабочий и даже если вместо платы с AY подключить COVOX, то слышен поток данных идущий с порта ПК. Как бы еще проверить девайс этот, почему он не пашет?

nimdasys_inbox_ru
25.04.2020, 00:47
Приветствую всех! Собрал плату на AY-3-8910A с генератором на 74HC02, но что то при всей простоте схемы петь оно не хочет. Чипы менял, плату проверил 20 раз, не играет и все тут. К сожалению осцилографа нет, сигналы и генерацию не посмотреть. Если мультиметром смотреть, на выходе генератора 2.65 вольт. Порт LPT на компе рабочий и даже если вместо платы с AY подключить COVOX, то слышен поток данных идущий с порта ПК. Как бы еще проверить девайс этот, почему он не пашет?

А точно ли живой AY-3-8910A ?!

STAB
27.04.2020, 08:16
А точно ли живой AY-3-8910A ?!

От китайцев мне пришло их 5 штук, все разных выпусков, чип от GI. На трех з этих пяти проверял - все мочат. Надо, наверное на оставшихся двух проверить) Вообще они чуть чуть греются при подаче питания, понимаю что это не показатель... Бесит уже, схема простая, но не работает что то((

Tronix
27.04.2020, 11:35
STAB, Я около года назад подключал микросхему file или как-то так, это вроде клон AY-3-8910A, тоже не заработала. Работает только YM2149F. Почему не заработала - не смотрел, может быть на днях гляну еще раз внимательнее.

- - - Добавлено - - -

UPD: А, не, щаз вот вставил File KC89C72 в USB вариант махарайки с первой страницы - все нормально, за исключением того, что на нее приходят 3,579545 MHz, так как внутреннего делителя оно не имеет. Поэтому кроме того, что звук противный и тональности не те - все нормально.

- - - Добавлено - - -

Навесил вторым этажом делитель на два на 155ТМ2 и file KC89C72 заиграла нормально. Так же работает и YM2149F, главное не включать в ней встроенный делитель (не трогать 26 ногу /SEL).

https://i.ibb.co/HDGrWnn/P1130776.jpg (https://ibb.co/BVTgXqq)

STAB
28.04.2020, 12:36
В Вики написано что AY-3-8910-A полный аналог YM2149F (https://ru.wikipedia.org/wiki/AY-3-8910) поэтому я всю схему оставил как есть, те на микросхему идет 3.5 МГц, и 26 нога через 2.2К посажена на землю.

PS пока заказал у китайцев YM2149F ))

https://i.ibb.co/r7zNQrP/IMG-7935.jpg (https://ibb.co/r7zNQrP)

Tronix
28.04.2020, 12:57
26 нога через 2.2К посажена на землю.

В педивикии много чего написано.... Но читать лучше официальные источники, например даташит на ay-3-8910 (http://map.grauw.nl/resources/sound/generalinstrument_ay-3-8910.pdf) . Где написано, что 26 нога это TEST2, который "for General Instrument test purpose only and should be left open"

Serg6845
28.04.2020, 12:59
В Вики написано что AY-3-8910-A полный аналог YM2149F (https://ru.wikipedia.org/wiki/AY-3-8910)


прям так уж и полный...
цитата по ссылке выше:

"Назначение выводов микросхемы YM2149F соответствует AY-3-8910, за исключением вывода 26, который включает внутренний делитель входной частоты вдвое, если на него подан низкий уровень. Если этот вывод никуда не подключён, микросхема работает так же, как AY-3-8910. Помимо встроенного делителя входной частоты, YM2149 имеет отличие в разрядности ЦАП огибающей — 5 бит вместо 4 (с логарифмической шкалой)."

STAB
28.04.2020, 13:02
Не, я же говорю про AY-3-8910A - а про нее написано что она аналог полный "Microchip AY38910A выполнена в 40-выводном корпусе (DIP40). Полностью совместима с YAMAHA YM2149f. "

Отсюда и пляшу

Tronix
28.04.2020, 13:08
Не, я же говорю про AY-3-8910A

Ну возьмите даташит на нее (http://datasheet.datasheetarchive.com/originals/scans/Scans-061/DSA2IH0094116.pdf) . Смотрим на 26 ногу и видим - No Connect. Берем кусачки и выкусываем свое сопротивление между 26 ногой и землей.

Serg6845
28.04.2020, 13:11
Не, я же говорю про AY-3-8910A - а про нее написано что она аналог полный "Microchip AY38910A выполнена в 40-выводном корпусе (DIP40). Полностью совместима с YAMAHA YM2149f. "

Отсюда и пляшу

вика в очередной раз брешет. в даташите на микрочиповский AY38910A 26 нога - no connect.

STAB
28.04.2020, 13:27
Реально, вики врет, это жесть какая то. А я на веру принял данные с нее
Оставлю даташит на AY-3-8910-A и AY-3-8912-A здесь, https://www.datasheets360.com/pdf/5084152872736677790

Пошел искать ТМ-ку, частоту делить буду

STAB
25.05.2020, 23:18
Ставил делитель на ТМ2, собрал другой генератор (на ЛН1 и ИЕ10), пробовал приехавшие от китайцев YM2149F и все равно так и не заиграло( Схему проверил 100500 раз, с LPT данные идут. Даже уже ставил кнопку принудительного ресета AY, ничего не помогает)
Кстати, обнаружил интересное - у YM2149F между любыми двумя выходами из A B C сопротивление около 158 Ом, а у AY-3-8910-A бесконечное сопротивление.

Я уж не знаю, может мне так "повезло" и все чипы дохлые приехали?

nimdasys_inbox_ru
25.05.2020, 23:39
Я уж не знаю, может мне так "повезло" и все чипы дохлые приехали?

А Вы их на реальном ZX-Spectrum'е проверяли ?!

STAB
25.05.2020, 23:45
Не, не на чем проверить.. В том то и дело

nimdasys_inbox_ru
26.05.2020, 08:54
Не, не на чем проверить.. В том то и дело

У Вас их много ?!

STAB
26.05.2020, 09:29
5 штук 8910 и 5 YM2149F
И очень даже вероятно, что мне так повезло и все дохлые приехали, в отзывах такое встречается. Они продаются в лотах по 5 штук.

nimdasys_inbox_ru
26.05.2020, 10:23
5 штук 8910 и 5 YM2149F
И очень даже вероятно, что мне так повезло и все дохлые приехали, в отзывах такое встречается. Они продаются в лотах по 5 штук.

В принципе я могу проверить их... если Вас не страшат почтовые расходы!

STAB
26.05.2020, 12:33
Хорошее предложение, спасибо, возможно обращусь тогда. А пока, я еще немного поэксперементирую, ну уже просто интересно становится )

- - - Добавлено - - -

Решил проверить, не куски ли пластика мне прислали под видом YM2149F, уж больно они свежо выглядят. Распилил чип, ну кристалл на месте, похоже на настоящий чип)
https://i.ibb.co/QmPZnK4/IMG-8141.jpg (https://ibb.co/QmPZnK4)

nimdasys_inbox_ru
26.05.2020, 13:17
Решил проверить, не куски ли пластика мне прислали под видом YM2149F, уж больно они свежо выглядят. Распилил чип, ну кристалл на месте, похоже на настоящий чип)


Ну так ясно, что это будет чип (какой-то), но не обязательно правильный, по факту может быть всё что угодно... может и живое что-то, но скорее всего некондиция какая-то с изначальной легко удаляемой маркировкой типа краски...

marinovsoft
26.05.2020, 13:21
Кажется, я несколько лет назад пытался AY к LPT подключить, но там были какие-то проблемы, в итоге я плюнул на все это. А сопроцессоры были рабочие, да.

nimdasys_inbox_ru
26.05.2020, 13:29
Кажется, я несколько лет назад пытался AY к LPT подключить, но там были какие-то проблемы, в итоге я плюнул на все это. А сопроцессоры были рабочие, да.

Так, уважаемый товарищ Tronix успешно прикрутил!

marinovsoft
26.05.2020, 13:55
А потом перекрутил на USB, да плейер был обновлен.

Eltaron
26.05.2020, 15:12
Кстати, обнаружил интересное - у YM2149F между любыми двумя выходами из A B C сопротивление около 158 Ом, а у AY-3-8910-A бесконечное сопротивление.

Проверил, у меня ~250 Ом на YM, и тоже бесконечность на AY. Кто-то недавно на форуме писал, что YM в том числе тем и отличается, что там каналы не независимы.

Вообще, теоретически, можно убедиться в том, что это действительно AY, а не просто 40-ногая болванка, записывая в порты данные и читая их обратно. Все нужные сигналы на LPT есть, надо только программку написать. Если окажется, что на нужных ногах там действительно висит 16 регистров, то я очень удивлюсь, если это паленка или отбраковка. Не может же такое на двух разных покупках совпасть.

STAB
26.05.2020, 18:28
Сложновато, я не программист)

Кстати, вот микросхемы эти, на AY лазером выжжена маркировка, на YM краской написано (я пытался бензином оттереть, не смог).
https://i.ibb.co/sWCg6Sp/IMG-8146.jpg (https://ibb.co/sWCg6Sp)

Соберу собрал еще один плеер, уже на макетке, уже просто ради интереса, ну и конечно нифига не поет.
https://i.ibb.co/9T61Npp/IMG-8148.jpg (https://ibb.co/9T61Npp)

Serg6845
28.05.2020, 18:19
Сложновато, я не программист)

Кстати, вот микросхемы эти, на AY лазером выжжена маркировка, на YM краской написано (я пытался бензином оттереть, не смог).
https://i.ibb.co/sWCg6Sp/IMG-8146.jpg (https://ibb.co/sWCg6Sp)



вот кстати сколько помню - GI всегда были маркированы краской. в те времена не уверен что лазерную маркировку вобще делали.

STAB
29.05.2020, 09:43
вот кстати сколько помню - GI всегда были маркированы краской. в те времена не уверен что лазерную маркировку вобще делали.

Ну вот похоже поэтому нифига и не работает, прислали какого то хлама и самое главное, что теперь фиг докажешь что это хлам.

saymon
29.05.2020, 10:51
Вот к примеру маркировка краской нижний чип, и лазерная верхний.
https://pic.maxiol.com/thumbs2/1590737705.3247901813.img20200529103417.jpg (https://pic.maxiol.com/?v=1590737705.3247901813.img20200529103417.jpg&dp=2)

STAB
29.05.2020, 11:07
Вот к примеру маркировка краской нижний чип, и лазерная верхний.
https://pic.maxiol.com/thumbs2/1590737705.3247901813.img20200529103417.jpg (https://pic.maxiol.com/?v=1590737705.3247901813.img20200529103417.jpg&dp=2)

Маркировка с моей AY отличается, и литеры GI и остальное(

Serg6845
29.05.2020, 11:11
Вот к примеру маркировка краской нижний чип, и лазерная верхний.
https://pic.maxiol.com/thumbs2/1590737705.3247901813.img20200529103417.jpg (https://pic.maxiol.com/?v=1590737705.3247901813.img20200529103417.jpg&dp=2)

есть только одно НО - с 1989 года подразделение GI по микросхемам отделилось и стало называться Microchip. так что происхождение верхнего чипа вызывает некоторые сомнения.

saymon
29.05.2020, 11:54
Главное что он работает и играет так как нужно. А где его сделали это уже не столь важно. Ну и сравнить 2 лазерные гравировки

Eltaron
29.05.2020, 11:58
есть только одно НО - с 1989 года подразделение GI по микросхемам отделилось и стало называться Microchip. так что происхождение верхнего чипа вызывает некоторые сомнения.
На моем AY дата 0249 (49 неделя 2002?), а написано тоже GI.
Брал у chrv лет 15 назад, в те годы фейков ещё вроде не было.

Tronix
29.05.2020, 12:07
Брал у chrv лет 15 назад, в те годы фейков ещё вроде не было.
Они были начиная с 286 процессоров, а это явно более 15 лет назад.

^m00h^
14.10.2021, 23:09
Не обнаружил в этот треде ссылку на Хабр: https://habr.com/ru/post/248115/
P.S. Кстати а для Atari ST возможно такое собрать, или можно обойтись проигрыванием атаревских модулей на этом же устройстве в zxtune ?

goodboy
15.10.2021, 09:23
для Atari ST
если ты про sndh то это практически аналог формата AY - внутри код и данные
для прослушивания нужен эмуль атари (внутри AYemul от Бульбы он есть)

haywire
15.10.2021, 15:27
sndh можно сконвертировать в PSG, но у Атари ещё один музыкальный чип, кроме AY. Некоторые треки конвертируются даже красиво, некоторые - не очень.

duke_yusupov
22.01.2022, 09:45
В результате этой темы сначала подключил YM к LPT (схема здесь (http://zx-pk.ru/showpost.php?p=656456&postcount=102)), а затем захотелось подключить и к USB. В итоге получилось следующее:


Собрал по последней схеме (https://habr.com/ru/post/218763/) девайс AY LPT. Но не играет. YM работает (проверял на спектруме), проверял подачу напряжений при установке выходных бит на всех ножках микросхему. ZX Tune исправно посылает сигналы в LPT, но тишина. Добиться хоть какого-то шума смог подав на BDIR 5 вольт, как в схеме, которая была приведена до реализованной.
Смущает фраза в статье:
В ряде экспериментов выяснилось, что для полного счастья необходимо еще контролировать управляющий сигнал BDIR, поэтому на схеме появился этот сигнал, заведенный на первый пин LPT (Strobe). Сигнал Strobe в LPT инвертированный, и по хорошему нужно бы было поставить транзистор, такой как у сигнала RESET, для обратной инверсии, но можно и просто помнить о том, что если шлем 1, то BDIR = 0 и если шлем 0, то BDIR = 1.
Что значит - просто помнить? Это как? ZX Tune должен посылать обратный сигнал для BDIR? Это надо библиотеку тогда переписывать?

O5-14
02.03.2022, 15:22
В итоге получилось следующее:
плата не разводилась ? Или хотя бы фото с другой стороны, вдруг поможет... а то завалялась YM2149F

Tronix
02.03.2022, 15:27
плата не разводилась ?
Нет. С обратной стороны клубок МГТФ, ничего интересного.

O5-14
04.03.2022, 04:45
С обратной стороны клубок МГТФ
а я тут накидал черновик платы. Несколько перемычек всё-таки есть, но зато 1спп)
Немного не до конца доведена, потому что проблемы с доставанием кварцевого генератора.77095
Если заработает, подумаю над чертежом(stl)корпуса.