Эта статья про DMA UltraSound Card была опубликована в эхо-конференциях Fido и ZXNet в конце 90х годов, приводится без изменений:
| ~Звук-это колебания воздуха, которые колышат наши уши и через них воспринимаются мозгом, конечно если он у вас есть.~ А.Иноземцев |
Hi, all!
* * *
Т.к. статья была написана еще в прошлом столетии и с того момента многое изменилось, то в тексте я произвел некоторые коррективы, а в остальном идея осталась неизменной...
* * *
Эту статью меня побудили написать слухи упорно ходящие (бродящие) по просторам нашей необьятной родины. Итак что такое DMA Ultrasound Card (да-да, DMA, а не Direct Sound). Начнем с ее звуковых возможностей:
- Число каналов: 4
- Разрядность, бит: 8
- Уровень рег. громкости: 0-63(6 bit)
- Частота контроллера ПДП: до 3.5 МHz (НЕ КНz!)
- Максимальный размер сэмпла: 64кб(т.к. DMA видит страницы не по 16кБ, как Z80, а по 64кБ!)
Вообще длина сэмпла не ограничена, она просто разбивается на отрезки кратные 64кБ, а потом они проигрыватся попорядку.
Программится карта ОЧЕНЬ легко, все что нужно это закинуть в соответцтвующие порты номер банка, в котором лежит сэмпл, его адрес в банке, длину, громкость, параметр RATE и разрешить работу программируемого канала. Чтобы потом не говорили, что мы такие сякие не дали примеров программинга, мы приводим готовые процедурки. Итак, погнали:
1. Опрос наличия карты.
TEST xor a ;\
ld bc,#dc77 ; > сброс DMA
out (c),a ;/
ld b,#0c ;берем 16 битный порт (регистр адреса)
ld de,#1234 ;кидаем
out (c),e ;в него
out (c),d ;любое число
in a,(c) ;считываем его из порта
cp e
jr nz,noDMA ;сравниваем его с закидываемым
in a,(c)
cp d
jr nz,noDMA ;если не оно, то DMA absent
present -------- ;иначе-приятного вам прослушивания!
noDMA -------- ;все понятно.
2. Проигрывание сэмпла
Mode equ #48 ;0-й канал, чтение памяти, без автозагруз-
;ки, увеличение адреса, простой доступ по запросу
Rate equ 16 ;частота выборки в кГц
Bank equ 0 ;0-й банк
Adres equ 0 ;адрес в формате DMA(т.е. если сэмпл лежит
;в 16-й странице компа, то для DMA будет
;адрес-#0000,в 17-#8000 и т.д. до #ffff)
Len equ #2000 ;длина сэмпла 8кБ
Volume equ 63 ;громкость 0-63
Mask equ 0 ;маска для канала
PLAYER ld bc,#8c77 ;установка общего
sub a ;режима(один раз
out (c),a ;после сброса).
ld b,#fd ;устанавливаем режим первого
equ 63 ;громкость 0-63
Mask equ 0 ;маска для канала
PLAYER ld bc,#8c77 ;установка общего
sub a ;режима(один раз
out (c),a ;после сброса).
ld b,#fd ;устанавливаем режим первого
;программится режим
ld a,Mode ;канала
out (c),a ;DMA.
ld a,Bank ;программится банк
ld b,#07 ;DMA для
out (c),a ;первого канала.
ld hl,Adres ;устанавливаем
ld b,#0c ;начальный
out (c),l ;адрес
out (c),h ;сэмпла.
ld hl,Len ;длина
ld b,#1c
out (c),l ;сэмпла.
out (c),h
ld a,Volume ;устанавливаем
ld b,#3f ;громкость
out (c),a ;звучания.
ld a,Mask ;разрешаем
ld b,#ac ;работу
out (c),a ;первого канала.
ret
Теперь можете творить все что захотите, а sample будет играть по фону пока не сыграет все 8кБ. Можно зациклить воспроизведение, нужно всего лишь установить 4 бит в байте Mode. Параметры этого плейера устанавливают, что сэмпл грузится по адресу #c000 страницы #10.
Чаще всего возникают вопросы (споры) о частоте дискретизации, обьясню подробно: м\с 8237A, 8237A-4, 8237A-5 (1810ВТ37) может работать с максимальной частотой выборки 3,5MHz (7MHz некоторые модификации), найти такое применение в области звука весьма сложно, т.к. максимальная частота дискретизации .wav 48KHz. Поэтому во всех характеристиках, связанных со звуком, пишется 48KHz. Надеюсь с этим вопросом разобрались.
Принцип работы основан на прямом доступе к памяти (DMA). Помимо звуковых возможностей устройство можно использовать как акселератор при операциях с блоками, т.к. 8237 имеет команду аналогичную ldir которая выполняется в 2 раза (в 4раза при 7MHz) быстрее z80. Отсюда следующие выгоды:
- пересылка блока память-память;
- заполнение адресного пространства байтом.
Т.к. у 8237 размер страницы 64кб появляется возможность пересылать данные для работы z80 без заморочек со страницами. Пересылка блока возможна в том случае, если имеются 2 свободных канала. В устройстве помимо 8237 юзаются два таймера 8253, 8254 (580ви53). Каждый таймер имеет по 3 канала, всего 6, из них 4 закреплены за звуковыми каналами. Остальные 2 канала программер может использовать по своему усмотрению, для получения прерываний 30...150 Гц.
Количество адресуемой памяти звуковой картой составляет 1Мб, но его можно увеличить до 16Мб, добавив дсего 1 мелкосхему.
Если изменять частоту выборки, то можно програмно выставить любую скорость компа ( 50%...100% скорости), т.е. можно выставить любой INT. Я вот лицезрел дему ADRINALIZ со скоростью 65% от номинальной - круто!!! Если вы скажете, что с практической точки зрения это бесполезно, то ошибетесь! Однажды мне прислали газетку Impulse (и некоторые другие проги из Беларуси), так там стояла защита, которая глючила на пентагонах (видите ли инт слишком длинный у них
), так вот я имел опыт лицезреть т.н. черный экран смерти, но меня спасла DMA с ее уникальным явлением тормоза и я все же смог запутить эти программы.
Проигрывание .mod ведется по прерываниям, реального времени у проца DMA Sound Card забирает 1000 тактов за INT(9000 в пике). При использовании устройства в качестве ускорителя можно написать scroll всего экранa за INT +25000 тактов проца свободно, а при турбе 8237 scroll+ мультиколор всего экрана + 10000 тактов проца свободно. Еще одна возможность DMA Ultrosound Card - проигрывание с винта .wav в реальном времени с CD качеством, стерео 44кHz, не ограниченной длины. Ну а слушать . mod и одновременно работать с ВГ93 вообще без проблем, причем ни о каких тормозах и речи идти не может! Т.к. если вы сделали DI, а пришло прерывание то оно не пропадает, а ждет когда вы сделаете EI. Ну не круто ли? Т.к. проигрывание .wav ведется по прерываниям и есть возможность получать прерывания с различной частотой, то можно проигрывать звук в формате аналогичном MPEG'у (ADPCM и прочие), благо свободного времени у проца на распаковку хватает (теоретические разработки уже ведутся). Т.к. время распаковки 16кил MP3 на зетнике занимает до 20 минут, то такой формат нам не подходит...
Теперь о вопросе с торможением проца картой: если бы был .wav с частотой дискретизации 1.75MГц то он бы при проигрывании тормозил проц на 50%. Те,кто хоть чуть-чуть знаком с арифметикой может прикинуть сколько времени у проца займет проигрывание .wav 48кГц (примерно 3-5%). Мелькала идея увеличения тактовой у DMA до 12-14МГц. Ничего путного не получится. В области воспроизведения звука никакого выигрыша не будет, т.к. сэмпла с частотой дискретизации 14000кГц не существует, а что касается использования как ускорителя, то операция пересылки блока будет занимать 1-2 такта. Но всегда есть ~но~ - выдержит ли память? 565ру7 не выдержат однозначно, а переводить всю память на симы - и возни многовато и цена. А будет ли от этого реальный выигрыш - ни кто не знает. Вполне достаточна тактовая 7МГц и овцы целы и волки сыты. Единственная доработка,которую можно приветствовать - подключение ~ведомого~ контроллера ПДП 8237, с целью увеличения числа каналов до 7(4-звуковых и 3-для обслуживания периферийных устройств как на пц).
Что касается эмуляции generala, sound drive, ay-это возможно как аппаратно, так и програмно. Кто-то предлогал добавить в карту проц z80 или аналогичный, своей памяти и тд. Отвечу сразу: ничего путного не выйдет, будем иметь некий симбиоз general sоund с прямым доступом в свою же память. Мне кажется, что это бессмысленно (кто-нибудь видел на писюке Sound Blaster + Pentium III?), т.к. загруженность проца будет не более 10-15%. Никакой речи о дешевизне по отношению к GS после такой доработки идти не может,т.к. процессор потянет за собой и ПЗУ,и дополнительную логику. Наибольший плюс этой карты- независимость от ПЗУ, в отличие о general sound, я не сомневаюсь, что глюков в ПЗУ generala хватит до следующего тысячилетия.
Теперь о сборке карты: схема действительно большая, но ничего сложного в повторении нет. Сборка производится постепенно. Существует методика сборки и отладки карты, где очень подробно рассказано как, что и где паять, куда тыкать и на что нажимать. Приведены всевозможные тесты. Для отладки необходим только логический пробник на одной мелкосхеме (схема которого приведена там же). Вполне возможно собрать карту за 3-4 недели.
Как-то в эхе мелькала мысль, что ~...про граф сопр автор, не знает...~, это не так, уж кому как не автору знать об этом, если он для этого вставил мелку DD12(см. схему, если есть),без нее бы не какого граф сопра не было.
Как-то Alexander Kulik писал на ответ Tim'у Kelly, мол:~... видел я таких авторов. Присылали всякие кассетки и говорили, что это их "детище сотворило", а на самом деле...~. Я тоже сразу не поверил, что так играет DMA Ultrasound Card, пока не собрал ее и не проверил в деле. Качество звука на DMA UltraSound Card не уступает AWE32!
Некий Dmitry Moskaluk писал: ~...нафига на спектруме хорошая звуковая плата, если ее цена раза в три(еще один камень в сторону GS) самого компьютера...~. О стоимости: мне обошлась карта в 10 баксов(!). м\с 8237 стоит - 1.50 бакса. м\с 8253 по 1 баксу, 2 бакса за 8 штук 572па1 ну и логика на остальные, и полигон.
Кстати, насколько мне известно существует две карты: одна у Иноземцева Алексея, вторая у HARD from WITCHCRAFT (т.е. у меня).
*** Такое положение уже давно не действенно! По моим сведениям существует уже не маленький парк этих карточек и не только в Украине, но и в Беларуси и России, причем даже в самых отдаленных уголках! Ко мне и сейчас приходят письма с просьбой прислать софт - пожалуйста, мне что жалко? Давайте диски (3"5), оплату на почтовые расходы... Бывают и письма с просьбой продать готовый продукт, дело в том, что разработка печатных плат, постановка на конвейер, реклама и продажа требует внушительных капиталовложений, а при таком спросе на этот продукт как мы сейчас наблюдаем - это просто деньги на ветер! Многие уже пытались поставить карту на поток, но многие и бросили это дело на пол пути разочаровавшись, т.к. отдача полностью отсутствует. Хотя если посупит N-ое количество заказов, которое хотя бы покроет расходы на производство, то мы готовы разморозить проект.
Действительно существует и база софта под эту карту - проигрыватель и редактор .mod, плейер .wav, адаптированные версии известных редакторов Digital Studio и PRODIGI, и примерно двадцать полностью озвученных игрушек. Есть также куча мелких утилит, как FREESPEED для установки скорости компа, и WRBI, так или иначе поддерживающих эту карту. Были проекты написания демок использующие карту в режиме граф. акселератора и вьювер текста...






