(c) иноземцев а. с. aka stranger; (c) david willis (дополнения)

звуковая карта с прямым доступом

скачать схему в zipе

перед тем, как предложить вашему вниманию авторский текст описания, хочу сразу заметить, что предлагаемая разработка не является очередной фантазией, а уже существует во многих экземплярах и достаточно поддержана софтом. так что всем, кто хочет сам себе собрать музыкальную карту, превосходящую по возможностям 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'а.

                       2+--+
6DD63----------------o--|1 |1
                     | 3|  O--+x+--к 5D18
                     | +|  |  | |
     /    1K         | |+--+  | +=к(A17')
 +--/ --o-XX-->+5B   | | ЛЕ1  +==к(A17'i)
 +      |            | |
   КД522o------------+-+-+       ТМ2
___     |  1+-+--+-+ | | |   13+-+--+-+
RES-|<--o---OR|TT| | | | +-----OR|TT| |9
           2| |  |Q+ | |     12| |  |Q+-+
D6 ---------|D|  | | | |  D7---|D|  | | |
           3| |  | | | |     11| |  | | |
13DD64-o----|C|  |-|6| | +-----|C|  |-| |
       |   4| |  |Q+-+-+ |   10| |  |Q+ |
       |  +-OS|  | | |   |  +--OS|  | | |
       |  | +-+--+-+ |   |  |  +-+--+-+ |
       |  +->+5B     |   |  +-->+5B     |
       +-------------+---+              |
                     |                  |
+--------------------+                  |
|                                       |
| +-------------------------------------+
| |
| |                  КП12
| |             10+--+--+--+
| |            +--|B0|MS|  |
| |    ЛЕ1     +11|  |  |  |9
| |  5+--+   B14--|B1|  |YB+---+
| +---|1 |4     12|  |  |  |   |
|    6|  O--------|B2|  |  |   |
+-----|  |      13|  |  |  |   |
      +--+38DD13--|B3|  |  |   |
      (AEN)====+15+--|  |  |   |
              x+--OSB|  |  |   |
              + 14+--|  |  |   |
         C14------|0 |  |  |   |
                 2|  |  |  |   |
         C23------|1 |  |  |   |
                 6+--|  |  |   |
              +=--|A0|  |  |   |
             -+- 5|  |  |  |7  |
     B14========--|A1|  |YA+-==|
                 4|  |  |  |   |
  (A18')========--|A2|  |  |   |
                 3|  |  |  |   |
  38DD13========--|A3|  |  |   |
    ___          1+--|  |  |   |
   (AEN)========--ОSA|  |  |   |
                  +--+--+--+   |
         НА 1-Е РУ7  <---------+

что касается других моделей 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 !  ***