Просмотр полной версии : Подключение эмулятора AY-AVR к Вектору
marinovsoft
22.09.2013, 18:31
Всем привет!
Решил подключить к Вектору музыкальный сопроцессор, а точнее, за неимением оного - его эмулятор на AVR. Эмулятор собрал, от PC через COM порт все отлично работает.
http://s017.radikal.ru/i402/1309/fc/3e86d45ed8d4t.jpg (http://radikal.ru/fp/5dbebfb17dc742878f99c34f6c213fbf)
На отдельной плате решил сделать адаптер подключения, за основу взял эту схему (во вложении), получилось как-то так.
http://s017.radikal.ru/i421/1309/5e/2ab8e2a7e6a7t.jpg (http://radikal.ru/fp/939aef9ffb4b48a89171b3576fbaba9b)
Микросхемы использовал такие
7421N -> К555ЛИ6
74138N -> К1533ИД7
74LS00 -> К155ЛА3
Проверял на файле TESTAY.ROM (во вложении)
В общем-то звук есть, но не такой, как должен быть. Если слышали как звучит "битый" MP3, то это примерно то же самое. То есть, музыка слышна и узнаваема, но все сопровождается артефактами. Решил еще раз проверить на замыкание сигнальных линий между собой - все ОК.
Дайте идею.
PS. Если есть необходимость - выложу исходники проектов в формате Eagle.
Дайте идею.
Я собирал по схеме из вложения, всё работает нормально, правда с реальным муз. процессором. Если есть возможность, проверь свой эмуль с этой схемой, а там уж можно дальше думать.
marinovsoft, если не сложно, то опубликуйте пожалуйста. Заранее спасибо.
marinovsoft
24.09.2013, 05:24
Файлы проектов.
Землю между адаптером и эмулятором кинуть отдельным проводом.
marinovsoft
29.09.2013, 21:31
Отключил от системного разъема первый и второй вывод К1533ИД7, второй вывод "посадил" на землю. Музыка заиграла как надо.
Какие будут мысли?
marinovsoft
04.10.2013, 21:02
Коллеги подсобите бинарниками, которые могут помигать сетодиодом с частотой 0,2-0,5 гц на 35 и 37 выводах системного порта? У меня больше идей нет.
Проще всего накатать маленькую програмку в кодах для мигания любым портом, прям в мониторе-отладчике. Еще были какие то тесты в программе "Тест устройств", но там помоему только порт ПУ можно тестить. ;)
еще с портом ВУ у вектора есть какой то заводской косяк, для исправления которого нужно в векторе что то паять... подробности уже непомню :(
marinovsoft
06.10.2013, 18:28
Кусок схемы
http://s019.radikal.ru/i606/1310/ff/e9434055f018t.jpg (http://radikal.ru/fp/6db4fe9ecab44cf59cf4e63adedcea66)
При этом звук ВИ53 играет нормально.
Осциллографом не смотрел, да и не знаю что должно быть на 35 и 37 выводах ПУ.
Еще оказалось, что если сделать так как написано в 5 сообщении, то в некоторых демках звук все-таки "неправильный".
"Проще всего накатать маленькую програмку в кодах для мигания любым портом, прям в мониторе-отладчике." - Не умею, поэтому и прошу тех, кто умеет.
что должно быть на 35 и 37 выводах ПУ.
ПУ или ВУ?
marinovsoft
07.10.2013, 09:26
Ошибочка вышла, ВУ, конечно. На фрагменте схемы он же.
Нечто отдаленно похожее (http://files.mail.ru/0D2D9AD898484429AD4FC4BB09147420)
В комплекте сторонняя программа (tasm), поэтому на форум не стал выкладывать. Если что-то нужно поменять - редактируем asmовский файл и запускаем bat - получаем обновленный rom.
В строке отмеченной тремя восклицательными !!! можно поменять out на in
Номер порта конечно тоже можно поменять
В комментариях написано, что можно заменить
lxi b,14423 ;примерно раз в 2 сек
на
lxi b,36058 ;примерно раз в 5 сек
Для преобразования rom в wav удобно использовать Rom2Wav (http://vector06c.narod.ru/emul/Rom2Wav21.rar)
marinovsoft
11.10.2013, 15:55
Спасибо, проверю при первой возможности.
marinovsoft
13.10.2013, 17:50
Сделал так
begin:
out 15h
jmp begin
Получил на осциллографе импульсы с периодом следования 8 мкс, длительность импульса 0,4 мкс, не маловато ли?
импульсы с периодом следования 8 мкс, длительность импульса 0,4 мкс, не маловато ли?
Длительность такта=1/3e6=333,(3) нс * 24 такта = как раз период 8 мкс
Насчет длительности импульса (получается он на 1/5 длиннее такта?) интересно что скажут железячники.
marinovsoft
14.10.2013, 10:27
Если есть необходимость - посмотрю на меньшем периоде развертки и уточню длительность импульса. Достаточен ли импульс такой длительности для работы настоящего AY? Или это AY-EMU так себя ведет? Или все-таки проблемы в железе Вектора?
atmega на какой частоте работает?
какая версия прошивки?
marinovsoft
14.10.2013, 12:56
На 27 Мгц. Прошивка из файла http://vector06c.narod.ru/emul/AY_AVR_Release.zip
По идее должно работать, у меня на спектруме заработало нормально, хотя там проц на 3.5МГц пашет.
marinovsoft
15.10.2013, 09:31
К сожалению работает не совсем корректно.
У z80, если мне не изменяет склероз, длительность сигнала записи в порт 2 (или даже 3) такта, может это сказывается.
А у ВМ80 сколько? или лучше в мкс. сразу?
надеюсь maronovsoft не будет против цитаты
длительность импульса 0,4 мкс
0.4 мкс. должно хватать, но мало ли, попробуй поставить кварц на атмегу 32МГц, если глюки пропадут, значит просто атмега неуспевает за сигналами.
marinovsoft
10.03.2014, 13:38
Увеличил длительность импульса более чем в 10 раз (до 0,5 мс) с помощью ждущего мультивибратора (не двух свободных элементах ЛА3)
http://vrtp.ru/uploads/post-82-1227722852.jpg
артефакты изредка проскакивают, зато fancy.rom нормально играть стал (против временного решения в #5 посте).
Что-то явно не так работает.
marinovsoft
16.11.2014, 18:22
Попробовал взять сигнал записи в порт не с системного разъема. Взял с вывода 4 D15.2 - уже лучше.
Но индикаторы в демке
http://asdasd.rpg.fi/~svo/scalar/ware/339/ не работают
http://zx-pk.ru/attachment.php?attachmentid=49941&stc=1&d=1416150871
А исходники на Asm-e или Си от этого чуда есть?
Я про исходник спросил к чему. Предполагаю, что чтение шины "эмулятором" происходит по прерыванию, которое вызывается сигналом ЗПВВ. Но для того, чтобы у процессора дошли "руки" до чтения шины, ему нужно сначала закончить операцию, которую он выполняет, потом записать в стек адрес следующей операции, потом перейти к выполнению процедуры на векторе прерывания, и возможно даже перейти к подпрограмме, которая и считает данные с шины... А это всё драгоценное время, и не факт, что на шине к тому времени будут актуальные данные.
Не помню уже, читается ли чего-нибудь из этого "музыкального сопроцессора". Если не читается, то было-бы просто класс. Нужно просто на шине между портом и "эмулятором" поставить "регистр с защелкой", который по сигналу ЗПВВ будет фиксировать состояние шины (до нового ЗПВВ), и пусть "эмулятор" считывает шину хоть с какой задержкой (утрирую), данные на шине будут актуальны значительно дольше.
А вот если ещё и читается чего-сь, вот тут уже сложнее... :(
marinovsoft
21.11.2014, 19:18
Подизасмил демку из моего предыдущего поста - из порта реально читается. Перекомпилировать пока не получилось (асм i8080 для меня как темный лес), но там сразу после записи в 15h порт следует чтение из 14h порта.
Реплика из http://www.avray.ru тоже не справляется
Да, посмотрел дешифратор адреса, ЧТВВ используется, значит для "ускорения" один выход - ставить два регистра :)
У AVR со схемы с первого сообщения, куча портов, можно один использовать для чтения из промежуточного регистра, другой для записи во второй регистр данных которые могут быть запрошены из эмулятора :)
Но всё снова упирается в наличие исходников, которые нужно подправить...
Кстати, есть ещё одно подозрение, а успевает ли эмулятор полностью обработать все операции с изменяемыми "регистрами" при их быстром (с минимальными интервалами) изменении? Организован ли в софте FIFO буфер для принимаемых значений регистров?
Может "артефакты" следствие того, что эмулятор не успев обработать изменение одного "регистра", уже получает значение для следующего "регистра"?
Исходники раньше лежали на сайте Тимохи, теперь их нигде нет кроме как у меня, надо будет куда нить выложить...
на какую атмегу нужен исходник?
емуль написан на алгоритм билдере.
...
на какую атмегу нужен исходник?
емуль написан на алгоритм билдере.
В первом сообщении в схеме Mega8515 вроде, вот для неё.
У неё портов много :)
А при компиляции, "нормальные" (asm/си) листинги создаёт?
marinovsoft
24.11.2014, 18:49
Ну, вот здесь есть копия
http://www.avray.ru/оригинальная-версия-эмулятора/
Powered by vBulletin® Version 4.2.5 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot