В стародавние времена компьютеры были молчаливыми и только под конец 70-х годов с появлением домашних компьютеров и развитием игровой индустрии, встал вопрос про компьютерный звук, озвучивание игр и звуковые эффекты.
В начале 80-х была выпущена целая плеяда интересных 8-битных звукогенераторов, которые представляли собой цифровой синтезатор 8-битного звука, упакованный в стандартный корпус типа DIP.
Тогда IBM PC только набирал обороты, а рынок домашних компьютеров был почти полностью поделён между двумя продуктами – линейкой ZX Spectrum от британской компании Sinclair Inc., получившей распространение в основном в Европе. И серией компьютеров Commodore от одноимённой фирмы, базирующейся в США. Поэтому и звуковые чипы, применяемые в этих компьютерах, стали самыми распространёнными, а впоследствии даже культовыми.
MOS6581/SID
Американская фирма MOS Technology берёт своё начало в 1975 году, когда отколовшаяся от фирмы Motorolaгруппка разработчиков присоединилась к маленькой фирме, производившей электронику для игровых автоматов. Начали они с клона мотороловского процессора 6500, который назвали 6501, и собственного очень успешного процессора 6502. Довольно быстро компанию приобретает Commodoreи называться они стали теперь Commodore Semiconductor Group, хотя логотип MOS оставался на изделиях до 1989 года.
В 1982 году на рынок выходит самый продаваемый домашний компьютер за всю историю индустрии – Commodore 64, построенный на логике от MOS Technology. Изюминкой аппарата стало применение звукового чипа SID (Sound Interface Device) MOS6581, который позволял вытворять со звуком такое, что никто до этого от домашнего компьютера даже и представить не мог.
Разработкой этой чудо-микросхемы руководил инженер Роберт Яннес (Robert Yannes), который довольно быстро уйдёт из Commodore и организует известную в музыкальном мире фирму Ensoniq. Яннес уже имел опыт работы в области проектирования синтезаторов звука и хотел получить более качественный синтез инструментов в домашнем компьютере, чем существующие на тот момент решения.
Commodore 64 разлетался в огромных количествах, стали появляться множество игр. Основным носителем информации тогда были кассеты, а игры с них загружались очень медленно, поэтому чтобы жаждущий новых впечатлений юзер в течение загрузки очередной игры не скучал, его развлекали красивой заставкой с музыкой. Появились и композиторы, которые писали музыку для заставок всё лучше и лучше, появились и программы для написания такой музыки – трекеры. Всё это дало толчок такому движению как демосцена.
Во время PC бума 90-х демосцена не просто жила, а активно развивалась. В конце концов, даже появились фирмы, которые стали делать новые «железки», дарящие вторую жизнь старым легендарным чипам.
Самый яркий пример – шведская контора Elektron. В конце 90-х годов они сделали отдельный синтезатор на базе SID: SidStation. Синтезатор пользовался успехом, а так как микросхемы SID к тому времени уже не выпускались, то ребята попросту скупили все чипы, до которых только могли дотянуться на профильных площадках! Это привело к тому, что сам чип стал коллекционной редкостью, а цена его к сегодняшнему дню взлетела чуть ли не до 100 долларов, и это если вам ещё повезёт его найти! При этом риск нарваться на неликвид очень большой. Одна из серьёзных проблем – эта микросхема очень боится статики. Были случаи, что чип «умирал» при пересылке просто от статического электричества.
В Китае пытаются что-то продавать, но откуда они их вытащили и в каком они состоянии – остаётся только догадываться. Поэтому брать там я бы не рекомендовал – это довольно большой риск.
В общем, прежде чем покупать SID на барахолках, я рекомендую трижды хорошенько подумать, надо оно вам за такие деньги и с такими рисками…
SwinSID – аппаратный эмулятор звукосинтезатора MOS6581 на базе МК от Atmel.
Но как же быть тем, кто хочет приобщиться к тёплому 8-битному звуку? На радость ретроцифовым аудиофилам уже придумано и продаётся множество аппаратных эмуляторов этого чипа на базе различных микроконтроллеров. Основная разница звучания в том, что у оригинального чипа есть два аналоговых фильтра, которые серьёзно влияют на звук и придают ему специфическую окраску, чего в чисто цифровых эмуляторах, конечно же, нет.
General Instruments AY-3-8910
Если в США начал своё триумфальное шествие по миру Commodore 64, то в том же 1982 году в Британии Sinclair Research выпустила не менее знаменитый и культовый ZX Spectrum. Первая модель была предельно дешёвой, чтобы конкурировать на рынке с другими компьютерами, поэтому и звук здесь был однобитным и воспроизводился через встроенный динамик.
Звукосинтезатор появился несколько позже в модели ZX Spectrum 128 и был это уже известный на рынке чип от General Instruments (они же впоследствии – Microchip): Programmable Sound Generator AY-3-8910.
Этот синтезатор стали использовать ещё в 1980 году в одном из первых игровых автоматов от Sega и в японских компьютерах MSX.
Во второй половине 80-х волна спектрумизации докатилась и до СССР. Время было тяжёлое, но уже можно было организовывать всякие кооперации, а производственных мощностей было больше, чем необходимо государству, поэтому то тут, то там стали появляться производимые кооперативами различные клоны Спектрума (АТМ Турбо, Дельта-С, Искра-1085, Кворум и т.п.), которых «настрогали» в каких-то совершенно нереальных количествах.
Если процессоры, память и обычную цифровую логику Советский Союз тогда выпускал в достаточном объёме, то вот с музыкальными чипами были проблемы. Кроме Союза клоны Спектрума делала вся Восточная Европа и Южная Америка, поэтому очень кстати звуковые микросхемы стала по лицензии производить Yamaha под названием SSG (Software-controlled Sound Generator) YM2149.
Звукогенератор AY-3-8910 со своим аналогом YM2149 от Yamaha.
А дальше было то же самое, что и с Commodore: появились программы для написания музыки, композиторы и всё это стало частью демосцены.
Найти сейчас эти микросхемы не составляет труда, благо наделали их очень много поэтому и цена на них бросовая: 2-3$ за штуку.
Philips SAA1099
Началась вторая половина 80-х и рынок постепенно стали захватывать IBM-совместимые компьютеры. На гребень «писюковской» волны в части звука первыми успела запрыгнуть канадская компания Adlib со свой звуковой картой AdLib Music Synthesizer Card, построенной на базе 11 голосного синтезатора Yamaha YM3812. Конкуренцию ей составила молодая, но подающая надежды сингапурская фирма Creative Technology с продуктом Creative Music System (она же C/MS, она же Game Blaster), на котором стояли аж две шестиканальные микросхемы Philips SAA1099.
За Адлиб были низкая цена и чуть более лучший звук, За Креатив – реальное стерео. Рынок выбрал звуковуху от Адлиб, а так как тогда всё происходило сверхбыстро, то она мгновенно стала стандартом де-факто для растущего как на дрожжах рынка PC с появляющимися играми.
Помимо звуковых карт от Адлиб и Креатив, звукогенератор SAA1099 применили ещё в паре устройств: в британском бытовом компьютере SAM Coupe, и в графических станциях Silicon Graphics IO2 и IO3 в качестве генератора, но там эта функция была недокументирована.
Звуковая карта C/MS не успел набрать популярность, поэтому и игр, поддерживающих её, было не так уж и много. Следующая модель Sound Blaster была уже совместима со звуковой картой АдЛиб, но всё ещё имела на борту по сути оказавшийся ненужным чип SAA1099, поэтому поддерживать его дальше было бессмысленно и уже в новой ревизии Sound Blaster 1.5 от этих микросхем вообще отказались.
Домашний компьютер SAM Coupe (он мог работать в режиме эмуляции ZX Spectrum) какого-то серьёзного распространения не получил, как и узкоспециализированные решения от Silicon Graphics, где звук вообще был по сути не нужен.
Немного почитав про эти устройства, я пришёл к выводу, что полностью возможностями звукогенератора от Philips так и не воспользовались. Если послушать SAA1099 в играх тех лет, то ничего этакого вы там не услышите. Ну да, играет, местами неплохо, но звуки мало отличаются от той же YM-ки. Нет стереоэффектов, нет манипуляций с огибающей и шумом. Что особенно обидно в случае Game Blaster’a, у которого аж две микросхемы на борту (т.е. доступно было 12 независимых каналов!).
И я решил изучить эту микросхему получше.
Звукогенератор SAA1099 от Philips.
Характеристики по тем временам вызывают уважение, особенно если сравнивать с конкурентами.
Получается, что микросхема от Philips содержит по сути две микросхемы звукогенератора типа AY! И это всё в более компактном корпусе и низкой цене.
* * *
Чтобы запустить микросхему, надо подавать на её ножки соответствующие сигналы, а проще всего это делать с помощью микроконтроллера. Мне нравятся МК от Атмел (сейчас их уже приобрёл Microchip), поэтому я подумал, что популярный микроконтроллер Atmega8 с этой задачей справится.
Чтобы было интереснее, я решил управлять всем этим добром с помощью MIDI-клавиатуры, что вполне логично. Тем более, что на низком уровне (на уровне программирования) я с этим протоколом ещё не работал, хотя принцип и структуру команд знал, а тут как раз выдался случай познакомиться с ним поближе.
Я хотел научиться делать меню с помощью энкодера, поэтому решил приделать и энкодер.
Ножек у микроконтроллера маловато, поэтому управлять SAA1099 будем с помощью сдвигового регистра 74595, подключённого к МК по SPI интерфейсу.
Индикация тоже нужна, поэтому добавим возможность подключить стандартный экранчик 1602 (две строчки по 16 знаков) по I2C-шине.
Я наконец-то начал переходить с устаревшего ещё 15 лет назад PCAD’а на Altium Designer, а эта разработка как ничто другое подходила для изучения нового для меня программного продукта. Отныне все платы для себя я делаю в Altuim Designer’е.
После некоторых раздумий получилась вот такая схема (целиком проект можно скачать по ссылке в конце статьи).
Небольшие пояснения.
R8 и R9 я поставил чтобы не было конфликтов с программатором по SPI, но они оказались не нужны, можно их вообще не ставить или поставить по 10 Ом как сделал я.
SW1 – энкодер с кнопкой для организации меню в МК. Так же я вывел наружу один канал (из 8-ми) встроенного в МК АЦП (XP2) для того, чтобы «рулить» параметрами с помощью потенциометра (внешнего).
XP4 – разъём типа USB-B исключительно для питания.
Катушка L1 (вместе с конденсатором C10 образует LoPass Filter – фильтр низких частот) – не обязательна, но по документации на МК нужна, поэтому добавил.
С помощью перемычки XP5 выбирается режим работы MIDI-порта XP8: MIDI-THRU или MIDI-OUT
Для индикации служит стандартный экран 1602 (он же классический HD44780) с модулем I2C, подключается через разъём XP7
Схема аналоговой обвязки на выходе синтезатора (R18, R19, C13-C18) взята стандартная из документации на SAA1099.
Светодиод VD3 подключён к свободной ножке МК, служит для индикации.
XP10 – вывел наружу неиспользуемые ножки МК.
XP11 – дополнительный разъём с питанием.
XP1 – сигналы TxD, RxD от MIDI канала на всякий случай.
В 3Д плата выглядит примерно вот так:
А в реальности с деталями вот так:
Серьёзных «косяков» не было, в основном все они – косметические.
Конденсатор C6 надо было сажать на «землю», а не на питание. Но его можно просто не припаивать.
Выходное гнездо 3,5’ я посадил слишком далеко от края платы, а на нём есть специальный порожек, чтобы упираться в край.
С17 и С18 надо было разместить чуть пошире, они слишком «пузатые» и касаются друг друга, но это тоже не критично.
Ножки в колодке I2C, куда подключается экранчик, надо было вывести чуть в другой последовательности.
В остальном всё оказалось правильным и плата заработала сразу.
* * *
Схему сделать не так уж и сложно, весь смысл здесь в программировании микроконтроллера. Но так как статья разрослась и программную часть я сделал не до конца, поэтому будет ещё одна часть (я надеюсь), а пока опишу то, что получилось на данном этапе.
Для начала надо тщательно разобраться с протоколом работы звукогенератора. Всё это описано в мануале (архив с документацией будет в конце статьи), поэтому слишком подробно описывать не буду, остановлюсь только на некоторых общих моментах.
Посмотрим на распиновку микросхемы.
1 /WR Переключаясь на низкий уровень можно записать в соответствующий внутренний регистр.
2 /CS Выбор чипа. Если используете только один чип, то просто сажаете на «общий».
3 A0 Выбираем регистр. «1» - адрес, «0» - данные.
4, 5 – стереовыход
6 Iref референстный вход для тока.
7 /DTACK выход «открытый коллектор» - низким уровнем чип подтверждает, что команда принята. В принципе, эта сигнал не нужен (точнее, нужен для совместимости со старыми процессорами) и вешается через резистор на +5В. Я проверил, подтверждение приходит всегда в интервале пары микросекунд.
8 CLK тактирование от внешнего кварцевого генератора.
9 Питание «Общий»
10-17 D0-D7 Шина данных
18 Питание +5В
А теперь остановимся на структурной схеме – она очень важна для понимания работы звукосинтезатора.
Обратите внимание на немаловажный момент. Генератор шума Noise Generator 0 зависит от генератора частоты (Frequency Generator 0), соответственно и второй генератор шума зависит от третьего генератора частоты. Поэтому чтобы включить генератор шума, необходимо включить соответствующий частотный генератор.
То же самое и с генераторами огибающих. Они завязаны на свои частотные генераторы (первый и четвёртый соответственно) и если их не включить, то никакой огибающей не будет.
Ещё одна особенность для тех, кто будет экспериментировать. У микросхемы нет ножки сброса, поэтому чтобы обнулить все регистры (выставить их по умолчанию, и это не во всех случаях «0»!), приходится отключать питание. Не «обнуляя» регистры и кидая последовательно разные команды, на выходе можно получить кашу. Разумеется, дефолтное состояние можно выставить программно записывая в соответсвующие регистры нужные значения.
Теперь посмотрим на регистровую карту. По большему счёту всё понятно, но всё же сделаю несколько пояснений.
Регистры с 0x00 по 0x05 – поканальная громкость. Младшие четыре бита – левый канал, старшие четыре бита – правый. Четыре бита позволяют закодировать 16 значений громкости от «0» (выключено) до «15» (максимальная громкость).
Регистры от 0x08 по 0x0D– частота каждого генератора, которая зависит от выбранной октавы, записанной в трёх регистрах: с 0x10 по 0x12.
Комбинируя частоту и октаву можно выдавать сигнал от 31 Гц до 7,81 кГц.
Коды конкретных нот:
B 5
C 33
C# 60
D 85
D# 109
E 132
F 153
F# 173
G 192
G# 210
A 227
A# 243
Следующие два регистра (0x14 и 0x15) образуют цифровой микшер, который может работать в четырёх режимах: выключен, передать только частоту, передать только шум, передать частоту и шум.
Регистр 0x16: включаем генераторы шума с выбранными из двух бит (четыре значения) параметрами (что-то типа «цвета» шума).
«00» 31,3 кГц
«01» 15,6 кГц
«10» 7,6 кГц
«11» рандомно меняется от 61 Гц до 15,6 кГц
Регистры 0x18 и 0x19 управляют параметрами двух генераторов огибающей соответственно. Тут параметров довольно много.
Если нулевой бит включить в «1», то правый и левый канал будут инвертированы относительно друг друга.
Дальше идут три бита, в которых закодирована форма огибающей (соотв. получается восемь вариантов):
000 Нулевая амплитуда.
001 Максимальная амплитуда
010 Одиночный спад
011 Повторяемый спад или инверсная «пила».
100 Одиночный треугольник
101 Повторяемый треугольник
110 Одиночная атака
111 Повторяемая атака или пилообразный сигнал
Четвёртый бит: разрешение огибающей.
Пятый бит: включение тактирования. «0» – от внутренних генераторов, «1» - от ножки A0.
Седьмой бит: «1» – огибающая включена, «0» – выключена.
В мануале всё это выглядит так:
С алгоритмом работы (т.е. когда и какую команду надо подавать) я разобрался не до конца. Активное гугление мало что дало – если кто и использует SAA1099, то это либо реплика Game Blaster’а, или нечто звучащее только в половину своих возможностей. Ни то, ни другое мне не интересно, я хочу полностью использовать возможности микросхемы.
Нарыл немного исходных кодов для SAM Coupe, буду разбираться, но у меня, тем не менее, уже получилось извлечь из звукогенератора кое-какие звуки.
Для начала включим обычный тон: ноту Ля (440 Гц).
Теперь поиграемся с огибающей.
Экспериментально я выяснил, что если не «заполнять» огибающую (об этом напишу в следующей части про программирование), то можно получить чистую «пилу» и «треугольник».
Одиночная атака.
Одиночная атака с инверсией каналов. Что за ступенька в начале и почему только на одном канале – без понятия.
Одиночный спад:
Одиночный спад с инверсией каналов:
Одиночный треугольник:
Одиночный треугольник с инверсией каналов:
Пила с отрицательным наклоном:
Пила с отрицательным наклоном и с инверсией каналов:
Пила с положительным наклоном:
Пила с положительным наклоном и с инверсией каналов:
Теугольник:
Треугольник с инверсией каналов:
Те же повторяющиеся сигналы, но только с заполнением. Инвертированную версию показывать не буду, а то там «каша» на картинке.
Без шума - никуда. Поэтому несколько картинок с шумом. Это шум с параметрами «00» (см. выше про шум).
А это шум «11» (рандомный):
На последок выложу три картинки с произвольными сигналами, в которых смешаны в разных пропорциях тон, шум и наложена огибающая.
Пока всё на этом. В следующей части подробно опишу программную часть и самое главное (надеюсь, что это доделаю) – управление синтезатором по MIDI.
В этом архиве – три pdf-файла с описанием звукогенератора SAA1099, которые я нашёл на просторах Интернета.
Так как плата – отладочная, поэтому схему я особо не вылизывал, помещаю как есть. Если вдруг будете делать что-то подобное и появятся вопросы – напишите мне.