Просмотр полной версии : МСЗ-1
Viktor2312
30.08.2012, 11:08
...
Я году в 88-89 затеял делать приставку-синтезатор к "Радио-86РК". Там были три ВВ55, три ВИ53 и девять ЦАП 572 для огибающей. К счастью, вовремя это дело бросил.
Гораздо лучше взять PSG типа AY-8910, хотя она и не отечественная ни разу.
Проблема в том, что я не знаю с чего начинать. Но хочется сделать более менее хорошую звуковую карту для ПЭВМ "ИРИША-М". Главное чтобы она уместилась в габаритах стандартного модуля 230 х 150 мм, а если будет много микросхем, так и ничего страшного.
Поэтому лучше дайте какой нибудь совет хотя бы по структуре, какие блоки основные должны присутствовать, помимо микропроцессора с обвязкой.
Да в такие габариты влезет многое. Тут вариантов кстати много.
Если ты хочешь чтобы на плате был свой проц, то вопрос другой - ВМ80А выбран из каких соображений. Можно заменить допустим на микроконтроллер (обвязки минимум), Z80 (можно типа карту GS от спека замутить, там ЦАПов выше крыши), AY поставить однозначно надо, без него это уже не модуль звука.
На счет АЦП - что ты планируешь им делать?
AY, не хочу применять импорт, хочется именно на отечественной элементной базе реализовать, чисто из спортивного интереса, как минимум.
Зря конечно, этим самым ты сильно ограничишь эту карту. Ведь музыки под AY столько написано.
Впрочем ты можешь сдлеать как в ПК8002 аналог AY на наших микрухах. Там как раз ВИ53 и кучка ЦАПов ПА1. Правда помоему он не полный аналог, но могу и ошибаться
Может кто нибудь кинется ссылками, чтобы теорию почитать, а то пока всё как-то аморфно в голове выглядит?
Ты бы хоть написал конкретно на что тебе ссылки нужны. А то не совсем понятно что ты хочешь в итоге.
Из всего я понял лишь что ты хочешь чтобы был микропроцессор КР580ВМ80А и соотвественно КР580ГФ24. Ты хочешь прикрутить туда ЦАП КР572ПА1, типа выводить оцифровки. Еще предположу ты туда поставишь КР580ВИ53.
Viktor2312, нужно сперва определиться с функциональностью, а элементную базу с обвязкой выбирать уже потом исходя из этой самой функциональности.
В игровой приставке Sega Megadrive 16, например, центральным процессором работает Motorola 68000, а графикой и звуком (оцифрованным и через PSG) занимается Z80.
Что карта должна будет делать? воспроизводить что? откуда? ВИ53 хорош просто как трёхканальный источник меандра, а про пилу или синус можно забыть. Формировать огибающую программно тоже довольно хлопотное занятие, и опять же неясно, что за софт это будет делать (и зачем).
NovaStorm
01.09.2012, 20:32
Viktor2312, На 1986ВЕ92(3)У посмотри - отечественный =)
Viktor2312, На 1986ВЕ92(3)У посмотри - отечественный =)
Ну написал же человек что хочет на тру процессоре ВМ80. Зачем ему ARM. Тем более наши армы по цене не слишком привлекательны.
Viktor2312, а память какую хочешь использовать. Если статику, то вроде наши больше 8кб не делали.
Viktor2312, На 1986ВЕ92(3)У посмотри - отечественный =)
У него внешняя шина порезанная. Память к нему нормально не подключить. Хотя если его использовать как PSG, то можно обойтись встроенной.
NovaStorm
01.09.2012, 20:51
Зато военная металлокерамика -60°С...+125°С!!11
Ну а хочет он ВМ80, ну сам виноват... Может с 85м меньше хлопот будет?
А для цапов наверное можно резисторы не городить, а сделать 1-битный с pulse density modulation на много кгц.
Зато военная металлокерамика -60°С...+125°С!!11
Ну а хочет он ВМ80, ну сам виноват... Может с 85м меньше хлопот будет?
А для цапов наверное можно резисторы не городить, а сделать 1-битный с pulse density modulation на много кгц.
Зачем городить то. Сейчас помоему достать 572ПА1 не проблема. ;)
Советую посмотреть журнал Радио 1992 г №12
стр 35 Музыкальный синтезатор Студнев - блок синтеза звука
А вдруг это то что надо :rolleyes_std:
Немножко входных данных для размышлений на основе хорошо известного примера:
MOS6581 (SID) использует 24-битный фазовый аккумулятор, который складывается с частотой 1 МГц с 16-битным регистром высоты звука. Верхние 8 бит аккумулятора работают непосредственно как выход для генерации пилы и треугольника, включены через компаратор для генерации меандра, или могут (могли бы) использоваться как индексы в таблице генерации волновой формы. Это на один канал.
Может ВМ80 складывать 24+16 бит с частотой 1*<число каналов> МГц? Как? Или, какая элементная база 80-х позволяет собрать три (или сколько надо каналов) 24+16 битных сумматора, которые поместились бы в корпус желаемого размера?
Немножко входных данных для размышлений на основе хорошо известного примера:
MOS6581 (SID) использует 24-битный фазовый аккумулятор, который складывается с частотой 1 МГц с 16-битным регистром высоты звука. Верхние 8 бит аккумулятора работают непосредственно как выход для генерации пилы и треугольника, включены через компаратор для генерации меандра, или могут (могли бы) использоваться как индексы в таблице генерации волновой формы. Это на один канал.
Может ВМ80 складывать 24+16 бит с частотой 1*<число каналов> МГц? Как? Или, какая элементная база 80-х позволяет собрать три (или сколько надо каналов) 24+16 битных сумматора, которые поместились бы в корпус желаемого размера?
Какой SID, ты чего. Человек отказался от гораздо простого AY. А ты замахнулся на что то высшее.
Может.
А сколько тактов займет одно сложение?
Игрался в начале 90х с 8-разрядным ЦАП на процессоре ВМ80 (2 МГц).
Была попытка сделать хотя бы один канал как у Scream Tracker.
Было два подхода к изменению частоты воспроизведения.
Первый - выводить подряд все отсчёты, но с разной скоростью в зависимости от ноты. Качество получилось "потянет", но на ноты никак не ложилось - не хватало точности настройки. Хотя наверное басовые инструменты можно было в пределах одной октавы настроить.
Задержка между выдачей очередного отсчёта в ЦАП формировалась при помощи вычисляемого прыжка в цепочку NOP'ов. Чем ниже тон, тем больше NOP'ов выполнялось. В итоге точность подстройки получалась примерно 4 такта.
Второй - в зависимости от высоты ноты пропускать в семпле соответствующее количество отсчётов (на самом деле чуть посложнее, но идея именно в возможности пропускать отсчёты). Качество звучания никакое, низкая частота дискретизации, но зато можно было настроить по нотам.
В итоге всё закончилось одноголосой "драм-машинкой".
Слабоват ВМ80 для ИКМ-синтеза. Если идея-фикс именно на отечественной базе, то наверное имеет смысл посмотреть в сторону 16-битных PDP-совместимых процессоров...
Я начал разговор про фазовый аккумулятор потому, что речь была не о простой пищалке, это и ВИ53 с грехом/2 делает, а о чем-то, что проигрывает семплы из памяти. Просто проигрывать как оно есть ВМ80 справится, конечно, сам. Но если играть музыку, надо менять высоту звука, причем очень точно. Эту задачу надо как-то решать.
Вот пример сложения 24+16, я не проверял его на правильность и не претендую на оптимальность, но радикально проще не будет:
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
106 тактов. При тактовой 2МГц и полном отсуствии циклов ожидания это дает нам 18,868 Гц. Это только одна подпрограмма вычисления фазы, даже без подсчета времени на ее вызов. Число тактов вырастет втрое в реальной программе, и это только один канал.
Если использовать внешние микросхемы для того же самого, можно это делать быстро. И ВМ80 тогда совершенно не нужен.
А MIDI планируется? оно и проще, и полезнее, хотя тоже уже почти сорок лет стандарту.
Если играть семплы из памяти, можно поставить 1810ВТ37 и ВИ53. Получится гибрид GS и DMA USC. Только памяти 512 килобайт надо.
Оцените мощность ВМ80 с точки зрения ПДП, т.е. сколько он реально успеет отгрузить байт в ЦАП. Или может быть проц будет заниматься чтением с внешних устройств а завгрузку таки отдать ВТ57 ?
не кидайтесь на 16х44.1х2 это не реально, расчитайте для начала 8х22х2.
разберите вопрос волнового синтеза http://www.computerra.ru/340318/
NovaStorm
02.09.2012, 22:49
Если идея-фикс именно на отечественной базе, то наверное имеет смысл посмотреть в сторону 16-битных PDP-совместимых процессоров...
А они не сильно-то мощнее в плане инструкций на такт, только за счёт более высокой частоты и 16 бит выползти можно.
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. Много места он вместе с оптронной развязкой не займёт (габариты модуля позволяют же :)), а впоследствии может оказаться весьма полезен.
в ней присутствовал УСАПП ВВ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
В общим мысли вслух, но надо переходить от чистой теории, к немного практике, а теорию восполнять, уже к конкретному решению, которое мы определили. Например, давайте определимся с разрядностью 8-, 12-, 16-, 24- или 32-, что бы этот вопрос закрыть навсегда.
Восемь. Если будем делать 4 канала, то получится четыре канала по 8 бит.
Надо для начала программную часть прикинуть - что в итоге сможем получить. То есть прикинуть код семплера и по тактам посмотреть что же у нас за звук в итоге получится. Просто пищалку делать неинтересно.
Прикинуть можно с довольно большой точностью в эмуляторе. Эмулятор VV поддерживает Covox, например. Про b2m не уверен, но наверняка в нем тоже есть Covox, надо только поискать ;)
По-моему, по крайней мере в этой теме, у всех критика конструктивная. Просто многие имеют опыт синтеза звука и сигналов вообще, или подробно изучали вопрос, поэтому представляют себе проблемы которые ему сопутствуют. Интересно ведь когда-нибудь увидеть работающее устройство, а не быть свидетелем того, как куча сил и времени растрачивается на проект, который заведомо не способен выполнить свою задачу.
Прикинул код для воспроизведения семплов - то, от чего придётся отталкиваться. Всё выглядит не так страшно, как казалось поначалу.
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
За счёт некоторого количества фокусов цикл воспроизведения семпла занимает 106 тактов (если с тактами не напутал и если в коде нет ошибок), что при тактовой 2 Мгц даёт частоту дискретизации 18867 Гц, а при тактовой 2,5 Мгц - 23584 Гц.
Кстати не помню XRA A - чистит бит переноса или нет. Если не чистит,
то можно выиграть три такта на сложении переноса:
xra a ; 4 ; прибавляем перенос к старшим 8 разрядам
adc c ; 4 ; которые хранятся в регистре C
mov c, a ; 4
Учитывая, что у перкуссиям питч не нужен - всякие хэты можно выдавать и на более высокой частоте.
Кстати не помню XRA A - чистит бит переноса или нет.
Чистит.
Чистит.
Тогда, если в "нормальном" состоянии порт CMD будет возвращать ноль,
то это можно использовать для оптимизации на целых семь тактов - предварительно чистить аккумулятор не надо будет.
hdc - я так понял Вы прикинули и всё как вроде нормально при тактовой частоте 2 МГц.
Не то, чтобы нормально, но достаточно, чтобы имело смысл этим заниматься. Звук, конечно, будет глуховат. 2.5 МГц звук сделали бы ощутимо звонче.
Так же объясните, зачем нам 4 канала, что это даёт и для чего. Я так понял эти четыре канала будут представлять собой 4 шт. ЦПА, например КР572ПА1 с операционником на выходе?
Количество каналов в данном случае можно условно рассматривать как количество одновременно звучащих инструментов. Четыре канала - это в каком-то роде необходимый минимум. "Типовая" раскладка: один канал - аккорды (семплы, в которых сразу записано звучание аккордов), второй - сольный, третий - бас, четвёртый - ударные.
Если был бы процессор помощнее, то все эти каналы формировались одним процессором и программно бы смешивались перед выдачей в ЦАП. В нашем же случае более слабый процессор ещё поискать надо - поэтому один процессор кое как может справиться со звучанием только одного инструмента, а смешивать звуки разных каналов придётся "аппаратно". Как это будет выглядеть - зависит от того, что мы хотим получить (индивидуальная громкость на каждый канал, баланс стерео)
Так же я решил потихонечку начинать чертить электрическую принципиальную схему. Но тут вопрос появился. Как мы будем связываться с центральным процессором, я так понял для этих целей нам вполне хватит ППА КР580ВВ55А.
Такой способ подключения как минимум обеспечит облегчённую совмещаемость разрабатываемой железки с другими компьютерами.
Сколько разрядов потребуется - станет видно в процессе работы.
Схема которого описана в красной книжке на страницах 112, 113. Если нам его достаточно и будет применяться именно эта схема, то мне немного не понятно как к нему будет обращаться центральный процессор.
Насколько я понимаю у нас в микросхеме ВВ55 имеется 4 доступных регистра, регистр порта А, регистр порта В, регистр порта С и регистр управляющего слова (РУС). Соответственно для центрального процессора они доступны как внешние порты и у нас должно быть как минимум 4 адреса порта. Соответственно как поставить поставить перемычки и какие номера портов, каким регистрам будут соответствовать, объясните пожалуйста, а то я запутался.
У ВМ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 обречена, нельзя такие задачи решать в лоб: прирост пользы линейный, а рост сложности экспоненциальный.
Выборка семплов из памяти и выдача их на ЦАП ничем принципиально не отличается от схемы обновления экрана в любом 8-битном компьютере. Например, вот Вектор: в нем 4 банка памяти, из них одновременно выбираются байты для 4-х экранных плоскостей. Это те же 4 канала звука. Разница в том, что для видео адреса считаются один за другим, а для звука надо выбирать их согласно значению аккумулятора фазы, или по таблице.
Я пока ни в одном из вариантов не уверен, поэтому надо немного покопать. Для этого я прикинул примерную структурную схему "синтезатора" на ВМ80:
https://sapr.asvcorp.ru/watch/page.png?p=359
Самое сложное - это генератор и арбитр шины. В случае тактовой процессоров 2 МГц, частота общей шины (с учётом регенерации) получится 10 МГц. В этом месте я в первую очередь начинаю сомневаться в способностях отечественных микросхем ОЗУ и ПЗУ (поэтому-то я и не настаиваю на 2,5 МГц).
Общее ОЗУ хочется хочется сделать, чтобы любой инструмент можно было направить в любой канал, а общее ПЗУ - ну просто зачем четыре экземпляра одного и того же. Да и вообще количество проводов при таком подходе меньше.
Есть также сомнения в том, что получится "развести" на двухсторонней печатной плате... хотя можно поиграться с "трёхмерным" монтажом.
И для такой схемы скорее всего ничего из набора системной логики серии 580 пристроить не получится. Слишком всё "нестандартно".
Не проще ли DMA Ultrasound приспособить? Одна ВТ37 справится с проигрыванием семплов лучше, чем 4 ВМ80.
В ЕС 1840/41 стоят К565РУ5 по 128 шт на плате и ничего великолептно всё работает, а там частоты поболее чем при применении с 580 серией.
Поэтому у меня сомнений нет, главное будет применить максимально быстродействующие (с правильной буквой выбирать).
В ЕС1841 тактовая процессора 4,77МГц (не уверен, но порядок такой),
что всё-таки ниже, чем предполагается в нашем случае. Надо справочные данные поднимать по микросхемам памяти.
Уже было написано, что хочется использовать КР580 серию и К555.
А по поводу не проще ли. Да проще. Есть много других решений которые проще, например юзать современную звуковую карту на современном компьютере и не ломать себе голову. Но это не интереснее, по крайней мере.
Если можете, сделайте так как лично Вы считаете нужным и обзовём её тогда МСЗ-2.
Вообще вариант с использованием контроллера прямого доступа скорее всего самый оптимальный и лучший с точки зрения качества звука. Можно даже посмотреть в сторону КР580ВТ57. Идея остаётся та же - 4 ЦАП'а, контроллер ПДП, тактируемый от двух ВИ53 сам будет считывать из памяти и выводить в ЦАП'ы. Сразу исчезают проблемы с быстродействием. Вопрос лишь в пропускной способности ВТ57 (суммарная пропускная способность должна быть хотя бы 80 килобайт в секунду).
Решить вопрос с адресацией 512 килобайт памяти и её регенерацией.
И процессор на звуковой карте тогда можно оставить один.
Vladimir_S
07.09.2012, 17:48
Решить вопрос с адресацией 512 килобайт памяти и её регенерацией.
А динамическое ОЗУ это принципиально?
почитал тут теории о 4-х процессорах.
вот интересно, а один основной проц и комп в минималке уже работают?
может я чего-то пропустил?
Попробую и я идейку подкинуть.
Может тогда сделать 4-ре банка ОЗУ по 64К, на каждый банк по контроллеру ПДП+ЦАП, процессор по мере надобности "подключается" к окну в нужном банке памяти и на шину для программирования ПДП.
Связка банк памяти + ПДП + ЦАП работают автономно, сам процессор подключается только когда нужно разместить данные в память или задать режим работы ПДП.
Между 4-мя чемхотите, при требуемой частоте выборки, доступ к памяти прекрасно можно разрулить синхронно по фазам. Ф1 -- канал 1, Ф2 -- канал 2, ... Фх - процессор, Фу - регенерация. Общая память на всех и не надо городить никаких магистралей и автобанов.
Не проще сложить 4 8-битных канала в цифре и скормить получившиеся 12 бит одному ЦАПу, чем ставить 4 здоровенных ЦАПа? Честно не знаю ответа на этот вопрос, потому что страшно даже подумать, как будет выглядеть 8+8+8+8=24 на 555 серии. Может быть можно применить схему последовательного сложения со сдвиговыми регистрами.
И вообще, а как эти сэмплы готовить и откуда их брать?
Не знаю, с какой стороны начать.
http://ru.wikipedia.org/wiki/Импульсно-кодовая_модуляция
http://ru.wikipedia.org/wiki/MOD
http://ru.wikipedia.org/wiki/Direct_Digital_Synthesizer
http://synthmusic.ru/articles/synthesistypes/wavetable
Вообще с русскоязычными источниками на эту тему мрачновато. Все забито какой-то копипастой начального уровня.
а вот ещё и два ВИ53, это за гранью моего понимания, по крайней мере сейчас, да и зачем они.
Семплы надо воспроизводить с разной скоростью - чтобы получать разные ноты. ВИ53 можно программировать на генерацию импульсов разной частоты. Эти импульсы предполагается использовать как сигналы DRQ (запрос данных) для контроллера ПДП. По приходу очередного импульса контроллер ПДП будет читать очередной байт из памяти и выводить в ЦАП. В зависимости от того, на какую частоту запрограммирован ВИ53 - с такой скоростью будет воспроизводиться семпл. В контроллере ПДП четыре канала, а в ВИ53 - только три таймера, поэтому надо две ВИ53.
Надо думать, посмотрим, что скажет hdc
Одного контроллера ПДП вполне должно хватить на 4 канала. И общее для всех каналов ОЗУ позволяет более эффективно использовать память - можно, к примеру, одним инструментом играть на нескольких каналах и при этом в памяти будет только одна его копия.
Вот что ещё подумалось по поводу варианта с ПДП... раз у нас теперь нет проблемы с частотой дискретизации, то качество звука теперь упирается только в восьмибитность. Предлагаю подумать над тем, как сделать 16-битные каналы.
Общая концепция такова - сделать организацию ОЗУ 16-разрядной.
Когда контроллер ПДП выставляет адрес и читает данные - отдавать ему младшие 8 бит, а старшие 8 бит защёлкивать в отдельном регистре. Когда ПДП выдаёт данные в порт - его 8 бит выводить на младшие разряды ЦАП, а старшие разряды брать из того самого регистра.
Процессор должен видеть всё пространство ОЗУ как 8-разрядное - это несложно сделать.
При этом получаем совершенно другой уровень качества звучания.
...мне уже интересно - а эти контроллеры ПДП как-то можно каскадировать? А то может получится упихнуть 4 контроллера ПДП и 16 каналов сделать? Тогда и MIDI можно будет играть...
[/COLOR]И вообще, а как эти сэмплы готовить и откуда их брать?
Музыкальные файлы от трекеров (MOD, STM, S3M, XM и др.) содержат в себе семплы. Также семплы можно выдирать из документированных форматов (Sound Font, к примеру).
Или просто звуковой картой оцифровать реальный инструмент/голос/какой-нибудь звук и из полученной WAV'ки сделать семпл. Суть семпла - та же WAV'ка, только с дополнительными данными. Например - какая нота в семпле сыграна, длительность "атаки" (начало звучания), длительность "удержания" (та часть семпла, которая воспроизводится по-кругу, пока звучит нота) и длительность "затухания" (то, что играется, когда нота закончилась). Надо только аккуратно подбирать участок удержания, чтобы не было щелчка при переходе на начало.
---------- Post added at 23:27 ---------- Previous post was at 23:18 ----------
Не проще сложить 4 8-битных канала в цифре и скормить получившиеся 12 бит одному ЦАПу, чем ставить 4 здоровенных ЦАПа?
Честно не знаю ответа на этот вопрос, потому что страшно даже подумать, как будет выглядеть 8+8+8+8=24 на 555 серии. Может быть можно применить схему последовательного сложения со сдвиговыми регистрами.
Не всё так просто. Надо ведь каждому каналу ещё задать громкость и баланс стерео. Простым сложением здесь не отделаться. Для четырёх каналов аналоговое микширование проще.
Viktor2312, Виктор, если Вы следуете шагами советской электроники, То пора уже посмотреть на серию 1810 (ВМ86 и ВТ37). Все-таки там не такие сильные отличия от 580 серии, чтобы их так бояться.
Зато и частоты выше, и 16 бит.
Применить 16-битные ЦАП -ы.
И получается, что останавливаемся на том, что:
2. Микропроцессор КР580ВМ80А, в стандартном включении!
3. Частота резонатора 22,5МГц (тактовая 2,5МГц)!
???
4. Один контроллер ПДП ВТ57
5. Два таймера ВИ53
6. Один контроллер прерываний ВН59
7. 512 килобайт памяти (две линейки РУ7)
8. четыре канала по 8 бит (572ПА1)
9. аналоговое микширование (громкость на каждый канал и баланс стерео на каждый канал - не знаю как это делать)
10. Параллельный интерфейс для связи с компьютером
Это всё фиксируем на первую версию устройства.
Не всё так просто. Надо ведь каждому каналу ещё задать громкость и баланс стерео. Простым сложением здесь не отделаться. Для четырёх каналов аналоговое микширование проще.
Согласен, громкость канала — это аргумент.
9. аналоговое микширование (громкость на каждый канал и баланс стерео на каждый канал - не знаю как это делать)
В самом простом случае как-то так:
http://i.imgur.com/7v0G3.jpg (http://amplifiercircuit.net/voltage-controlled-variable-gain-amplifier.html/voltage-controlled-variable-gain-amplifier-2)
Для получения каждого управляющего напряжения — еще один ЦАП на канал. И, если нужен стерео микс, то два. Ничего здоровенного, просто лишняя пара дюжин корпусов =)
а сколько бит на громкость определено в формате mod? просто у амиги Паула даёт только 6 бит на канал, у нас даже с запасом получается.
Появилось вот такое предложение по поводу номера порта который использовать. Если будут создаваться другие модули, то они будут иметь перемычки П1 и П2 и ими можно будет выбрать номер порта. То именно в МСЗ-1 можно эти перемычки убрать, сэкономив тем самым немного места на плате, упростив разводку.
На мой взгляд МС3-1 не должен подключаться к внутренней шине компьютера. Это ограничивает его универсальность/переносимость.
Устройство лучше сделать подключаемым как принтер. Тогда его можно будет использовать с большим количеством компьютеров - вплоть до PC.
Воткнул например эту карточку в параллельный порт БК0010, и послушал какой-нибудь MOD... загружая его перед этим полчаса с кассеты =)
Если в ИРИШЕ нет параллельного порта - то тогда надо просто сделать отдельный контроллер параллельного порта, у которого будет разъём какой-нибудь, к которому уже будет подключаться МС3-1.
Возникает вопрос с питанием. Возможно имеет смысл питать от внешнего блока питания 12V и все нужные напряжения формировать из него.
Т.е. формат устройства предлагаю выполнить в виде "внешняя звуковая карта".
мы сейчас например разрабатываем (точнее, железо уже разработали) SID-Blaster, так там сделали именно на шину компа, но суть всей системы такова, что пересадить на внешку особой проблемы не будет. Портовый доступ (через несколько портов - порт команды, порт данных и порт статуса), так что переделать адресный дешифратор для работы, допустим, на LPT , думаю, большой проблемы не будет... Думаю, вам бы стоило идти по похожему пути..
а сколько бит на громкость определено в формате mod? просто у амиги Паула даёт только 6 бит на канал, у нас даже с запасом получается.
Восемь.
http://ru.wikipedia.org/wiki/MOD
hdc, это 8 бит на сэмпл. А у нас ещё впридачу 8 бит на громкость... Фактически можно будет 16-битные сэмплы играть.
hdc, это 8 бит на сэмпл. А у нас ещё впридачу 8 бит на громкость... Фактически можно будет 16-битные сэмплы играть.
Для этого понадобятся еще 4 DMA канала на регуляторы громкости :D
Vladimir_S
08.09.2012, 16:06
это К555ЛИ1, а это уже 4 элемента 2ИЛИ.
В справочник не смотрел, но насколько помню ЛИ1 это 2И.
Аналоговое микширование оказалось не таким простым.
Подумал про цифровой микшер.
Общая идея - использовать регистровые файлы, которые обрабатывать последовательно, вычисляя громкость и суммируя каналы.
Вычисление отсчёта с учётом громкости я так понимаю - умножить значение громкости на значение отсчёта и поделить на количество уровней громкости.
Для умножения можно использовать упомянутую ранее микросхему КМ1802ВР5 (но лучше найти умножитель 8*8, а то ВР5 монстр ещё тот), а делить на 256 - проще простого.
На скорую руку накидал схему и что-то она совсем не проще получается.
https://sapr.asvcorp.ru/watch?s=343
там с сигналами записи в регистры наверняка напутал - надо просто временные диаграммы порисовать... но общую идею схема раскрывает.
Сначала насчитываем левый канал, выдаём его на левый ЦАП, потом насчитываем правый канал, выдаём на правый ЦАП. Получаем фазовый сдвиг между каналами на длительность пересчёта - поэтому считать лучше почаще, чтобы мозг не замечал.
Чтобы это исправить надо ещё одну регистровую ступень делать.
Возможно появятся идеи по оптимизации схемы. А так - потом прикинем какой микшер проще, тот и будем делать.
КР1802ВР3 - биполярный быстродействующий параллельный умножитель 8х8 разрядов.
Можно подумать о её применении.
Хороший вариант. Как время будет - пририсую её.
Но микропроцессорная часть, остаётся при этом без изменений, а то я как раз подошёл к её разработке.
Да, там можно сказать без изменений. В чём-то даже проще наверное.
Вот думал про память, получается что надо делать 8 банков по 64Кбайта, при применении К565РУ5Д с буквой Д - как вроде самая быстрая, тогда можно сделать так, при включении по умолчанию выбирается ПЗУ, которая начинается с адресов 0000Н и банк 0. А для управления выбором банка использовать порт с регистром и дешифратором. В итоге будет 8 банков по 64Кбайта, всего 512Кбайт. Но надо это всё ещё очень продумать.
Про быстродействие можно не заморачиваться. Это с четырьмя процессорами проблема была. А с одним процессором быстродействия РУ7 хватит более чем.
Оставив в стороне сэмплы, как насчёт операторного синтеза? FM (частотная модуляция) или ее разновидность, фазовая модуляция, более легко реализуемая в цифровом виде.
И отечественная промышленность ведь даже успела испустить аналог импортной микросхемы 4046 под славянофильским наименованием 561ГГ1.
mbojenov
10.09.2012, 08:14
Viktor2312, а почему не хотите посмотреть схему MagicSound от Aleste? вот здесь написано про это http://aleste520.narod.ru/magicsound.html
и здесь http://n64.icequake.net/mirror/valeryia/html/magicsound.html
Если что, схема где то есть и у меня.
С РУ7 проблема не понимаю я как их туда присобачить, так как у нас адрес 16 бит. А у РУ7 18 бит.
Поэтому как-то само напрашивается 8 страниц памяти по 64 Кбайта. Счётчик команд тоже 16 бит. И поэтому великолептно получается если он в своём адресном пространстве вращается 0000Н - FFFFH и не о чём не подозревает, что ему подсунули например 1 страницу памяти, вместо нулевой.
Да, это только страницами и делается. Недостающие адресные биты берутся из регистра порта переключателя страниц. И в целом неважно РУ7 использовать или РУ5 - шина адреса в итоге 18-разрядной получится.
Реализовать я это думаю так, при включении автоматически выбирается 0-страница памяти, в её начальных адресах находится ПЗУ (2Кбайта или 4 Кбайта или столько сколько нам нужно.
У меня вертится чуть другая идея.
C нулевого адреса начинается ПЗУ. Адресом 7FFF заканчивается непереключаемое ОЗУ. Где-то между адресами 0000 - 7FFF находится граница между ОЗУ и ПЗУ - в зависимости от объёма ОЗУ. По адресам 8000-FFFF находится окно, куда отображаются переключаемые страницы по 32 килобайта. Т.е. размер страницы будет 32 килобайта.
Для чего это надо - ПЗУ должно быть доступно вне зависимости от того, какая страница сейчас включена - там программа и она всегда должна выполняться. Также нужен какой-то непереключаемый блок ОЗУ, который нужен для переменных и стека.
Будем исходить из расчёта, что прямо сейчас нам хватит 2кб ПЗУ, но пока неясно что там в итоге получится.
---------- Post added at 13:34 ---------- Previous post was at 13:23 ----------
Оставив в стороне сэмплы, как насчёт операторного синтеза? FM (частотная модуляция) или ее разновидность, фазовая модуляция, более легко реализуемая в цифровом виде.
И отечественная промышленность ведь даже успела испустить аналог импортной микросхемы 4046 под славянофильским наименованием 561ГГ1.
FM-синтез хорош только как дополнение. И это очень хорошее дополнение.
Но простота как правило заканчивается, когда начинаются реальные схемы =)
---------- Post added at 13:37 ---------- Previous post was at 13:34 ----------
Viktor2312, а почему не хотите посмотреть схему MagicSound от Aleste? вот здесь написано про это http://aleste520.narod.ru/magicsound.html
и здесь http://n64.icequake.net/mirror/valeryia/html/magicsound.html
Если что, схема где то есть и у меня.
А похоже мы это устройство и пытаемся изобрести.
И с чего это мы не хотим посмотреть схему? =)
Мне вот интересно - на какую проблему они встали с 580ВТ57... 16 килобайт за один приём это строго говоря не проблема. Меня больше интересует общая пропускная способность в кб/сек.
---------- Post added at 13:44 ---------- Previous post was at 13:37 ----------
По поводу цифрового микшера...
Откопал в одном из подручных справочников про микросхему умножения:
https://sapr.asvcorp.ru/library/detail?comp=5440&tcid=96
Теперь мне интересно, что там имеется в виду под округлением и нецелыми числами.
Вспомнилась ещё одна проблема.
Насколько я помню, в семплах отсчёты кодируются следующим образом:
"Ноль" - 80h
"Один" - 81h
"Два" - 82h
"Минус один" - 7fh
"Минус два" - 7eh
и т.д.
Грубо говоря - вычитается постоянная составляющая и прибавляется 80h.
Поэтому требуется огород для того, чтобы это можно было перемножать и суммировать, иначе совсем не то получится, что требуется. "Огород" пока не придумался.
falanger
14.09.2012, 23:23
Кстати а почему в музплате использовать именно 8080? Тут нужно лучшее быстродействие, используйте 8085 или его советский аналог 1821ВМ85. По командам то-же самое, быстрее и с одним питанием + всякие фичи на борту типа контроллера памяти и т.д.
falanger, на одной из первых страниц поднимался этот вопрос - автор хочет онли вм80.
falanger
19.09.2012, 01:09
Viktor2312, К)КР)580ВМ80А - аналог i8080A. Доработанный но "сколотый". От корней не уйдешь, да.
А 1821ВМ85 еще лучше 580М80А.
всем доброго времени суток. я тут наткнулся на эту темку во время поиска инфы о том как на ВИ53 сваяли АУшный звук.
ух - некропостинга камент будет :)
а почему бы не врубить на канал по ВМ80? они че такие дорогие?
ну да по питанию жрать будет - внешнее питание решит проблему. никто ж не визжит когда на видеокарту надо питалово дополнительное ибо от слота его маловато. кагаварица окно свое овертон распахнул настежь :)
далее - семпловую память - почему б не врубить единую на все процы статику?
ну и будет платка больше самого компутера - помню для БК ктото соорудил контроллер для MFM-RLL винтов - плата вышла размером почти с саму БКшку. но зато ведь работало! :)
и боюсь вы меня щас ногами забьете - но вспомните школьные времена когда сидиромы появились - как мы слушали с ихних задних выходов или с наушниковых музыку? нормальный ведь был звук - а там ведь на некоторых приводах 14битные ЦАПы были. и звучало ведь. а что - сэмплированная музыка обладает таким большим динамическим диапазоном что прям вынь да выложь 16бит дискретизации? не особо замечал. для таких сэмплов надо мегабайтами память мерять а не килобайтами. люди поначалу сидели на 8битных саундблястерах на своих ПэЦэхах и не жужжуали. или на ковоксе 8битном. и ступеньку прекрасно срезал фильтрующий коньденсатор. :)
не я разработчик сего девайса. это раз. два - тема интелей меня не трогает. не спектрумист я.
залез тупо ради поглядеть как дела обстоят по теме ВИ53. поисковик меня сюда и пихнул.
на БК помнится была приставка "менестрель". там кажется были 3 штуки ВИ53. или две - не помню. я и решил поглядеть че-как разузнать. на ютубе увидел демки с вектора. звук зачетный - как с АУшки. интересно стало еще более. вдруг как это типа клон АУшки.
а разработка - это не мое. я попытался сваять аналог 6526CIA на ВВ55 - понял что не осиляю, ибо надо было много мелкой логики навешивать. но не в том главное - главное что 6526 умеет быть программируема побитно - каждый бит порта побитно либо на ввод либо на вывод. побитно, КАРЛ!!! чего себе никогда не позволяла ВВ55, и когда я на сей момент наткнулся в разнице в этих чипах - я стух. могу крупноузловую разработку делать но когда дело касается до подтяжек чего-то к чему-то - я теряю волю и впадаю в катарсис - руки опускаются и мне становится тема неинтересна.
не. я не разработчик. :) но что касаемо принципиальных моментов - от меня идей хоть отбавляй. как в сказке - царь бурлит от затей. ну а Федька - потей. :)
axe_chita
25.09.2015, 19:20
Насколько я помню историю разработки magicsound для aleste то там отказ от пдп контроллера 580 серии в пользу 1810 был именно в маленьком окне в 16 кб 580-го (были отчетливые щелчки при окончании сэмпла каждые 1,5 секунды) и в неустойчивой работе на требуемой частоте проигрывателя, плюс 1810 мог оперировать 1 мб озу. И еще вроде 1810 быстрее программировался (но я могу ошибаться)
Powered by vBulletin® Version 4.2.5 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot