И снова всем привет! Я закончил наконец, пусть и с промежуточными, но всё-таки очень хорошими результатами кое какие доработки по части запуска чистейшего звука в нативном DOS. С весны я не возвращался к этому вопросу, сейчас же появилось время копать вновь и далее. В марте уже была готова эта вторая часть, я её разместил вместе с первой частью на Полигоне Призраков в рамках конкурса статей, думаю, что присутствие этой работы и здесь будет положительно встречено форумчанами old-games.

Цифровой звук S/PDIF в MS-DOS

Часть 2

На дворе март 2017 года, я и не подозревал, что история эта получит относительно небольшое по объёму, но большущее по значимости продолжение. Сначала, по традиции, благодарности, добавившиеся к прежним:

modlabs.net/old-games.ru - zx-c64

vogons.org - jwt27

peratron.narod.ru - создателю WBA040 MkIV

kxproject.com - создателям проекта kx

И вновь отдельная благодарность в адрес LLC!!!

А продолжение она получает по двум причинам. Первая причина - это найденный продукт от Yamaha, к которому умельцы прикрутили S/PDIF (в первой части я упоминал, что планируется использование Yamaha GM, но модель и способ подключения пока не определены). А точнее, умелец с vogons под ником jwt27. Он подробнейшим образом расписал и показал, буквально ткнул носом, какие компоненты взять и что куда припаять. Вероятно, что это его собственная авторская разработка. Так как я с паяльником не очень в ладах, попросил помощи, откликнулся на это дело форумчанин zx-c64. Это человек, виртуозно владеющий ремонтом и моддингом. На моей плате NEC XR385 он мне по рецепту jwt27 соорудил следующее:


Этот мод прекрасно работает. Звучит лучше, чем DB50XG по аналогу. Даже и сравнивать нечего, и говорить не о чем! Я в первой части обзора не упомянул, что у карты Terratec EWS64XL не один, а два переключаемых цифровых входа (активен только один). Один из них занимает WT EMU8000 с карты AWE64G (или Goldfinch), если Вы внимательно читали. На второй как раз "отправилась" карта NEC XR385, получившая цифровой выход.

Вообще, позволю себе некоторую вольность в отношении уклонения от темы, но не могу не отметить великолепные проекты zx-c64, сделанные своими руками и по аппаратной, и по программной части, в числе которых:

- установка PCI-ISA моста на плату ASRock ConRoe865, полная поддержка "бластеров", "гусей". Т.о., эта плата, поддерживающая Core 2 Quad 65/45нм, FSB up to 1200, DDR up to 600, является гораздо более мощной платформой с ISA для разных ОСей, нежели моя плата Itox/DFI G7S620-N, поддерживающая "лишь" Core 2 Duo 65нм, FSB800, DDR400. Если не ошибаюсь, сейчас она у него работает на FSB1066 с памятью DDR533.

- моддинг плат 3dfx на чипах VSA-100 (Voodoo4/5). Лично мне он превратил мою карту AGP Voodoo4500 в карту Voodoo4800, которая существовала только в виде прототипа и в серию так и не пошла, а именно установил на плату память 64мб и выход DVI. (Если помните, PCB у обеих карт идентичны.) Помимо этого, он меняет чипы VSA-100 на последние ревизии с частотой 200/210МГц и память на самую быструю. Я знаю только о двоих людях, занимающихся подобным. Второй виртуоз - некто Oskhar из Испании, но за его услуги последние штаны снимешь.

- установка разъёма WaveBlaster на карты AWE64.

Также я благодарен zx-c64 за то, что он любезно предоставил мне на тесты звуковую карту Turtle Beach Malibu (см. часть 1 под названием DOS-S/PDIF). На сегодня уже с уверенностью могу заявить, что все вопросы с этой картой снимаются. Например, у карт AWE32/64, AV310 интерфейс S/PDIF интегрирован в звуковой чипсет и активируется, грубо говоря, вместе с включением питания, всегда активен без всяких настроек регистров и роутов. У карты же TB Malibu он выполнен сепаратно, как у EWS64XL, и его активация требует специальной поддержки со стороны драйвера. Так вот, в DOS такой поддержки со стороны родного драйвера НЕТ, так что моя уверенность "на 90%", как я писал, потерпела фиаско. В Windows, естественно, есть, я послушал и сразу понял: надрываться для его активации в DOS смысла нет никакого. Реализован криво, шумит страшно.

Итак, Yamaha с цифровым выходом установлена! Если посмотреть, что я указывал в таблице распределения ресурсов в первой части DOS-S/PDIF, то можно увидеть, что ввод-вывод для General MIDI я выбрал 300 и 320, потому что адрес 330 занимает Roland MT-32 по вполне понятным причинам. Так почему же именно 300 и 320? Ответ кроется в играх: нет ни одной игры с поддержкой GM, которая не работала бы с адресами 300 и 320. В то же время есть масса игр, которые не предлагают в меню выбора адреса 310, 340, 350, 360, а предлагают выбрать только 300, 320, 330. Адрес 330 я решил оставить безраздельно для MT-32. Адрес 300 оккупировал чип Dream SAM9407, параллельного выхода нет. Для оставшегося адреса 320 было решено "запараллелить" карты NEC XR385 (цифра) и Roland SCB-55 (аналог). При выборе GM IO320 они всегда работают обе синхронно, но звук получаем с одной из них переключением. Для "запараллеливания" выбран малотиражный "полусамопальный" внешний бокс Ператроника WBA040 MkIV (благодарность автору Евгению Петрову), существование которого для меня открыл aleksej. Подключён бокс с картой SCB-55 к каналу MIDI2 карты EWS64XL, на этом же канале MIDI2 "сидит" карта XR385, установленная непосредственно в 5-дюймовое расширение EWS64XL. Дополненная композиция имеет такой вид:


И напоследок о принципиально новом в моём проекте, о второй причине продолжения статьи. О семействе E-MU10000.

Я несколько раз пытался безуспешно найти цифровой микшер за вменяемые деньги. Это совершенно невозможно. На них, помимо стандарта S/PDIF, присутствует полный набор AES/EBU, продвинутый аналог, часто процессоры эффектов и ещё чёрт знает что. Стоит это всё конских денег и занимает места, как конь.

А нужен-то микшер только для того, чтобы просто микшировать цифровые сигналы от разных карт. Другого назначения тут не надо. Так вот, все звуковые карты с цифрой, которые можно завести в DOS, имеют ОДИН рабочий S/PDIF вход (или переключаемый, что суть почти то же), и поэтому в состоянии смешивать входящий сигнал на выходе лишь со своим собственным. Т.о., цепочка из соединённых последовательно цифровым способом карт может быть только линейной и не может ветвиться. При переключаемом входе может ветвиться, но с глушением одной ветки в пользу другой. Если же какие-то карты вообще не имеют входа, а только один выход, то они могут исключительно замыкать цепочку, быть последними в ней, и никак иначе.

Если в наличии есть или микшер хотя бы с двумя входами, или звуковая карта под DOS хотя бы с двумя независимыми входами, то можно сделать её первым звеном и подключить к ней две ОДНОВРЕМЕННО звучащие цепочки, т.е. потенциально удвоить возможности. Такие карты есть давно, но в DOS цифровая часть их сильно урезана драйвером. Это все карты Live! и Audigy1/2.


Я уже давно озадачился тем, чтобы активировать на какой-нибудь из этих карт цифровой тракт полностью в нативном "чистом" DOS. Первая древняя и неудачная проба сначала отвратила меня от использования карт на чипах E-MU10k. Но впоследствии я разжился тремя ревизиями Live! и, скачав различные версии драйвера под DOS, приступил к тестам. Оказалось, что по умолчанию цифровой выход у них всё же работает, но это зависит как от ревизии карты, так и от версии драйвера. Последний драйвер (до Audigy), написанный во времена выпуска уже ревизий 5.1, работает с любыми картами Live! и на некоторых из них с этим драйвером активируются: SPDIF OUT выход и CD SPDIF вход. У меня побывали CT4670, SB0060, SB0220. Расклад таков: на CT4670 и на SB0220 цифра в DOS включается, на SB0060 не включается. Также на vogons я читал информацию, что и на ревизии SB0100 цифра в DOS не включается. При этом второй SPDIF IN вход не работает в DOS ни на одной ревизии. А ведь целью затеи является именно микширование ДВУХ цифровых источников. Я решил взять карту, на которой хотя бы выход и один из двух входов изначально активны в DOS (хотя далее практика показала, что можно взять любую), и обратился за помощью к LLC. Он не перестаёт меня удивлять. Практически за пару дней была написана программа, сканирующая все регистры чипа E-MU10k и делающая их снимок (дамп). В течение недели и нескольких промежуточных "бета" версий программа была полностью отлажена. Программа эта также может заранее заготовленные дампы "перезаливать" в чип, программируя текущую конфигурацию роутов, которая у E-MU10k весьма сложна. Логика была проста: загрузить Windows, где драйвер активирует все возможности карты, настроить её из микшера искомым образом, сделать снимок регистров и сравнить его со снимком из-под DOS. Камнем преткновения стал... win-драйвер Live! фирмы Creative. Он, оказывается, блокирует все прямые обращения к чипу от сторонних программ. И дамп с содержимого регистров заполняется в основном только значениями FFFF FFFF. У меня было много поводов для лютой ненависти к политике этой компании, настоящее обстоятельство присоединилось к ним. И тогда я вспомнил о проекте kx. Он просто стал настоящей палочкой-выручалочкой! Микшер в kx project драйвере обладает гораздо более гибкими возможностями по настройке всех входов-выходов, ну и никаких проблем со снятием дампа регистров чипа нет. Я вообще всегда жалел, что проект kx предлагает нам только WDM-драйвер. Из-за этого обстоятельства я всю жизнь под Windows 9X использовал родные VXD-драйверы от Creative. Всем ретроманам давно известно, что для геймерской машины под управлением Windows 9X лучший вариант - это VXD.

С помощью очередной консольной программы от LLC я сделал снимок регистров чипа E-MU10k в Windows с ОБОИМИ активированными цифровыми входами. Оказалось, что просто "залить" этот дамп в среде DOS не годится. Пришлось делать дефолтный снимок в DOS и скрупулёзно сравнивать его со снимком, сделанным в Windows. В итоге сработал только комбинированный вариант, а именно часть значений регистров подставлена от "досовского" дампа, часть от "виндового". На сегодняшний день мне удалось активировать на карте SB Live CT4670 одновременно оба цифровых входа в DOS, этой картой я заменил карту AV310. Экспериментальная схема сейчас выглядит так:



Но, разумеется, со вторым входом можно соединить не только цифровой выход CD ROM, но и любой другой источник. Это очень развязывает руки, ведь цифровой вход на Live не переключаемый, как на Terratec, а именно существует в двух экземплярах, работающих независимо друг от друга. Однако: на карте Live присутствуют не только два независимых цифровых входа, но ещё и целых три аналоговых входа, и они также работают независимо. Так же, как и на Audigy. Эти входы - Line In, CD In, AUX In. И следующим этапом логично представляется активировать в DOS их все! Тогда до трёх устройств с аналоговыми выходами, которые на данный момент подключены к Terratec EWS64, можно будет соединить напрямую с Live и уже не заботиться об их переключении. Надо сказать, что все входные аналоговые тракты у Live и у Audigy довольно качественные, чего не скажешь об их выходных аналоговых трактах. Налицо параллель с Terratec, у которой ситуация аналогичная: основные шумы (на слух около 90%) привносятся на аналоговом усилении Line Out. Но мы-то здесь рассматриваем исключительно цифровой выход, из-за этого в общем-то и вся затея, и об этом же данная статья. Впереди предстоит копаться с регистрами для активации всех входов на E-MU10k, выглядеть это может примерно так:



На этом рисунке я отметил уже карту "SB16" не как Live, а как Live/Audigy. В эти дни, пока я пишу вторую часть данного обзора, уже готова новая версия программы, работающей с регистрами процессоров E-MU10k. Эта версия теперь умеет работать не только с Live, но и с Audigy1/2. Или, как сказали бы в рекламе, Audigy Ready!

С ресурсами ничего хитрого нет. Всё так же, как и раньше. Только у карт 10k есть одна неприятная особенность, на них невозможно отключить канал FM, а канал этот всё время норовит звуками эмуляции OPL3 воспроизводить (дублировать) потоки General MIDI, инициализируемые по любому адресу 3x0. Поэтому я просто приглушаю этот канал через досовский программный микшер.


Напоминаю, что прерывание, назначенное слоту PCI, в который установлена карта Live/Audigy, не должно совпадать с прерыванием эмуляции Sound Blaster 16. С другими устройствами на шине ISA оно вполне пересекаться может. Конфликтов быть не должно.

Главным недостатком карт Live/Audigy в контексте DOS по мнению многих является привязанность драйвера к менеджеру памяти EMM386.EXE, и это обстоятельство часто отвращает геймеров от их использования в DOS. Здесь я могу отметить, что программа для работы с регистрами чипов E-MU10k от LLC обладает незаменимым свойством: ей вообще не нужен никакой драйвер. Именно так! Т.о., можно не загружать EMM386.EXE, можно не загружать драйвер под DOS, программа будет работать всё равно! И использовать 10k можно будет в DOS не как звуковую карту, а исключительно как микшер до двух цифровых (в случае использования ревизий CT4620/4670 до трёх цифровых) и до трёх аналоговых стереопотоков (ну и ещё один монопоток TAD, но он вряд ли когда-то кому-то пригодится), отправляющий смешанный сигнал (надо признать, очень качественно смешанный) на цифровой выход S/PDIF:


В этом случае карта Live/Audigy вообще не использует НИКАКИЕ ресурсы, кроме одного прерывания, выделяемого слоту PCI, в который она установлена. И в этом случае её можно использовать как микшер совместно с любыми звуковыми картами с любой конфигурацией ресурсов. В моём примере их использование возвращается к вариантам, показанным в табл. первой части, DOS-S/PDIF. Но проявляется один нюанс: тот дамп, что правильно настраивает карту с загруженным драйвером, совершенно не годится без загруженного драйвера (звука или нет, или его забивает сильный посторонний шум, или он присутствует только в одном левом/правом канале), и перелопачивать регистры нужно по-новому. В настоящее время я только подхожу к решению этой проблемы. Впереди разгадка правильных комбинаций значений регистров, сам LLC советует использовать для этого открытую документацию kx project. Я не обладаю соответствующей грамотностью, чтобы раскусить эти премудрости, и не стесняюсь призвать всех заинтересованных, кого данная затея тронула, так сказать, за живое, подключаться к настоящему проекту и как следует "распотрошить" максимум возможностей карт Live/Audigy под голым досом.

Вторым недостатком, хотя если выразить моё личное мнение, то для DOS-игр весьма сомнительным недостатком, является опорная частота 48 кГц, в которую передискредитизируются все входящие потоки прежде, чем чип сможет ими оперировать, в т.ч. смешивать и отправлять на выход. Я, как ни старался услышать искажения, не смог. Хотя сравнивал не раз то, как звучат цифровые 44 кГц напрямую в ресивер, и то, как они звучат "через Live" после передискретизации в 48 кГц. В картах Audigy2 существует также частота на выходе 96 кГц. Возможно, она настраивается не иначе, как через те же регистры её чипа E-MU10k3, в таком случае эту частоту можно будет получить и в нативном DOS. Это я ещё тоже не проверял. Но в Сети проскакивали высказывания, что при выборе 96 кГц опорной частотой всё равно остаётся 48 кГц, а после всех вычислений над потоками результирующий поток на выходе просто удваивает данные путём примитивного дублирования. Ничего на сей счёт точно сказать не могу.


Ну, как говорится, WIP (work in progress)...


"Дочки" NEC XR385 приобретены через ebay в Китае в 2011 году у продавца double-fish1981, "дочка" Roland SCB-55 приобретена через ebay в США в 2012 году у продавца ninostuff.

Выражаю благодарность в адрес aleksej, именно у него куплен внешний бокс Ператроника WBA040 MkIV.

Отдельная благодарность LLC, что уже, впрочем, стало традиционным. Его программная часть сделала возможной проделать всю эту работу во всём прокомментированном здесь объёме.

И заранее огромное спасибо всем тем, кто, возможно, изъявит желание внести свою лепту по доработке карт на чипах E-MU10k, E-MU10k2, E-MU10k3 и превращению их в полноценные многоканальные микшеры в нативном DOS. Отмечу ещё раз, весьма и весьма качественные микшеры с двумя цифровыми (в случае использования ревизий CT4620/4670 - с тремя цифровыми) и тремя аналоговыми входящими потоками. И легко доступные сегодня на вторичном рынке. Пишите мне по этой теме в личку, если кому-то это интересно и/или кто-то может предложить услуги программиста. Договоримся.

Впереди будет статья, посвящённая центральной платформе, одной из немногих единичных в мире ретромашин на базе процессоров Core 2 с полной нативной поддержкой Windows 9X и звука ISA+DMA, а также с прекрасной производительностью в операционных системах Windows XP и Windows 7.

Всем спасибо за внимание!

12.03.17

Также будет небольшое дополнение о звуковой карте Onkyo WAVIO SE-70, купленной мной в Японии.

Пока её исследование нельзя назвать исчерпывающим, а информацию по ней, которой я владею, полной. К сожалению, у меня отсутствует образ родного диска и какая-либо документация по ней в принципе. Приходится щупать почти вслепую. Пока могу сказать только одно: это единственный найденный мной клон SB Pro на шине ISA, имеющий нативный цифровой выход. Вопросов по этой карте пока много, а ответов очень мало.

Автор: LANRUS
Дата: 26.09.2017

Обсудить статью на форуме

Перейти к списку статей