MSD #11
11 марта 2000
  Железо  



    Звуковая карта с прямым доступом
           (DMA Sound Card)



            Немного истории.



     Давным-давно, когда по земле еще ходили пионеры (и ком-
сомольцы), когда пределом мечтания музыканта была электроги-
тара и когда компьютеры только издавали свои первые писки,
уже тогда появились люди, которые задумались - "а почему бы
не заставить компьютер сыграть какую-нибудь мелодию?". И
заставили... С тех пор компьютерная ( под "компьютерной му-
зыкой" часто подразумевают всю синтезаторную музыку, но
здесь подразумевается музыка исполненная только на компьюте-
ре БЕЗ внешних синтезаторов, MIDI и т.п.) стала неизменным
атрибутом игр и демонстраций. Как сказал кто-то из великих:
"хорошая музыка способна поднять тривиальную программу до
уровня неординарной, а отличную до уровня сенсационной". С
развитием компьютеров совершенствовались и методы звукоизв-
лечения. И здесь наметились два основных метода.
     Первый метод - FM-синтез, ведет свое начало от первых
"спикерных" музычек. В основе его - сложение нескольких ко-
лебаний различных форм и частот. Здесь, чем больше складыва-
емых частот (элементарных осциляторов), тем ближе звук к ес-
тественному. В профессиональных синтезаторах используется 32
и более осцилятора на голос. Естественно, такая штука стоит
кучу денег и поэтому в звуковых картах обычно используется
от 1 до 4 осциляторов. Например AY8910/12 использует 3 осци-
лятора прямоугольной формы + огибающая пилообразной, либо
треугольной формы. Кроме того, во многих звуковых картах су-
ществует некоторый набор "инструментов", т.е. таблицы частот
для сложения записанных
 в ПЗУ карты и которыми, зачастую, звучание этой карты и ог-
раничивается. Таковы например Adlib/Sound Blaster для PC или
SEGA Genesis/Megadrive. Достоинствами этого метода синтеза
являются малые объемы памяти для музыки и поток данных, од-
нако набор звуков очень ограничен. Поэтому, все чаще этот
метод вытесняется другим - методом сэмплинга.
     Второй метод основан на проигрывании заранее оцифрова-
ных звуков (sample'ов). Здесь памяти требуется куда больше,
но зато доступны ЛЮБЫЕ звуки. Основные параметры здесь -
разрядность цифроаналоговых преобразователей(ЦАП), количест-
во каналов, частота дискретизации. Стандартом де-факто для
таких карт является AMIGA. В ней имеется 4 восьмибитных ка-
нала с частотой дискретизации 3.54 Мгц. Кроме того, гром-
кость на каждом канале может программно регулироваться от 0
до 64 усл.ед. SoundBlaster/PC и SEGA имеют 1 восьмибитный
канал с частотой дискретизации до 44 кгц и поэтому использу-
ются в основном для воспроизведения оцифрованых эффектов в
играх. Лучшие параметры имеет GUS/PC. Оно имеет 2 шестнадца-
тибитных канала с частотой дискретизации 44 кгц и собствен-
ные процессор и память на плате. Все вышеперечисленные уст-
ройства являются активными, т.е. не требующими процессорного
времени. Кроме этого, существует масса пассивных устройств
типа Covox, т.е. ЦАП на каком-либо порту. Здесь говорить о
каких-то параметрах не имеет смысла, так как звук такой
"карты" сильно зависит от производительности процессора, от
типа микширования, стабильности выборки, программного окру-
жения и т.д. и т.п.
     А что же ZX SPECTRUM ? Пока что мы наблюдаем вялый про-
цесс подключения Covox'ов, которые вряд ли удовлетворят даже
фэнов компьютерного звука. Правда в Питере разрабатывается
звуковая карта General Sound, но пока слышны лишь обещания и
хвалебные оды. Я ни в коей мере не хочу обидеть разработчи-
ков этой карты, но параметры - 4 восьмибитных канала с час-
тотой дискретизации 37.5 кгц вряд ли могут повергнуть амиж-
ников в транс, а писишников в шок. Не спорю, звук может быть
неплохим, но до Амиги, как видим, далеко. Кроме того 11ОкБ
под музыку... маловато будет! К плюсам этой карты относится
полная независимость от Спектрума, но многократно возрастают
требования к встроенному ПО, которое совершенно недоступно
ни для изучения, ни для изменения программистом. Таким обра-
зом, мы видим типично писишный подход к звуку - "вот вам
"черный ящик", игры под него есть, что вам еще нужно?". Од-
нако, пока редко какое-либо заимствование с PC имело успех
на Спектруме (вспомним IS-DOS или CGA-подобные видеорежимы).
     Поэтому одной из основных задач этой разработки явля-
лось максимальное приближение к аппаратуре AMIGA, как к
стандарту на цифровой звук. Опишем более подробно, как Амига
воспроизводит звук. Данные для каждого канала передаются
прямым доступом из памяти. Дискретность выборки составляет
0.28 мкс (что соответствует частоте 3.54 Мгц). Массив пере-
даваемых данных может иметь длину от 2 байт до 128 кб, кроме
того, передача массива может быть зациклена с произвольного
места. Все каналы полностью независимы. Для проигрывания му-
зыки используется прерывание с частотой от 13 до 102 гц, во
время которого выбираются ноты, перепрограммируются каналы и
т.п.
     Как видим, для нормального проигрывания музыки необхо-
дим контроллер прямого доступа к памяти (DMA) и контроллер
прерываний. К сожалению, ни того ни другого в Спектруме нет.
Поэтому автор предлагает следующее устройство. Основное его
назначение - воспроизведение Чх-канальной, 8ми-битной музы-
ки. Те, кого интересуют другие возможности - смотрите раздел
"Перспективы".


               Описание


     Устройство состоит из 3-х функциональных блоков: конт-
роллер DMA, контроллер прерываний, блок ЦАП. Устройство име-
ет 4 независимых, 8-ми битных звуковых канала прямого досту-
па к памяти. Каждый канал имеет 6-ти битный регулятор гром-
кости. Дискретность выборки на канале 0.28 мкс (3.5 МГц).
Это немного отличается от Амиги (3.54 МГц), но и на Амиге
эта величина не постоянна, а зависит от типа видеопроцессора
(PAL или NTSC), во-вторых разница составляет около 1%. Пря-
мой доступ осуществляется во всю память, которая ectx в
Спектруме (128,256,512,1024 кб) и не зависит от порта конфи-
гурации, максимальная длина передаваемого массива 64К. Конт-
роллер прерываний обрабатывает прерывания четырех типов:
окончание цикла прямого доступа, два независимых таймерных
прерывания и стандартное кадровое прерывание.Каждый тип пре-
рывания идентифицируется битом в векторе прерывания, каждый
тип прерывания, в том числе и кадровый, может быть замаски-
рован в регистре маски. По сбросу прямой доступ и все преры-
вания, кроме кадрового, запрещаются.
     Дешифратор портов выполнен на DD1,DD2. Сигналы
CSD,CST1,CST2,CSP и CSI выбирают контроллер DMA, 1й таймер,
2й таймер,регистр банков DMA и регистр масок прерывания.
Сигналы CSV1-CSVЧ выбирают регистры громкости каналов.
     Контроллер прямого доступа DDб вырабатывает необходимые
сигналы запроса шины выдачи 1бти разрядов адреса и выборки
внешнего устройства. DDЗ отключает сигналы RD и WR от конт-
роллера DMA и, совместно с DDЧ.1, формирует сигнал MREQ в
цикле прямого доступа. Разрешение выдачи адреса прямого дос-
тупа указывает сигнал AEN(Adress ENabled).
     DD7 переключает адресные линии для того, чтобы перенес-
ти адреса портов контроллера DMA и обеспечить адресацию че-
рез порт с фиксированной младшей половиной адреса.
     Регистр банков выполнен на DD8.1, DD8.4 и DD9. Поясним
терминологию: обычно банк памяти и страница памяти рассмат-
риваются как эквивалентные понятия. Однако мы будем рассмат-
ривать эти понятия немного по-другому. Страница подразумева-
ет обычную страницу памяти ZX128, но банком мы будем назы-
вать четыре подряд идущие страницы памяти начиная с той, но-
мер которой кратен 4м. Так 0й банк состоит из #10,#11,#12 и
#13 страниц, 3й из #54,#55,#56 и #57, и т.д. ( страницы даны
для ПентагонаS12, для машин с двумя портами управления па-
мятью номера страниц будут задаваться по другому, но общий
принцип остается тем же). Для каждого канала DMA банк памяти
задается независимо.
     Программируемые таймеры DD10, DD11 генерят необходимые
задающие частоты для запроса каналов DMA(каналы 1 и 2) и
прерываний(каналы 3). Все каналы работают во 2м режиме (де-
литель частоты).
     DD12 формирует сигналы записи байта данных в регистр
ЦАП в цикле прямого доступа. Программно регистры ЦАП недос-
тупны.
     Буферный регистр DD13 сохраняет старшую половину адреса
DMA в начале цикла, а затем выдает ее на шину адреса. Обра-
тите внимание на то, что сигналы A14',A15' подаются не на
Z80, а на мультиплексоры ОЗУ.
     DD14 формирует сигнал запроса DMA необходимой длитель-
ности. Т.к. сигнал DRQ необходимо поддерживать активным до
появления подтверждения сигналом DACK, а DD10,DD11 формируют
импульс длительностью 0.28 мкс.
     В связи с тем, что К181OВТЗ7 автозагрузка (в отличие от
AMIGA) возможна только с базового адреса, т.е. невозможно
зациклить sample с произвольного адреса, поэтому для зацик-
ливания sample используется векторное прерывание конца пере-
дачи DMA.
     Контроллер прерываний собран на DDS.6, DD8.2-3,
DDЧ.1-3, DD15-DD19. DD18 - это регистр маски прерываний. Он
позволяет программно разрешать или запрещать отдельные виды
прерываний. DD16 - регистр вектора прерывания. Прерывающее
устройство сбрасывает соответствующий ему бит, затем в цикле
подтверждения прерывания DD17 выдает на шину данных вектор
прерывания, четыре старших бита которого установлены или
сброшены в зависимости от того, какие устройства выставили
запрос на прерывания. Такое решение позволило обойтись без
аппаратного контроля приоритетов. Все прерывания имеют рав-
ный приоритет и при одновременном приходе двух и более пре-
рываний меняется вектор прерывания. (см Программирование)
После подтверждения прерывания регистр вектора очищается
(устанавливается в 1).
     Триггер запроса DD15.2 служит для хранения запроса пре-
рывания. Если в момент прихода прерывания от какого-либо ис-
точника обработка прерываний в процессор запрещена (командой
DI), то триггер запроса сбрасывается в 0 и стоит так, пока
процессору не разрешат обработку прерываний (командой EI) и
только в цикле подтверждения прерывания снова установится в
1. Это необходимо для того, чтобы не пропускать прерывания,
которые приходят в момент, когда их обработка запрещена
(DI). При этом если в периоде запрета пришло два РАЗЛИЧНЫХ
прерывания (необязательно одновременно), то программно это
будет выглядеть как будто два типа прерывания пришли однов-
ременно сразу после команды EI. Все это не относится к кад-
ровому (стандартному) прерыванию, которое имеет ту же дли-
тельность, фазу и т.п., что и раньше. Если какой-либо тип
прерываний замаскирован в регистре маски, то он полностью
игнорируется.


              Подключение


     К сожалению ни один компьютер не имеет возможности
подключить ни устройства с доступом более чем к бЧКБ памяти,
ни устройства перехватывающие INT. Поэтому без паяльника увы
не обойтись... В компьютере необходимо обеспечить возмож-
ность перевода в ТС старших адресных линий A14', A15', A16',
A17', A18'. Здесь указаны не адресные линии процессора, не
выхода регистров конфигурации, а адресные линии, которые не-
посредственно идут на мультиплексоры ОЗУ. В Пентагоне нужно
сделать следующее: 15D14 отрезать от земли и подать на нее
AEN c устройства, A14' подается на 4D14, A15' на 7D14, A16'
на 9D14. На плате расширения до 512К надо сделать следующие
изменения: соединить 7 и 9, 6 и 10, 5 и 11, 4 и 12, 3 и 13
ноги КП12, 15 отрезать от земли и подать на нее AEN, на 1
надо подать AEN, 1 ЛЕ1 отрезать от 5D18 и подать на A17i, на
5D18 подать A17'. INT надо отрезать от 16Z80 и подать на INT
устройства, на 16Z80 подать INT' с устройства.
     Остальные сигналы подаются на соотв. ноги Z80.


            Программирование


     Все порты устройства имеют младший байт адреса #77.
Старшие байты адреса такие
   Контроллер DMA -
#0C,#1C,#2C,#3C,#4C,#5C,#6C,#7C,#8C,#9C,#AC,#BC,#CC,#DC,#EC,
#FC
   Первый таймер - #3D,#7D,#BD,#FD
   Второй таймер - #3E,#7E,#BE,#FE
   Банки каналов - #07,#17,#27,#37
   Громкость каналов - #3F,#7F,#BF,#FF
   Маска прерываний - #F7

     Подробное описание контроллера DMA см. в приложении I.
Для работы со звуком контроллер должен быть запрограммирован
в режиме одиночной передачи, приоритет каналов может быть
как простой, так и циклический.
     Таймеры задают частоты выборки каналов DMA и прерыва-
ний. Каналы 1 и 2 таймеров тактируются частотой 3.SМГц, а
каналы 3 - частотой 1.7SМГц. Каналы 1 и 2 первого таймера
задают частоту на 1 и 2 канале DMA, каналы 1 и 2 второго
таймера задают частоту на 3 и 4 канале DMA. Все каналы тай-
меров должны работать во втором режиме (программирование
таймеров см. Приложение II).
     Регистры банков устанавливают банк памяти, с которым
будет происходить обмен. Регистры банков содержит старшие
биты номера страницы, младшие два бита входят в адрес прямо-
го доступа. Например необходимо передать массив, который на-
ходится в #16 странице с адреса #d8e7. Младшие два бита но-
мера страницы %10, для адреса DMA это будут два старших би-
та. Таким образом получаем банк DMA #01 адрес #98e7. Рис.1
иллюстрирует преобразование номера страницы в адрес и номер
банка для ПентагонаS12 и Профи1024



              ПентагонS12


     #7ffd                  Адрес
     ┌─┬─┬─┬─┬─┬─┬─┬─┐     ┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
 биты│7│6│5│4│3│2│1│0│ биты│f│e│d│c│b│a│9│8│7│6│5│4│3│2│1│0│
     └┬┴┬┴─┴─┴─┴┬┴┬┴┬┘     └─┴─┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┘
      │ └─────┐ │ │ └─────────┐ │ │ │ │ │ │ │ │ │ │ │ │ │ │
      └─────┐ │ │ └─────────┐ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
         ┌─┬┴┬┴┬┴┐         ┌┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┐
 биты    │3│2│1│0│     биты│f│e│d│c│b│a│9│8│7│6│5│4│3│2│1│0│
         └─┴─┴─┴─┘         └─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘
          Банк              Адрес


                Профи1024


 #dffd   #7ffd               Адрес
┌─┬─┬─┐ ┌─┬─┬─┬─┬─┬─┬─┬─┐  ┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
│2│1│0│ │7│6│5│4│3│2│1│0│  │f│e│d│c│b│a│9│8│7│6│5│4│3│2│1│0│
└┬┴┬┴┬┘ └─┴─┴─┴─┴─┴┬┴┬┴┬┘  └─┴─┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┘
 │ │ └───────────┐ │ │ └──────┐ │ │ │ │ │ │ │ │ │ │ │ │ │ │
 │ └───────────┐ │ │ └──────┐ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
 └───────────┐ │ │ │        │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
            ┌┴┬┴┬┴┬┴┐      ┌┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┐
 биты       │3│2│1│0│      │f│e│d│c│b│a│9│8│7│6│5│4│3│2│1│0│
            └─┴─┴─┴─┘      └─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘
             Банк           Адрес

    Рис.1 Преобразование страничного адреса в адрес DMA




     Массив не может пересекать границу 4-х страниц, т.е.
может находиться в #10,#11,#12,#13 страницах, но не может
находиться в #13 и #14 страницах, такие массивы необходимо
передавать за два раза, используя прерывание конца передачи,
или выравнивать по границе 4-х страниц.
     Регистры громкости каналов устанавливают громкость в
пределах от 0 (полное отсутствие звука) до 63 (максимальная
громкость). Регистры громкости имеют разрядность 6 бит, поэ-
тому значение 64 равно 0 в отличие от Амиги, где 64 - макси-
мальная громкость.
     Контроллер прерываний в цикле подтверждения выдает век-
тор прерывания, который указывает какие устройства послали
запрос на прерывание. Вектор прерывания имеет следующую
структуру:
   бит 7 - устанавливается в 1, если пришло кадровое преры-
вание, в противном случае сбрасывается;
   бит 6 - сбрасывается в 0, если пришло прерывание от 2го
таймера, в противном случае устанавливается;
   бит 5 - сбрасывается в 0, если пришло прерывание от 1го
таймера, в противном случае устанавливается;
   бит 4 - сбрасывается в 0, если пришло прерывание оконча-
ния передачи на каком-либо канале DMA, в противном случае
устанавливается. Для того, чтобы определить какой канал за-
вершил передачу необходимо прочесть регистр состояния конт-
роллера DMA;
   биты 3 - 0 всегда установлены в 1.
      Если приходят одновременно несколько прерываний, то
несколько битов устанавливаются соответствующим образом не-
зависимо. Например
   #FF - кадровое прерывание;
   #3F - прерывание от 2го таймера;
   #5F - прерывание от 1го таймера;
   #6F - прерывание конца передачи;
   #BF - кадровое прерывание и 2го таймера;
   #EF - кадровое прерывание и прерывание конца передачи; и
т.д. Вектору #7F не соответствует никакое устройство, но как
показала практика в среднем раз в пять минут такой вектор
"проскакивает" и его тоже необходимо обработать. Ему соот-
ветствует кадровое прерывание, которое приходит в момент вы-
полнения команды EI.
     Регистр маски позволяет маскировать отдельные типы пре-
рывания. Раскладка битов такая:



  7 6 5 4 3 2 1 0
 ┌─┬─┬─┬─┬─┬─┬─┬─┐
 │x│x│x│x│0│1│1│1│
 └─┴─┴─┴─┴┬┴┬┴┬┴┬┘
          │ │ │ └───  разрешает прерывание конца передачи;
          │ │ └─────  разрешает прерывание 1го таймера;
          │ └───────  разрешает прерывание 2го таймера;
          └─────────  разрешает кадровое прерывание;

В отличие от остальных прерываний, кадровое разрешается не
1, а 0.

               Проблемы



     1) Основная проблема К58OВИ5З, которые стабильно не хо-
тят работать в турборежиме с коротким IORQom и имеют макси-
мальную частоту CLK 2МГц. Лучшим решением является примене-
ние импортных 8253, но это жуткий дефицит и в Донецке, и в
Харькове. Что касается ВИ5З, то, как показывает практика,
они, со скрипом, но выдерживают тактовую 3.SМГц. Зато не вы-
носят короткий IORQ на турбо-Пентагоне.
     2) В некоторых компьютерах необходимо обеспечить блоки-
ровку порта #77. (В Скорпионе на этот адрес откликается порт
атрибутов, который лучше всего вырезать совсем).
     3) Теоретически возможна работа карты со 128-м Спектру-
мом, однако практически, для полного раскрытия всех возмож-
ностей нужна машина с объемом памяти не менее 512К. Во-пер-
вых, средний объем музыкальных модулей 120 - 250 Кб и лишь
единицы имеют объем более чем 400К, т.е. вы сможете послу-
шать и использовать 99% готовых модулей; во-вторых, если
встраивать музыку в какие-либо готовые программы, то вся
128-я память битком забивается этими самыми программами, но
лишь единицы используют память свыше 128К (RAMдиски и прочая
резидентная ерунда не в счет); и в-третьих, если предполо-
жить, что Спектрум-платформа будет развиваться, то переход
на модели с памятью >128К неизбежен, а если считать, что
ZX128+BETA DISC+AY предел, то о чем мы здесь с вами говорим.
     4) Для микширования каналов использован простейший ре-
зистивный микшер, но возможно какой-либо активный либо кор-
ректирующий микшер был бы лучше.
     5) Необходимо напряжение -12В (возможно использование
преобразователя такого как в АТМ)


              Перспективы


     Автор понимает, что изготовление и подключение этой
карты связано с достаточно большими трудностями, но это
следствие проблем, которые не решались с прошлого десятиле-
тия. Не смотря на "навороты" в последних моделях (Скорпион,
Профи, Атм), эти вопросы все-таки остались открытыми.
По-этому данная разработка, не только дает отличный звук, но
и указывает пути решения проблем, которые раньше решались
методом "эх, Z80, ухнем!" либо совсем не решались.
     1) Возможно подключение до четырех устройств ввода-вы-
вода. Это могут быт АЦП, дигитайзеры, мультикарты, видеопро-
цессоры и многое другое. Основное преимущество - процессор
полностью разгружен и от операций ввода-вывода, и от ожида-
ния результата. Так "винчестер" подключенный через писишную
мультикарту будет пересылать данные прямым доступом и может
программироваться по собственному прерыванию.
     2) Возможно каскадное подключение еще одного контролле-
ра DMA (+3 микросхемы)
     3) Возможна пересылка память-память.


Схема "DMA Sound Card" находится в приложении,в виде текста.


                           -=-



Other articles:


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Similar articles:
Humor - anecdotes.
Tutorials - coding: the effect of the implementation of "Mirror rotator" (article is intended for quite prepared demo coder).
System - Overview of System Software: Advancer Text Editor v 1.24
Humor from Fido - Diary of a user Vasey.

В этот день...   21 November