...
Вид для печати
...
Я году в 88-89 затеял делать приставку-синтезатор к "Радио-86РК". Там были три ВВ55, три ВИ53 и девять ЦАП 572 для огибающей. К счастью, вовремя это дело бросил.
Гораздо лучше взять PSG типа AY-8910, хотя она и не отечественная ни разу.
Да в такие габариты влезет многое. Тут вариантов кстати много.
Если ты хочешь чтобы на плате был свой проц, то вопрос другой - ВМ80А выбран из каких соображений. Можно заменить допустим на микроконтроллер (обвязки минимум), Z80 (можно типа карту GS от спека замутить, там ЦАПов выше крыши), AY поставить однозначно надо, без него это уже не модуль звука.
На счет АЦП - что ты планируешь им делать?
Ты бы хоть написал конкретно на что тебе ссылки нужны. А то не совсем понятно что ты хочешь в итоге.
Из всего я понял лишь что ты хочешь чтобы был микропроцессор КР580ВМ80А и соотвественно КР580ГФ24. Ты хочешь прикрутить туда ЦАП КР572ПА1, типа выводить оцифровки. Еще предположу ты туда поставишь КР580ВИ53.
Viktor2312, нужно сперва определиться с функциональностью, а элементную базу с обвязкой выбирать уже потом исходя из этой самой функциональности.
В игровой приставке Sega Megadrive 16, например, центральным процессором работает Motorola 68000, а графикой и звуком (оцифрованным и через PSG) занимается Z80.
Что карта должна будет делать? воспроизводить что? откуда? ВИ53 хорош просто как трёхканальный источник меандра, а про пилу или синус можно забыть. Формировать огибающую программно тоже довольно хлопотное занятие, и опять же неясно, что за софт это будет делать (и зачем).
Viktor2312, На 1986ВЕ92(3)У посмотри - отечественный =)
Зато военная металлокерамика -60°С...+125°С!!11
Ну а хочет он ВМ80, ну сам виноват... Может с 85м меньше хлопот будет?
А для цапов наверное можно резисторы не городить, а сделать 1-битный с pulse density modulation на много кгц.
Советую посмотреть журнал Радио 1992 г №12
стр 35 Музыкальный синтезатор Студнев - блок синтеза звука
А вдруг это то что надо :rolleyes_std:
Немножко входных данных для размышлений на основе хорошо известного примера:
MOS6581 (SID) использует 24-битный фазовый аккумулятор, который складывается с частотой 1 МГц с 16-битным регистром высоты звука. Верхние 8 бит аккумулятора работают непосредственно как выход для генерации пилы и треугольника, включены через компаратор для генерации меандра, или могут (могли бы) использоваться как индексы в таблице генерации волновой формы. Это на один канал.
Может ВМ80 складывать 24+16 бит с частотой 1*<число каналов> МГц? Как? Или, какая элементная база 80-х позволяет собрать три (или сколько надо каналов) 24+16 битных сумматора, которые поместились бы в корпус желаемого размера?
Игрался в начале 90х с 8-разрядным ЦАП на процессоре ВМ80 (2 МГц).
Была попытка сделать хотя бы один канал как у Scream Tracker.
Было два подхода к изменению частоты воспроизведения.
Первый - выводить подряд все отсчёты, но с разной скоростью в зависимости от ноты. Качество получилось "потянет", но на ноты никак не ложилось - не хватало точности настройки. Хотя наверное басовые инструменты можно было в пределах одной октавы настроить.
Задержка между выдачей очередного отсчёта в ЦАП формировалась при помощи вычисляемого прыжка в цепочку NOP'ов. Чем ниже тон, тем больше NOP'ов выполнялось. В итоге точность подстройки получалась примерно 4 такта.
Второй - в зависимости от высоты ноты пропускать в семпле соответствующее количество отсчётов (на самом деле чуть посложнее, но идея именно в возможности пропускать отсчёты). Качество звучания никакое, низкая частота дискретизации, но зато можно было настроить по нотам.
В итоге всё закончилось одноголосой "драм-машинкой".
Слабоват ВМ80 для ИКМ-синтеза. Если идея-фикс именно на отечественной базе, то наверное имеет смысл посмотреть в сторону 16-битных PDP-совместимых процессоров...
Я начал разговор про фазовый аккумулятор потому, что речь была не о простой пищалке, это и ВИ53 с грехом/2 делает, а о чем-то, что проигрывает семплы из памяти. Просто проигрывать как оно есть ВМ80 справится, конечно, сам. Но если играть музыку, надо менять высоту звука, причем очень точно. Эту задачу надо как-то решать.
Вот пример сложения 24+16, я не проверял его на правильность и не претендую на оптимальность, но радикально проще не будет:
106 тактов. При тактовой 2МГц и полном отсуствии циклов ожидания это дает нам 18,868 Гц. Это только одна подпрограмма вычисления фазы, даже без подсчета времени на ее вызов. Число тактов вырастет втрое в реальной программе, и это только один канал.Код:phase_cycle:
lhld phase_add ; 16
xchg ; 5
lhld phase_low ; 16
dad d ; 10
shld phase_low ; 16
lda phase_hi ; 13
aci 0 ; 7
sta phase_hi ; 13
ret ; 10 = 106
phase_add: dw 0
phase_low: dw 0
phase_hi: db 0
Если использовать внешние микросхемы для того же самого, можно это делать быстро. И ВМ80 тогда совершенно не нужен.
А MIDI планируется? оно и проще, и полезнее, хотя тоже уже почти сорок лет стандарту.
Если играть семплы из памяти, можно поставить 1810ВТ37 и ВИ53. Получится гибрид GS и DMA USC. Только памяти 512 килобайт надо.
Оцените мощность ВМ80 с точки зрения ПДП, т.е. сколько он реально успеет отгрузить байт в ЦАП. Или может быть проц будет заниматься чтением с внешних устройств а завгрузку таки отдать ВТ57 ?
не кидайтесь на 16х44.1х2 это не реально, расчитайте для начала 8х22х2.
разберите вопрос волнового синтеза http://www.computerra.ru/340318/
8 бит на сегодняшний день - это ни о чём.
Немного поразмышлял на тему, что можно было бы выжать из ВМ80.
Допустим взять 4 канала по 8 бит. На каждый канал - отдельный ЦАП и микширование каналов сделать аналоговым - чтобы снять часть работы с процессора.
Звучащий инструмент представить в виде заранее заполненных таблиц воспроизведения. Диапазон, к примеру, 76 нот. Таким образом будет 76 таблиц размером максимум 256 байт (на один или два периода частоты - только гармонические инструменты). Выровнять их по границе 256 байт - чтобы меньше было операций по вычислению адреса таблицы.
В 64 килобайта влезет три инструмента и останется немного памяти на код.
С таким подходом умозрительно можно получить 4 канала по 8 бит с частотой дискретизации в районе 4 - 8 килогерц.
Действия:
- взять 8-битный индекс ноты первого канала
- прибавить к индексу старший байт адреса начала таблицы "семплов" выбранного инструмента
- взять значение 8-битного счётчика первого канала - получили 16-разрядный адрес очередного отсчёта
- получить значение отсчёта
- вывести его в ЦАП первого канала
- увеличить 8-битный счётчик на 1
- сравнить с 8-битной длиной таблицы семпла
- если семпл закончился, обнулить счётчик
- сохранить значение 8-битного счётчика
....далее все те же операции для остальных каналов
Можно прикинуть это всё в системе команд ВМ80 с растактовкой, чтобы вздохнуть и смириться с тем, что процессор не подходит для ИКМ синтеза. А если делать аналоговый синтез или выносить всё в железо, то дополнительный ВМ80 становится ненужным.
И если огибающие можно сделать за счёт управления аналоговой частью центральным процессором, то вот с вибрато, к примеру, полный облом.
hdc, вместо масштабирования каждого инструмента можно масштабировать только индексы. Но применительно к ВМ80 это почти ничего не меняет.
Пришло в голову, что два ВИ53 можно каскадировать. Если первый программировать в режим 3 (генератор меандра) и его выход использовать как GATE для второго в режиме 1 (одновибратор), то получится странный, но все же генератор ШИМ. А с ШИМ-ом можно уже изображать какое-то жалкое подобие музыки, особенно если еще фильтр добавить.
А мне ночью подумалось, что если пытаться таки сделать синтезатор на ВМ80, то можно просто на каждый канал по отдельному процессору + аналоговое микширование + ВМ80А вроде может на 2,5 МГц заводиться... но это из разряда игр разума - просто понять границы возможного. делать такое в железе выглядит неразумным.
В 1983 году компания Кorg выпустила в чём-то культовый синтезатор Poly 800 - один из первых аналоговых синтезаторов с цифровым управлением. Внутри был клон 8085 для управления, и ворох специализированных микросхем (DCO, VCF и т.д.)
Я себе такой купил, исполнив мечту детства и закрыв (для себя) тему построения синтезатора на 8080-совместимом процессоре :)
Согласен, это я погорячился. Но на конструктивной ноте: когда-то при изготовлении клона ZX мой выбор пал на Новосибирскую модель, потому что в ней присутствовал УСАПП ВВ51 и обещалась поддержка MIDI. Много места он вместе с оптронной развязкой не займёт (габариты модуля позволяют же :)), а впоследствии может оказаться весьма полезен.
если говорить о чистой музыкалке, то очень правильная мысль.
я когда-то делал такой порт к Микроше. потом к нему можно прицепить что-то вроде этого http://cd.textfiles.com/mmcd/ENG/TXT/S5_4.HTM
Atari, а какой-нибудь софт для программирования этого был?
толком ничего небыло.
Мы в своё время игрались с 572ПА1
https://sapr.asvcorp.ru/libr/detail?comp=5438&tcid=95
Восемь. Если будем делать 4 канала, то получится четыре канала по 8 бит.
Надо для начала программную часть прикинуть - что в итоге сможем получить. То есть прикинуть код семплера и по тактам посмотреть что же у нас за звук в итоге получится. Просто пищалку делать неинтересно.
Прикинуть можно с довольно большой точностью в эмуляторе. Эмулятор VV поддерживает Covox, например. Про b2m не уверен, но наверняка в нем тоже есть Covox, надо только поискать ;)
По-моему, по крайней мере в этой теме, у всех критика конструктивная. Просто многие имеют опыт синтеза звука и сигналов вообще, или подробно изучали вопрос, поэтому представляют себе проблемы которые ему сопутствуют. Интересно ведь когда-нибудь увидеть работающее устройство, а не быть свидетелем того, как куча сил и времени растрачивается на проект, который заведомо не способен выполнить свою задачу.
Прикинул код для воспроизведения семплов - то, от чего придётся отталкиваться. Всё выглядит не так страшно, как казалось поначалу.
За счёт некоторого количества фокусов цикл воспроизведения семпла занимает 106 тактов (если с тактами не напутал и если в коде нет ошибок), что при тактовой 2 Мгц даёт частоту дискретизации 18867 Гц, а при тактовой 2,5 Мгц - 23584 Гц.Код:DAC EQU #####
CMD EQU #####
play_sample:
lxi h, 0 ; регистр стека будет использоваться
dad sp ; не по-назначению, поэтому сохраняем его
shsl spsav
lhld sample_start ; получаем адрес начала семпла
mvi e, 0 ; DE - младшие 16 бит 24-битной "фазы"
mov d, l
mov c, h ; C - старшие 8 бит 24-битной "фазы"
lhld sample_end ; получаем адрес конца семпла
mov b, h ; адрес конца семпла должен быть
; выровнен по концу 256-байтного блока!
; т.е. адрес последнего байта семпла
; должен всегда быть XXFFh
; это даёт возможность проверки границы
; одним 8-разрядным сравнением
lhld pitch ; значение, определяющее высоту тона
; воспроизведения семпла. к примеру,
; если оно равно 100h, семпл воспроизводится
; побайтно, если равно 200h - семпл
; воспроизводится через один байт
; если равно 80h - семпл воспроизводится
; в два раза медленнее (каждый отсчёт
; выводится дважды)
sphl ; SP будет использован для хранения
; этой величины, чтобы всё было
; на регистрах
loop:
in CMD ; 10 ; это "заглушка" проверки того,
ora a ; 4 ; что надо прекращать воспроизводить ноту
jm over ; 10
xchg ; 4 ; складываем младшие 16 разрядов "фазы"
dad sp ; 10 ; со значением pitch
xchg ; 4 ; возвращаем результат в DE
mov a, c ; 4 ; прибавляем перенос к старшим 8 разрядам
aci 0 ; 7 ; которые хранятся в регистре C
mov c, a ; 4
mov l, d ; 4 ; старшие 16 разрядов "фазы" - это адрес
mov h, c ; 4 ; очередного отсчёта семпла для вывода в ЦАП
cmp b ; 4 ; проверяем, что семпл ещё не закончился
jnc over ; 10 ; (про выравнивание семпла написано выше)
; это то самое место, где хорошо экономятся
; такты
mov a, m ; 7 ; получаем значение текущего отсчёта
out DAC ; 10 ; выводим его в ЦАП
jmp loop ; 10 ; повторяем цикл
over:
lhld spsav
sphl
ret
spsav: dw 0
sample_start: dw 0
sample_end: dw 0
pitch: dw 0
end
Кстати не помню XRA A - чистит бит переноса или нет. Если не чистит,
то можно выиграть три такта на сложении переноса:
Учитывая, что у перкуссиям питч не нужен - всякие хэты можно выдавать и на более высокой частоте.Код:xra a ; 4 ; прибавляем перенос к старшим 8 разрядам
adc c ; 4 ; которые хранятся в регистре C
mov c, a ; 4
Не то, чтобы нормально, но достаточно, чтобы имело смысл этим заниматься. Звук, конечно, будет глуховат. 2.5 МГц звук сделали бы ощутимо звонче.
Количество каналов в данном случае можно условно рассматривать как количество одновременно звучащих инструментов. Четыре канала - это в каком-то роде необходимый минимум. "Типовая" раскладка: один канал - аккорды (семплы, в которых сразу записано звучание аккордов), второй - сольный, третий - бас, четвёртый - ударные.
Если был бы процессор помощнее, то все эти каналы формировались одним процессором и программно бы смешивались перед выдачей в ЦАП. В нашем же случае более слабый процессор ещё поискать надо - поэтому один процессор кое как может справиться со звучанием только одного инструмента, а смешивать звуки разных каналов придётся "аппаратно". Как это будет выглядеть - зависит от того, что мы хотим получить (индивидуальная громкость на каждый канал, баланс стерео)
Такой способ подключения как минимум обеспечит облегчённую совмещаемость разрабатываемой железки с другими компьютерами.
Сколько разрядов потребуется - станет видно в процессе работы.
У ВМ80 всего может быть 256 портов (для чего требуется 8 адресных линий. На схеме это A0 - A7).
У ВВ55 4 порта, поэтому две младшие адресные линии уходят прямо на него (A0, A1).
Остальные линии идут на дешифратор адреса.
Чтобы произошла выборка ВВ55 линии A4 - A7 обязательно должны иметь нулевое значение.
В зависимости от установленных перемычек будет требоваться разное значение линий A2 и A3. Если они пропускаются через инверторы D14,D15 - то ВВ55 будет активироваться только когда сигналы A2 и A3 равны нулю. В этом случае порты ВВ55 расположены по адресу 00h, 01h, 02h и 03h.
Если A2 и A3 подаются напрямую на D2, то то ВВ55 будет активироваться только когда сигналы A2 и A3 равны единице. В этом случае порты ВВ55 расположены по адресу 0ch, 0dh, 0eh и 0fh.
Как перемычки установлены на схеме - порты расположены по адресам 04h, 05h, 06h и 07h. (подпись на схеме по поводу адреса похоже содержит ошибку).
По поводу памяти - напрашивается объём порядка 512 кб, в идеале доступной сразу всем четырём процессорам. Т.е. смотреть надо в сторону РУ7. Процессоры не должны тормозить друг друга и регенерация памяти не должна тормозить процессор - отличная головоломка на мой взгляд.
По-моему система с четырьмя ВМ80 обречена, нельзя такие задачи решать в лоб: прирост пользы линейный, а рост сложности экспоненциальный.
Выборка семплов из памяти и выдача их на ЦАП ничем принципиально не отличается от схемы обновления экрана в любом 8-битном компьютере. Например, вот Вектор: в нем 4 банка памяти, из них одновременно выбираются байты для 4-х экранных плоскостей. Это те же 4 канала звука. Разница в том, что для видео адреса считаются один за другим, а для звука надо выбирать их согласно значению аккумулятора фазы, или по таблице.
Я пока ни в одном из вариантов не уверен, поэтому надо немного покопать. Для этого я прикинул примерную структурную схему "синтезатора" на ВМ80:
Скрытый текст
Самое сложное - это генератор и арбитр шины. В случае тактовой процессоров 2 МГц, частота общей шины (с учётом регенерации) получится 10 МГц. В этом месте я в первую очередь начинаю сомневаться в способностях отечественных микросхем ОЗУ и ПЗУ (поэтому-то я и не настаиваю на 2,5 МГц).
Общее ОЗУ хочется хочется сделать, чтобы любой инструмент можно было направить в любой канал, а общее ПЗУ - ну просто зачем четыре экземпляра одного и того же. Да и вообще количество проводов при таком подходе меньше.
Есть также сомнения в том, что получится "развести" на двухсторонней печатной плате... хотя можно поиграться с "трёхмерным" монтажом.
И для такой схемы скорее всего ничего из набора системной логики серии 580 пристроить не получится. Слишком всё "нестандартно".