Из журнала Adventurer #9,
Ярославская область, г.Рыбинск, 1999



     Иноземцев А. С. aka Stranger
      David Willis (дополнения)


     ЗВУКОВАЯ КАРТА С ПРЯМЫМ ДОСТУПОМ


     Перед  тем,  как  предложить  вашему
вниманию  авторский  текст описания, хочу
сразу  заметить,  что предлагаемая разра-
ботка  не является очередной фантазией, а
уже  существует  во  многих экземплярах и
достаточно  поддержана  софтом.  Так  что
всем,  кто  хочет  сам себе собрать музы-
кальную  карту,  превосходящую по возмож-
ностям  General  Sound ,  и  предлагается
следующая  статья.  В наилучшем положении
находятся  владельцы Пентагонов-512 - для
них  имеется  полное  описание по сборке,
наладке  и подключению. Для подключения к
другим  моделям Спектрума нужно хоть нем-
ного  разбираться  в  организации  памяти
своего компьютера.


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

     Давным давно, когда по земле еще хо-
дили  пионеры (и комсомольцы), когда пре-
делом  мечтания музыканта была электроги-
тара  и  когда компьютеры только издавали
свои  первые  писки,  уже тогда появились
люди, которые задумались: "А почему бы не
заставить  компьютер сыграть какую-нибудь
мелодию?" .  И  заставили...  С  тех  пор
компьютерная  (под "компьютерной музыкой"
часто подразумевают всю синтезаторную му-
зыку, но здесь подразумевается музыка ис-
полненная  только на компьютере БЕЗ внеш-
них  синтезаторов,  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 кгц вряд-ли могут повергнуть
амижников в транс, а писишников в шок. Не
спорю,  звук  может  быть неплохим, но до
Амиги ,  как видим, далеко. К плюсам этой
карты  относится  полная независимость от
Спектрума ,   но  многократно  возрастают
требования  к встроенному ПО, которое со-
вершенно  недоступно  ни для изучения, ни
для  изменения программистом. Таким обра-
зом,  мы  видим типично писишный подход к
звуку  "вот  вам "черный ящик" , игры под
него есть, что вам еще нужно?"  . Однако,
пока  редко какое-либо заимствование с PC
имело успех на Спектруме (вспомним IS-DOS
или CGA-подобные видеорежимы).
     Поэтому одной из основных задач этой
разработки  являлось максимальное прибли-
жение к аппаратуре AMIGA , как к стандар-
ту на цифровой звук. Опишем более подроб-
но,  как Амига воспроизводит звук. Данные
для каждого канала передаются прямым дос-
тупом  из  памяти.  Дискретность  выборки
составляет 0. 28  мкс  (что соответствует
частоте  3. 54 Мгц). Массив  передаваемых
данных может иметь длину от 2 байт до 128
кб,  кроме  того,  передача массива может
быть зациклена с произвольного места. Все
каналы полностью независимы. Для проигры-
вания  музыки  используется  прерывание с
частотой  от 13 до 102 гц, во время кото-
рого выбираются ноты, перепрограммируются
каналы и т. п.
     Как видим для нормального проигрыва-
ния  музыки  необходим контроллер прямого
доступа  к памяти (DMA) и контроллер пре-
рываний.  К сожалению, ни того ни другого
в Спектруме нет. Поэтому автор предлагает
следующее устройство. Основное его назна-
чение   -   воспроизведение  4х-канальной
8ми-битной  музыки.  Те,  кого интересуют
другие   возможности  -  смотрите  раздел
"Перспективы" .

     Описание.

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

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

     Все  порты  устройства имеют младший
байт адреса #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 и прерываний. Каналы 1 и 2 тайме-
ров тактируются частотой 3. 5МГц, а кана-
лы 3 частотой 1. 75МГц. Каналы 1 и 2 пер-
вого  таймера задают частоту на 1 и 2 ка-
нале  DMA,  каналы  1 и 2 второго таймера
задают  частоту  на 3 и 4 канале DMA. Все
каналы таймеров должны работать во втором
режиме.
     Регистры  банков  устанавливают банк
памяти,  с  которым будет происходить об-
мен. Регистры банков содержит старшие би-
ты номера страницы, младшие два бита вхо-
дят  в  адрес  прямого доступа. Например,
необходимо передать массив, который нахо-
дится  в  #16  странице  с  адреса #d8e7.
Младшие два бита номера страницы %10, для
адреса  DMA  это  будут два старших бита.
Таким образом получаем банк DMA #01 адрес
#98e7. Рис. 1 иллюстрирует преобразование
номера страницы в адрес и номер банка для
Пентагона-512 и Профи-1024 :


     Пентагон-512

     #7ffd            Адрес
+-+-+-+-+-+-+-+-++-+-+-+-+-+-+-+-+    +-+
|7|6|5|4|3|2|1|0||f|e|d|c|b|a|9|8|....|0|
+++++-+-+-++++++++-+-+++++++++++++    +++
 | +-----+ | | +----+ | | | | | |      |
 +-----+ | | +----+ | | | | | | |      |
    +-+++++++    +++++++++++++++++    +++
    |3|2|1|0|    |f|e|d|c|b|a|9|8|....|0|
    +-+-+-+-+    +-+-+-+-+-+-+-+-+    +-+
       Банк           Адрес


     Профи-1024

 #dffd      #7ffd            Адрес
+-+-+-++-+-+-+-+-+-+-+-++-+-+-+-+-+-+ +-+
|2|1|0||7|6|5|4|3|2|1|0||f|e|d|c|b|a|.|0|
++++++++-+-+-+-+-++++++++-+-+++++++++.+++
 | | +----------+ | | +----+ | | | | . |
 | +----------+ | | +----+ | | | | | . |
 +----------+ | | |      | | | | | | . |
           +++++++++    +++++++++++++.+++
           |3|2|1|0|    |f|e|d|c|b|a|.|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) Основная проблема - К580ВИ53, ко-
торые  стабильно не хотят работать в тур-
борежиме с коротким IORQом и имеют макси-
мальную частоту CLK 2МГц. Лучшим решением
является  применение  импортных  8253, но
это  жуткий  дефицит.  Что касается ВИ53,
то,  как  показывает  практика,  они,  со
скрипом, но выдерживают тактовую 3. 5МГц.
Зато не выносят  короткий 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)  Возможна  пересылка   память-па-
мять.

     Что касаемо платы... Это самый боль-
ной  вопрос. Платы нет... Себе я делал на
"рыбе" ( "слепыше" , "самолете" и т. д) и
это  понятно.  Если у вас есть какие-либо
предложения  на эту тему, они будут с ра-
достью  выслушаны. Может найдется кто-ни-
будь,  кто  сможет  развести  плату на 40
корпусов для всех спектрумистов, а   жур-
нал Adventurer ее опубликует.

     Еще  раз  повторяю,  карта ПОЛНОСТЬЮ
НЕЗАВИСИМА  ОТ  ПОРТА РАСШИРЕННОЙ ПАМЯТИ.
Т.  е.  хоть у вас Скорпион , хоть Пента-
гон ,  хоть  что  еще  - все едино, т. к.
карта  имеет  свои  банки памяти по 64К и
свои  регистры  для  доступа  к  ним. Но!
Прежде чем что-то играть, надо это что-то
загрузить.  И тут уже это забота програм-
мы,  как  растасовать по нужным страницам
sample data. Естественно, программа долж-
на  переключать  эти  самые  страницы для
загрузки  данных, и, естественно, на каж-
дой машине это делается по разному. После
загрузки  порт  конфигурации  становится,
теоретически,  ненужным,  и проигрыватель
может  использовать только 48-ю память (и
той  надо около 6К для проигрывателя (по-
ка) и по килобайту на каждый паттерн).
     Теперь для миллиционеров, таможенни-
ков  и  налоговой полиции... ЭТО АКТИВНАЯ
ЗВУКОВАЯ   КАРТА!!!  Это  не  COVOX ,  не
SOUNDRIVE и не что-то еще в том же  духе.
Музыка  проигрывается  ПО  ПРЕРЫВАНИЯМ!!!
Проигрыватель  занимает  в  среднем  1000
тактов  на  INT  и в пике до 9000. Всякие
sound  fx  проигрываются вообще по фону и
до четырех штук сразу.
     Что касается софта...
     Имеется   полноценный  проигрыватель
амижных MOD 'ов (четыхканальных). Поддер-
живаются  все  функции  и команды, MS-DOS
диски 720 и 800 КБ, Kempston mouse и плюс
еще 460 КБ свободной памяти (на 512-х ма-
шинах).  Есть  пара  игрушек. Адаптирован
редактор  DIGITAL STUDIO v1. 12 , но это,
понятно, не то, хотя лучше всего, что по-
ка есть. Пишется полноформатный редактор.
По интерфейсу это будет похоже на Digital
Studio ,  а  по  концепции  на ProTracker
( ZX-SPECTRUM ). Возможен выход некоторых
утилит, которые затем войдут в редактор.

     О  качестве  звука  можно  не беспо-
коиться  звук на уровне, и на очень высо-
ком. Если сравнивать с писишными картами,
то  могу уверенно сказать - только AWE 32
приблизительно  дотягивает до уровня моей
карты.  Все  остальное  - Sound Blaster ,
Sound Blaster Pro , Vibra 16 (не говоря о
китайских Ski Rocket , Miss Melody и др.)
звучит ОЧЕНЬ значительно хуже.




      Сборка, подключение и отладка
             звуковой карты.

     К  сожалению,  ни  один компьютер не
имеет возможности подключить ни устройст-
ва  с  доступом более, чем к 64КБ памяти,
ни  устройства, перехватывающие INT. Поэ-
тому без паяльника, увы, не обойтись... В
компьютере  необходимо обеспечить возмож-
ность перевода в третье состояние старших
адресных  линий  A14',  A15', A16', A17',
A18'.  Здесь  указаны  не  адресные линии
процессора,  не выходы регистров конфигу-
рации,  а  адресные линии, которые непос-
редственно идут на мультиплексоры ОЗУ.

     К  Пентагону карта подключается сле-
дующим  образом:  Сигналы  D0..  D7, A0..
A15,  -MREQ,  -IORQ,  -RD,  -WR,  -BUSRQ,
-BUSAC,  -INT', -M1, -RES берутся прямо с
Z80.

     Сигнал INT разрывается:

                  16|-INT   |
------+..X..+-------|       |
      |     |       |       |
      |     |       |       |
  +---+-----+---+   |    Z80|
  | -INT  -INT' |   +-------+

     В  Пентагоне  25  нога  Z80 (-BUSRQ)
соединяется  с  +5В через резистор 10Ком.
Резистор  можно  оставить,  а если 25/Z80
напрямую  идет  на +5В, то ее нужно отор-
вать оттуда.
     CLK1  (3.  5  MHz)  берется с 8 ноги
D1;
     CLK2 (1. 75 MHz) - с 11D2;
     Сигнал  AEN вместо земли подается на
15D61,  оттуда  же  (D61) берутся сигналы
A14', A15', A16' (4, 7 и 9 ноги соотв.)

     На  плате  расширения  до  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' с устройства.
     Для  большей  ясности  привожу схему
изменений  на  ПЛАТЕ  РАСШИРЕНИЯ ДО 512к.
Изменения  нарисованы  двойными  линиями,
проводники,  обозначенные "x", необходимо
разорвать,  сигналы в скобках подаются со
звуковой  карты, остальные - с платы Пен-
тагона .  На самой плате компьютера ника-
ких  изменений не делается, кроме подава-
ния AEN (прямого) на 15DD61 вместо земли,
и разрезания INT'а.
     Что    касается    других    моделей
ZX-SPECTRUM ,  то  у меня нет возможности
дать готовые рецепты, по причине отсутст-
вия  принципиальных  схем. Но принцип ос-
тается  тот-же - нужно обеспечить возмож-
ность  перевести  в  третье состояние ВСЮ
шину   адреса   (не  только  процессорные
A0-A15, но и адреса РАСШИРЕННОЙ СВЫШЕ 64К
памяти,  которые  идут  на МУЛЬТИПЛЕКСОРЫ
ОЗУ). К сожалению, этому мешают различные
схемотехнические извращения. Так на схеме
Скорпиона  (?), которую я мельком видел в
одной  из  ZX-РЕВЮ 'шек,  на  контроллере
расширенной  памяти  стояла  КП16..  Кому
пришло в голову ее поставить? Ее придется
выкусить,  выбросить  и  поставить  на ее
место КП11. И только после этого появится
возможность   перевести   адресные  линии
A14',  A15', A16' и A17' в третье состоя-
ние.
     Еще  об изменениях на плате расшире-
ния  до 512 Кбайт. Они даны для варианта,
который называется "Схемы от В. М. Г. вы-
пуск  2.  Расширение  ОЗУ  до 512 Кбайт в
компьютерах с общим полем памяти" . К со-
жалению,  единственное  достоинство этого
варианта  -  простота. Эта схема (512 кб)
формирует два адреса A17' (идет с 12 ноги
ЛЕ1 и обозначается, как A9') и A18' (идет
с  4 ноги ЛЕ1 и никак не обозначаясь идет
на 12 ногу КП12).
     Пока  нет  DMA,  все идет хорошо, но
как  только  появляется DMA, появляются и
проблемы.
     В  цикле  прямого  доступа  звуковая
карта  выставляет  на  линиях  A0... A13,
A14'...  A18'  свой  19-битный адрес (что
позволяет  ей  адресовать 512 Кбайт), при
этом  на  линии  AEN  появляется  уровень
лог. 1 (на -AEN соответственно лог. 0). В
это время процессор переводит шину адреса
в  третье состояние, а линию A14'... A18'
нужно перевести в т. с. "вручную".
     Для  A14'... A16' это сделать просто
DD61  в  ПЕНТАГОНЕ  (КП11) имеет т. с., а
вот  на плате расширения памяти стоят ЛЕ1
без  т. с., вот и приходится извращаться.
A17'просто  "разрывается" на ЛП8 в звуко-
вой  карте,  а  для переключения A18' ис-
пользуется  вторая секция КП12 платы рас-
ширения.  Она полностью повторяет первую,
кроме  того,  что  A18' приходит с карты.
AEN  (прямой) подается на 15 КП12, а -AEN
(инверсный) на 1 КП12.

     Всего  на  карту идет 44 управляющих
сигнала + 4 провода на питание + 2 прово-
да  (звук  с  AY),  а  выходит  3 сигнала
(AidioL,  AudioR,  GND). На SC желательно
поставить  разъем типа СНП-64, и все сиг-
налы подавать через него.


     Как отладить звуковую карту.

     Сначала      подключаются     только
DD21-DD28,  DA1-DA12. Вместо /CSC1-/CSC4,
/CSV1-/CSV4 подаются сигналы с доп.  мик-
росхемы  555ИД7, которая подключается та-
ким образом:

                +----+----+
         A4 --1-+ A0 | Q0 +-15- /CSC1
         A5 --2-+ A1 | Q1 +-14- /CSC2
         A6 --3-+ A2 | Q2 +-13- /CSV1
                +----+ Q3 +-12- /CSV2
      /IORQ --4-+ V1 | Q4 +-11- /CSC3
        /WR --5-+ V2 | Q5 +-10- /CSC4
 A7 или GND --6-+ V3 | Q6 +-9-- /CSV3
                |    | Q7 +-7-- /CSV4
                +----+----+

     После  чего  у  вас  появится "Super
Sound  Drive" , т. е. "Sound Drive" + ре-
гистры громкости (РГ) на каждом канале.
     Порты будут такие:
     Каналы - #0F, #1F, #4F, #5F
     РГ - #2F, #3F, #6F, #7F
     Это первая отладочная схема (если не
нравится,   что   она   будет   пищать  в
TR-DOS 'е,  то на 4 ногу ИД7 вместо /IORQ
подать  /OIORQ (с 6DD85 на плате ПЕНТАГО-
НА ).
     После  сборки  можно  протестировать
каналы такой программой на BASIC 'е:

     10 LET C=15: LET V=47: REM 1й канал
     20 FOR I=0 TO 6: READ A
     30 FOR J=0 TO 7: LET B=2^J: PRINT A,
B: OUT V, A
     40 IF INKEY$ = "" THEN OUT C, B: OUT
C, 0: GO TO 40
     50 NEXT J: NEXT I
     60 DATA 0, 1, 2, 4, 8, 16, 32

     Набираем,  запускаем и слушаем. Звук
обязательно  должен  быть, если оба числа
отличны от 0. Если одно из чисел на мони-
торе  равно 0, то обязательно должна быть
тишина.
     Для  2-го  канала  подставляем C=31,
V=63 и т. д. Тут, я надеюсь, ничего слож-
ного нет.
     Далее,   отпаиваем   временную  ИД7,
впаиваем DD1 (кроме  выв. 12, 15), DD4.1,
DD4.2,  DD10  (кроме  выв. 10,  13,  17),
DD11 (кроме выв. 10, 13, 17).
     Набираем  отладочную  программу   на
BASIC 'е:

     10 LET C = 64887: LET  W = 52: LET
P=15735: LET F=100
     20 OUT C, W: OUT P, F-256*INT (F/256
): OUT P, INT (F/256)
     30 PRINT AT 0, 0; IN (P)+256*IN (P):
IF INKEY$="" THEN GO TO 30

     После  запуска программы на мониторе
должны  замелькать  цифры  от 0 до 100, а
если есть осциллограф, то на 10DD10 долж-
ны  наблюдаться  импульсы  с  частотой 35
кГц.

     Затем проверяются остальные пять ге-
нераторов. Для этого в 10 строке задаются
такие параметры:

C=64887, W=116, P=32119; импульсы 13DD10
C=64887, W=180, P=48503; ---"---  17DD10
C=65143, W=52,  P=15991; ---"---  10DD11
C=65143, W=116, P=32375; ---"---  13DD11
C=65143, W=180, P=48759; ---"---  17DD11

     Параметр F определяет частоту выход-
ных  импульсов,  она  равна 3. 5МГц/F (на
17х выв. она равна 1. 75/F).
     Подавайте разные значения F (от 1 до
65535)  и убедитесь, что частота меняется
соотвственно. Да, если у вас К580ВИ53, то
все это нужно делать при ОТКЛЮЧЕННОМ тур-
бо-режиме.  Тут  ничего  не поделаешь, не
хочет 580 серия работать в турбе и все...
Единственный  выход - это найти импортные
8253 (с любыми цифровыми и буквенными ин-
дексами) или на крайний случай 1810ВИ54.

     Далее  паяются DD2, DD3, DD4.4, 15 и
12  ноги   DD1,  DD5.1-DD5.5,  DD6,  DD7,
DD8.1, DD8.4,  DD9, DD12,  DD13, DD14, 10
и  13 ноги DD10 и DD11. Проделываются из-
менения в компьютере (кроме /INT).
     После  чего  включайте  компьютер  и
смотрите,  заработал  ли он. Если нет, то
смотрим сигналы AEN и /AEN. На AEN должен
быть стабильный лог. 0, на /AEN - лог. 1.
Если  все  так и есть, то что-то напутано
на плате расширения до 512 Кбайт.
     На /BUSRQ должен быть лог. 1
     A17'   должен   быть  таким,  как  и
A17'i.
     Остальные  сигналы,  которые идут  в
компьютер, не должны измениться.
     Ну  ладно, обычно все сразу начинает
работать с вероятностью 99%.
     Дальше  примеры пойдут на ассемблере
так проще.
     Проверяем наличие контролера DMA:

     LD BC,#8C77
     XOR A
     OUT (C),A
     LD B,#0C
     LD DE,11111
     OUT (C),E
     OUT (C),D
     IN A,(C)
     CP E
     JR NZ,ERR
     IN A,(C)
     CP D
     JR NZ,ERR
     JP OK  ;  все  в  порядке
ERR  .... ; ошибка, надо смотреть DD1,
          ; DD3, DD4, DD6

     Следующий  этап  -  тестовый цикл. В
этой программе я условно дам сразу 4 зна-
чения  для  некоторых EQU-операторов, они
соотв.  4  каналам.  Сначала подставляете
первые значения, затем вторые и т. д.

     LD BC,TCR
     LD A,TCW
     OUT (C),A
     LD BC,TDR
     LD HL,10
     OUT (C),L
     OUT (C),H
     LD BC,#8C77
     XOR A
     OUT (C),A
     LD BC,#BC77
     LD A,DCW
     OUT (C),A
     LD BC,ADR
     LD HL,#8000
     OUT (C),L
     OUT (C),H
     LD BC,LNR
     LD HL,#100
     OUT (C),L
     OUT (C),H
     LD BC,#FC77
     LD A,MSK
     OUT (C),A
     RET
TCR  EQU #FD77; #FD77; #FE77; #FE77
TCW  EQU #34;   #74;   #34;   #74
TDR  EQU #3D77; #7D77; #3E77; #7E77
DCW  EQU #50;   #51;   #52;   #53
ADR  EQU #0C77; #2C77; #4C77; #6C77
LNR  EQU #1C77; #3C77; #5C77; #7C77
MSK  EQU #0E;   #0D;  #0B;    #07
         --+--  --+--  --+--  --+--
           |      |      |      |
  1 канал -+      |      |      |
  2 канал --------+      |      |
  3 кахал ---------------+      |
  4 канал ----------------------+

     Запускаете программу, компьютер дол-
жен устойчиво работать, но при этом долж-
но несколько, довольно заметно, снизиться
быстродействие (более, чем на четверть).
     На 7 и 10 ногах ВТ37 должны быть им-
пульсы с частотой 350 кГц.
     Если  замедление  есть,  то  они там
точно есть. Если нет, то надо смотреть.
     Если после запуска компьютер сбрасы-
вается, или виснет, или память заполняет-
ся  ерундой,  то  надо  смотреть на плату
расширения 512 Кбайт.
     Все  это надо протестировать 4 раза,
для  каждого  канала  отдельно.  Если все
нормально,  то  можно  пробовать  извлечь
звук:
     LD HL,#8000
M1   LD (HL),L
     INC L
     JR NZ,M1
     LD BC,TCR
     LD A,TCW
     OUT (C),A
     LD BC,TDR
     LD HL,120
     OUT (C),L
     OUT (C),H
     LD BC,#8C77
     XOR A
     OUT (C),A
     LD BC,#CC77
     OUT (C),A
     LD BC,#BC77
     LD A,DMW
     OUT (C),A
     LD BC,PGR
     LD A,0
     OUT (C),A
     LD BC,ADR
     LD HL,#8000
     OUT (C),L
     OUT (C),H
     LD BC,LNR
     LD HL,#FF
     OUT (C),L
     OUT (C),H
     LD BC,VLR
     LD A,#3F
     OUT (C),A
     LD BC,#FC77
     LD A,MSK
     OUT (C),A
     RET
DMW  EQU #58;   #59;   #5A;   #5B
PGR  EQU #0777; #1777; #2777; #3777
VLR  EQU #3F77; #7F77; #BF77; #FF77
TCR  EQU #FD77; #FD77; #FE77; #FE77
TCW  EQU #34;   #74;   #34;   #74
TDR  EQU #3D77; #7D77; #3E77; #7E77
ADR  EQU #0C77; #2C77; #4C77; #6C77
LNR  EQU #1C77; #3C77; #5C77; #7C77
MSK  EQU #0E;   #0D;   #0B;   #07
         --+--  --+--  --+--  --+--
           |      |      |      |
  1 канал -+      |      |      |
  2 канал --------+      |      |
  3 кахал ---------------+      |
  4 канал ----------------------+

     После  запуска должен зазвучать звук
с  частотой 114 Гц напоминающий огибающую
C  на  AY,  а на 12DA5 должен быть сигнал
вот такой формы:

     /| /| /| /| /|     |\ |\ |\ |\ |\
    / |/ |/ |/ |/ | или | \| \| \| \| \

     Звук  должен быть абсолютно чистым и
не  меняться  в  зависимости от того, что
делает процессор.
     Если  звук  искажен, то возможно  не
впаяны R1 и R2.
     Если  звук  напоминает беспорядочное
пищание,   то  надо  смотреть  DD7,  DD9,
DD13.
     Если  звука  нет  вообще, и на 12DA5
тоже  нет  сигнала, то надо смотреть DD3,
DD4, DD12.
     Если  на  12DA5 есть нормальный сиг-
нал, то надо смотреть DD2.

     После того, как будут отлажены все 4
канала, будет работать адаптированный ре-
дактор Digital Studio .

     Теперь можно собрать все остальное.

     О  тестировании контроллера прерыва-
ний расскажу в следующий раз.

     Автор  этой  звуковой карты и ПО для
нее,  а  также описания - Иноземцев А. С.
aka Stranger .
     Подготовил  эту статью из разрознен-
ных  источников  специально  для  журнала
Adventurer   -  Чупак  Р.  В.  aka  David
Willis .

     P.  S.  Если кто-нибудь добьется ка-
ких-либо успехов  в  изготовлении карты -
поделитесь с народом о том, с какими глю-
ками вы сталкивались в процессе подключе-
ния. Потому что сам себе я собрал на кар-
тоне.  Карта  играет,  но глючно - сэмплы
проигрываются  не до конца, а обрываются,
когда  захотят. Надеюсь, сообща мы сможем
преодолеть  запары.  Пишите  обо всем мне
или в Adventurer . Мой адрес:

     320130
     Украина, Днепропетровск,
     Донецкое шоссе, д. 97а, кв. 25.
     Чупаку Роману

     тел. (0562) 725-83-69


***  SPECCY RULEZ FOREVER AND EVER !  ***




Вторая версия схемы.
(усовершенствован контроллер прерываний)

Внимание, инверсные сигналы обозначаются
маленькими буквами.
DD1, DD2:  555ИД7;   DD3:  555ЛП8;
DD4, DD20: 555ЛИ1;   DD5:  555ЛН1;
DD6: 1810BT37;       DD7:  555АП4;
DD8: 555ЛА3;         DD9:  555ИР26;
DD10,DD11:  580ВИ53; DD12, DD19: 555ЛЛ1;
DD13,DD17:  555ИР22; DD14, DD16: 555ТР2;
DD15: 555ТМ2;        DD21-DD24: 555ИР23;
DD18: 555ТМ8;        DD25-DD28:  555ТМ9;
DA1-DA4,DA9-DA12:  572ПА1;
DA5-DA8:  КР140УД20