Клон звуковой карты IBM Music Feature Card
Карта представляет собой модификацию синтезатора Yamaha FB-01, в форм-факторе 8-ми битной ISA платы. Из-за своей дороговизны и заурядного звучания не снискала большой популярности. Поддержка в играх очень скромная. Однако, клонировать эту звуковуху будет очень интересно, благо детали там вполне еще доступные. Но побегать за ними все-таки придется.
На данный момент у меня есть практически все микросхемы, десяток фотографий очень плохого качества, предположительно, правильно воссозданная схема и макетная плата для сборки. Посмотрим, что из этого получится. плата полностью собрана и протестирована.
Ссылки:
Репозиторий проекта: http://svn.stdio.ru/svn/trunk/imfc_clone/
Релизы: https://stdio.ru/download/imfc_clone/releases
Дополнительные фотографии: https://stdio.ru/download/imfc_clone/media.
Плейлист на YouTube: https://www.youtube.com/playlist?list=PLklwb3FAVTuTg9WiCjmrd7izTdC5_sEzL
Тема на "Полигоне призраков": https://www.phantom.sannata.org/viewtopic.php?f=12&t=43060
Тема на Vogons: https://www.vogons.org/viewtopic.php?f=62&t=89229
Воссоздание схемы платы
11.07.2022 Поскольку, карта представляет собой модификацию синтезатора FB-01, со схемотехникой синтезаторной части проблем особых не возникло, так как Sevice Manual со схемой вполне себе доступен. Другое дело - интерфейс с компьютером. Здесь мам помогут: здравый смысл, зоркий глаз и терпение. Полностью разобрана схемы: синтезатора и логика прерывания. Почти готова логика выборки адреса на ISA шине, но не понятно, как работает линия адреса A7. Еще, большие непонятки с RESET'ом.
12.07.2022 Внезапно, удалось разобраться в схеме параллельного интерфейса между хостом и синтезатором. Как оказалось, на триггерах были сделаны линии задержки для сигналов "рукопожатия" (handhake). Также, частично разобрался в схеме сброса: второй инвертор, чье назначение было для меня загадкой, идет в аналоговую часть для формирования сигнала MUTE во время сброса. Таким образом, в цифровой части осталось решить три глобальные проблемы:
- Куда идет сигнал ISA_RESET? Судя по всему, на входной буфер U8.
- Кто управляет выходом буфера U8 (ноги 1 и 19)?
- Как, черт возьми, формируется сигнал ISA_A6 в схеме выборки адреса карты?
14.07.2022 Удалось решить проблему с выборкой карты. Неудачно развел всего два проводка. Поменял их местами все сошлось.
02.08.2022 Доразвел MIDI и, практически, всю аналоговую часть. Пока затык с питанием, так как не видно номиналов конденсаторов и стабилизаторов.
03.08.2022 Контур платы, все разъемы. С 3D моделями разъемов пока не заморачивался.
04.08.2022 Судя по всему, усилители запитываются (AVcc) не +5В, а +9В или +6В. А вот для питания ЦАПа берется это напряжение и уменьшается до +5В стабилизатором U41. Возьмем пока для референса AVcc=+9В.
16.08.2022 Благодаря участникам форума vogons.org у меня появилась серия качественных фото, благодаря которым мне удалось установить номиналы всех деталей. Остался только один вопрос с подключением второго вывода резисторной сборки RA1. Я вижу на плате одну дорожку, но не могу понять, откуда она приходит и куда уходит. Предположительно, она подтягивает 13-й вывод U5 к +5В (через RA1). Но это не имеет смысла, так как этот вывод соединен с сигналом AEN, и очень нехорошо вмешиваться в этот сигнал карте расширения. Если он и должен быть подтянут в напряжению питания, то сделано это должно быть на материнской плате. В принципе, заказать макетную плату можно и в таком виде, а лишнюю дорожку всегда можно обрезать ножиком.
29.12.2022 Увы, сейчас немного не до звуковой карты.
16.04.2023 Заказал тестовую плату на заводе. Ждем до конца марта. Предположил, что RA1-2 все-таки подтягивает ISA_AEN к +5V.
Вопросы по схеме
Цепи
RA1-2 - предположительно, подтягивает ISA_AEN к +5V. (Подтянутая к 5В ISA_AEN никак на работоспособность платы не влияет. Оставил как есть.)
U2-1 должен быть притянут к земле. Непонятно как. (Сделал ч/з внутренний слой.)
U27-1 и U-27-13 - похоже, что к земле притягиваются через внутренний слой, т.к. по внешним линию провести не получается. (Подтянул ч/з внутренний слой.)
U21-4 и U21-10 - +5В похоже, что идет от внутреннего слоя. (Так и сделал.)
U8-6 - DGND подводится через внутренний слой. (Так и сделал.)
U11-5 - DGND подводится через внутренний слой. (Так и сделал.)
Номиналы компонентов
Резисторы: R2 и R3 - 56Ом или 560Ом? Предположительно: 56Ом (56Ом 1%)
Резисторы: R24 и R25 - предположительно: 260Ом 1% (360Ом 1%)
Резисторы: R27 и R28 - предположительно 1КОм или 110Ом 1% (1КОм 1%)
- Резистор R35 - предположительно 120Ом
Резистор R39 - предположительно 1МОм (1МОм)
Резистор R45 - предположительно 390Ом (390Ом)
Резисторные сборки: RA3, RA2 и RA1 - предположительно: 8x10K (8x10K)
Конденсаторы: C1 и C7 - видно только, что 16В, но ёмкость не видно. Предположительно: 10мкФ (10мкФ 16В)
Конденсаторы С2 и С3 - 0.01мкФ
- Конденсатор С5 - предположительно 0.1мкФ
Конденсаторы: C13 и C14 - предположительно: 10мкФ 16В (плохо видно, но можно разглядеть) (10мкФ 16В)
Конденсаторы: C23 и C25 - предположительно: 10мкФ 16В (10мкФ 16В)
Конденсатор С15 (10мкФ 16В)
Конденсатор С26 - предположительно: 220мкФ 16В (220мкФ 16В)
Конденсатор С30 (10мкФ 16В)
Конденсатор С39 (100мкФ 16В)
Индуктивности: L1, L2 и L4, L5 - хоть какие-нибудь знаки. Однозначно, это Tokin SBT-02xx, но индуктивность неизвестна. Буду использовать что есть: c маркировкой 04 (0.04mH- Tokin SBT-0240)
Микросхема U41 - предположительно линейный стабилизатор на 5В L78L05_TO92
Микросхема U3 - предположительно линейный стабилизатор на 9В: AN78N09
Обозначение компонентов
Круглый керамический конденсатор, рядом с C5 и C6. Похожий на C5: C70 - 0.1мкф
Сборка платы версии pre1
30.05.2023 Плата пришла с завода. Приступил к сборке. По-прежнему не хватает всех компонентов. Заказал в Китае одну микросхему мелкой логики (используется для соединения параллельных портов между собой) и транзисторы. Однако, их отсутствие не мешает проверить питание и усилители. Возможно, попытаюсь проверить так же ЦАП и синтезатор. Но у меня нет даташита на синтезатор, и не ясно, выйдет ли на ATmega генерировать clock 1.6МГц для ЦАПа.
09.06.2023 Частично собрал плату. Протестировал аналоговою часть: выглядит так, что усилители работают. Усиления, правда никакого: какое напряжение на входе, такое и на выходе. Но, для ЦАП, это, видимо, нормально. Протестировать схему MUTE пока нет возможности. Подумаю, как протестировать ЦАП без синтезатора, так как на YM2164 даташитов нету :-(
12.06.2023 Успешная проверка ЦАП и усилителей. Atmega генерирует два тона прямоугольной формы: 500Гц и 1000Гц длительностью 3с. Писк достаточно громко слышен в наушкиках. Пока все идет хорошо. Единственное, что меня смущает, так это форма сигнала. Я, вроде, генерирую прямоугольник, а на осциллограые виден треугольник. С другой стороны, я подавал на вход усилителя прямоугольнк с генератора осциллографа и на выходе получал тоже прямоугольник. Будем считать, что я до конца не понял, как работать с ЦАП'ом.
13.06.2023 Проверил работу генераторов тактовой частоты. Нашел ошибку в генераторе процессора: неправильный номинал резистора R62.
14.06.2023 Проверил работу сигналов выборки ~ISA_CRDS, ~HPIU, ~HTIMER, ~TCR, ~TSR - никаких проблем не обнаружил. По всей видимости, подтяжка ISA_AEN к +5V через резисторную сборку RA1 никакого влияния на работу шины не оказывает. Другие ISA карты на этой шине тоже не испытывают трудностей в работе.
15.06.2023 Протестировал работу таймера. Результат можно посмотреть тут: https://www.youtube.com/watch?v=QKtnqY0oFZE
16.06.2023 Не выдержал и накинул остальные детали на плату, в надежде, что она заработает. Но она не заработала. Программа тестирования из комплекта к карте, говорит, что не может настроить прерывание. Однако, прерывание я тестировал - оно работает.
17.06.2023 Решил проверить музыкальную плату в игре SQ3 и она заиграла! В Silpheed - тоже. Однако, уже вечером, когда я решил записать результат на видео, она снова перестала работать. Если запускать игры из-под DOS, то они зависают после нескольких нот. Из-под Windows 95 зависаний не происходит, но инструменты звучат как-то странно.
19.06.2023 Подключил к параллельному интерфейсу со стороны компьютера логический анализатор, чтобы снять протокол обмена между драйвером и картой. Анализ, показал, что драйвер использует карту в режиме поллинга: в определенный порт записывается команда, а затем периодически запрашивается статус в ожидании бита ready. В какой-то момент драйвер перестает реагировать на это бит и продолжает полить статус бесконечно. Тем не менее, карта этот бит выставляет. Отсюда я делаю предварительный вывод, что это - программная проблема. Нужно анализировать драйвер.
23.06.2023 Пришли недостающие транзисторы для схемы подавления щелчков при включении. Почему-то не получилось проверить ее работоспособность осциллографом: не силен я в аналоговой схемотехнике :) Однако, какие-то незначительные дрыганья на транзисторах я увидел, да и щелчки все-таки исчезли. Будем считать, что все работает.
02.07.2023 Расковырял таки драйвер. До конца выяснить, почему происходит бесконечный поллинг я пока не успел, но зато в самом его конце нашел функцию задержки, основанную на пустых циклах. Обычно, такие штуки приводят к тому, что программы прекрасно работают на компьютерах, на которых их написали, но перестают работать на более быстрых. Более того, эта функция используется при инициализации карты, что, вероятнее всего, и является причиной искаженных инструментов при запуске под Win95. За сутки, мне удалось добиться сборки дизассемблированного драйвера обратно в бинарник, после этого, я увеличил количество пустых циклов в 0x2fff раз. И, похоже, оно заработало: https://www.youtube.com/watch?v=1_qK44evF64. Но это все-равно не очень хорошее решение. Нужно попробовать сделать задержку на основе системных часов DOS (есть такая штука), если, конечно, игра не забирает прерывание от него себе.
03.07.2023 К сожалению, дальнейшие тесты показали, что пропатченный драйвер не помогает с зависанием игр, запускаемых из под DOS. И вероятность сломанных инструментов из под Windows, хоть и уменьшается, но не исчезает полностью. Значит, дело не в кривых задержках. Будем копать дальше.
01.08.2023 Анализ ISA шины с помощью логическогого анализатора показал, что с какого-то момента карта при чтении всегда выдает на линии данных одни нули. Посмотрел по схеме все, что отвечает за вывод данных и обнаружил, что если пошевелить одну из микросхем мелкой логики, то карта начинает работать как надо. Очень похоже, что был плохой контакт. Послежу за поведением карты еще какое-то время, но получается, что все заработао!
17.08.2023 Увы, не помого. Беглый анализ показал, что в момент чтения, на шинном передатчике U9 значения на входе и выходе не совпадают. Такого быть не должно. Очень похоже, что на ISA шину в этот момент пытается писать кто-то еще. Буду разбираться дальше.
18.08.2023 Этим "кто-то еще" был Sound Blaster! Забавно, но это оставалось единственное устройство, которое я не убрал из компьютера. И именно он конфликтовал с IMFC! А я кучу времени и нервов угробил, пока это выяснил. Главное, в интернете про это писали, что IMFC не дружит с SB. Следующий этап - нкжно проверить внешний MIDI порт. Попробую набросать на DOS'е простенький loopback тест.
20.08.2023 Пришли планки. Отлично подошли к плате. Кроме того, протестировал MIDI порт: https://youtu.be/7my3f8IxtpI?si=Qe9H7sydFImHiiHR. Начал подкоговку к релизу платы v1.0. По результату релиза закажу себе уже чистовую плату с нормально позолоченым ISA разъемом.
21.08.2023 Зарелизил первую версию платы на Vogons.
27.08.2023 Пришел ко мне из Китая XT'шный ноутбук BOOK8088 с платой ISA портов. Посему, решил проверит гипотезу, что COMPOSE и PLAYREC не запускались на 133-м пне, потому, что он очень быстрый. И знаете, предположение таки подтвердилось! На i8088, внезапно, никаких проблем с прерыванием не оказалось, программы успешно запустились и успешно что-то проиграли.
Найденные ошибки
R62 - неправильный номинал: нужно 4.7К вместо 1К. (исправил в v1.0)
ZD1 подключен к земле через неправильный слой: внутренний вместо внешнего верхнего. (исправил в v1.0)
План тестирования
- Работа аналоговой части
- Работа усилителей от внешнего генератора
- Работа ЦАП
- Тактовые генераторы
- Работа ISA шины, выборка сигналов CS на основе адресов шины: ~ISA_CRDS, ~HPIU, ~HTIMER, ~TCR, ~TSR
- Программная проверка таймера (заодно и регистра TSR)
- Регистр TCR
- Программная проверка параллельного интерфейса.
- Cинтезатор.
- Внешний MIDI порт.
Хорошо бы написать небольшой тестик под DOS.
Сборка платы версии 1.0
22.08.2023 Заказал производство релизной платы в Китае через Резонит. Будет готова через месяц.