AY-3-8912 Emulator — это плата-заменитель для звуковых чипов AY-3-8910, AY-3-8912 и YM2149F, выполненная в форм-факторе DIP-28. Проект построен на базе микроконтроллера и эмулирует поведение оригинальных программируемых звуковых генераторов (PSG) на уровне регистров. Это позволяет заменить редкие, дорогие и снятые с производства микросхемы современным и доступным аналогом, полностью совместимым по выводам.
Программируемый звуковой генератор (PSG) — историческая справка:
Чип AY-3-8910 был разработан компанией General Instrument в конце 1970-х годов и стал одним из самых распространённых звуковых чипов 8-битной эпохи, появившись во множестве домашних компьютеров и аркадных систем. Чип предоставляет три независимых тоновых канала с программируемой частотой и амплитудой, а также генератор шума, который может подмешиваться в каждый канал. Генерация звука управляется через внутренние регистры, что делало AY-3-8910 простым в сопряжении с микропроцессорами того времени. Его характерное звучание сильно повлияло на стиль чиптюн-музыки ранних компьютерных и видеоигровых систем.
YM2149F — это полностью совместимая версия AY-3-8910, производившаяся компанией Yamaha. Она имеет ту же внутреннюю архитектуру и программную модель, но отличается улучшенными электрическими характеристиками и немного иным поведением аналогового выхода, особенно на низких уровнях громкости. Благодаря своей стабильности и более чистому выходу, YM2149F широко использовался в европейских компьютерных системах. С программной точки зрения оба чипа взаимозаменяемы и управляются идентичным кодом на уровне регистров.
AY-3-8912 — это более компактный и в настоящее время относительно редкий вариант AY-3-8910. Он сохраняет полные возможности генерации звука оригинального чипа, но имеет уменьшенное количество линий ввода-вывода общего назначения, что было рассчитано на системы, не нуждавшиеся в дополнительных параллельных портах. Несмотря на меньшую распространённость, он остаётся полностью совместимым с точки зрения аудиофункциональности. Вместе эти чипы представляют собой важную веху в развитии цифрового звукового оборудования и остаются актуальными в ретрокомпьютерных и эмуляционных проектах.
Внутренне AY-3-8910 и YM2149F используют регистровую архитектуру с 16 программируемыми регистрами, доступ к которым осуществляется по 8-битной шине данных. Звук генерируется на основе трёх независимых генераторов прямоугольных импульсов с программируемыми делителями частоты и общего генератора псевдослучайного шума с настраиваемым периодом. Регистр микшера управляет вкладом тона и шума для каждого канала, в то время как поканальное управление амплитудой позволяет использовать либо фиксированные уровни громкости, либо модуляцию, управляемую огибающей.
Генератор огибающей обеспечивает аппаратное изменение амплитуды, используя программируемый период и набор предопределённых форм огибающей, что снижает необходимость в постоянных обновлениях со стороны процессора. Выходные уровни формируются внутренними ЦАП на резисторных матрицах, которые по своей природе нелинейны; вместе с аналоговыми выходными каскадами это придаёт характерное звучание данным чипам. Хотя YM2149F остаётся программно совместимым с AY-3-8910, незначительные аппаратные различия, такие как опциональный внутренний делитель тактовой частоты и немного отличающаяся разрешающая способность по амплитуде, могут приводить к едва уловимым, но заметным на слух различиям в звуке.
| Название | Описание | GitHub | Yandex.Диск |
|---|---|---|---|
| Даташиты (datasheet) | Документация на микроконтроллер и сопутствующие компоненты. | Ссылка на GitHub | Ссылка на Яндекс.Диск |
| Прошивка (firmware) | Исходный код прошивки для MCU (Assembly). | Ссылка на GitHub | Ссылка на Яндекс.Диск |
| Аппаратная часть (hardware) | Файлы печатной платы и схемы эмулятора (включая изображение платы). | Ссылка на GitHub | Ссылка на Яндекс.Диск |
| Скачать все файлы | Все файлы находятся в одном архиве | Ссылка на GitHub | Ссылка на Яндекс.Диск |
Аппаратная часть (Hardware):
- Форм-фактор DIP-28, полностью совместим по выводам с семейством AY/YM.
- Эмуляция PSG на базе микроконтроллера (MCU), реализованная в прошивке.
- PWM-аудиовыходы с аналоговой низкочастотной фильтрацией.
- Внешняя EEPROM для хранения конфигурации.
- Интерфейс ICSP для прошивки и отладки.
Эмулятор стремится воспроизвести оригинальное поведение AY/YM на уровне регистров и звука. Из-за архитектурных различий между реализацией на MCU и оригинальными чипами, некоторые временные и аналоговые характеристики могут отличаться.
Таблица совместимости функций (FW 1.0):
| Функция | FW 1.0 | Комментарий |
|---|---|---|
| Специфичное поведение AY-3-8910/AY-3-8912 | Частично реализовано в AY-сборке прошивки | |
| Специфичное поведение YM2149F | Частично реализовано в YM-сборке прошивки | |
| Шина данных/адреса 7-0 (DA7-DA0, выводы 28-21) | ||
| Bus Control 1 (BC1, вывод 20) | Обрабатывается аппаратным прерыванием (INT0) | |
| Bus Control 2 (BC2, вывод 19) | Не будет реализован (не требуется) | |
| Bus Direction (BDIR, вывод 18) | Обрабатывается аппаратным прерыванием (INT1) | |
| Address 8 (A8, вывод 17) | Запланировано к реализации | |
| Вход сброса (#RESET, вывод 16) | ||
| Вход тактовой частоты (CLOCK, вывод 15) | Частота задаётся в конфигурационном файле EEPROM | |
| Биты порта ввода-вывода 7-0 (IOA7-IOA0, выводы 7-14) | Не будет реализован (аппаратное ограничение) | |
| Аналоговые каналы A, B, C (выводы 5, 4, 1) | Три PWM с низкочастотными фильтрами | |
| Параллельный ввод/вывод: запись данных в регистр | ||
| Параллельный ввод/вывод: чтение данных из регистра | ||
| Последовательный ввод/вывод: запись данных в регистр | UART, 57600 бод (см. протокол) | |
| Последовательный ввод/вывод: чтение данных из регистра | Запланировано к реализации | |
| Конфигурирование прошивки через J1, J2 | Запланировано к реализации | |
| Внутрисхемное программирование (ICSP) | Через выводы ICSP (или через выводы PIO, начиная с HW 1.5) |
Известные ограничения:
- Порт IOA (выводы 7–14) не поддерживается из-за аппаратных ограничений.
- Внешний вход CLOCK не используется; тактовая частота конфигурируется через EEPROM.
- Сигнал BC2 не реализован, так как он не требуется для целевых систем.
- Поддержка линии адреса A8.
- Последовательное чтение данных.
- Конфигурирование прошивки через джамперы (J1/J2).
- Параллельный интерфейс — следует поведению оригинального даташита AY-3-8910 / AY-3-8912. Поддерживает адресацию регистров и операции чтения/записи данных с использованием управляющих сигналов BC1 и BDIR. Подробное описание: docs/parallel_io.md.
- Последовательный интерфейс (UART) — альтернативный интерфейс для доступа к регистрам и отладки. UART, 57600 бод, 8 бит данных, без контроля чётности, 1 стоп-бит (8N1). Поддерживается запись в регистры PSG, чтение запланировано. Описание протокола: docs/serial_protocol.md.
- Репозиторий проекта — GitHub