> linkThe YM2149F chip built by Yamaha based on the General Instrument AY-3-8910 is the built-in soundchip in the Atari ST series of computers. This soundchip, comprised of only three audio oscillators producing a square wave and one noise generator, inspired me to start composing for soundchips. Although its limitations, which might make it sound a bit more dull than the SID, it is capable of producing some beatiful sounds. On this page you can find some of the tunes I have made for it.
Хотя микросхема YM2149F не имеет специальных возможностей для проигрывания оцифрованных звуков, оно может быть реализовано программно, с помощью использования 4-разрядного ЦАП одного или нескольких каналов при запрещённой логическим микшером генерации тона и шума. Такой подход требует большего использования времени процессора, чем при использовании микросхем, специально созданных для воспроизведения цифрового звука (таких, как чип Paula в компьютере Commodore Amiga). Но, тем не менее, он широко использовался на таких платформах, как компьютер Atari ST, для воспроизведения цифровой музыки, и на Amstrad CPC для воспроизведения коротких звуковых эффектов в некоторых играх.
Используя ту же технику, но не отключая генерацию тона, возможно расширить возможности генерации различных тембров. В этом случае изменение выходного уровня ЦАП канала используется для модуляции основного тона другой частотой. Таким образом можно получить, например, три независимых амплитудных огибающих любой формы, или тембры, напоминающее звучание микросхемы SID. Для эффективной реализации этого способа требуется наличие в системе возможности прерывания работы процессора с достаточно высокой частотой — например, на компьютере Atari SТ, где эта техника использовалась наиболее активно, применялось прерывание по началу строки растра. На системах, где таких аппаратных возможностей нет, для реализации подобного эффекта потребуется почти всё время процессора. Существует демонстрационная программа Digisid, реализующая эффект на компьютере ZX Spectrum, который не имеет аппаратных возможностей, подобных Atari ST.
В 2006 году два разработчика программ для компьютера MSX создали продвинутый энкодер, преобразующий wave-файлы в наиболее подходящие данные для каналов AY, используя алгоритм поиска Витерби. Это позволило воспроизводить wave-файл с частотой дискретизации 44100 Герц на компьютере MSX двадцатитрёхлетней давности, с соотношением сигнал-шум выше чем у 8-разрядного ЦАП. Алгоритм Витерби очень ресурсоёмок, он не мог применяться в 80-х годах, так как в то время не существовало достаточно мощных компьютеров для выполнения такого преобразования.
Некоторые люди, в особенности пользователи компьютера ZX Spectrum, используют микросхему AY для создания музыки, в том числе и для концертных выступлений...
В TS-Conf можно запрограммировать несколько источников маскируемого прерывания. Среди них:
- кадровый (frame, индекс 0),
- строчный (line, индекс 1),
- окончание DMA транзакции (dma, индекс 2).
Источник frame срабатывает, когда значение счетчиков растра совпадает с регистрами HSINT и VSINT.
Источник line срабатывает в каждой строке, когда горизонтальный счетчик растра равен 0.
Источник dma срабатывает после окончания любой транзакции DMA.
Каждый источник прерывания формирует сигнал ~INT и выставляет собственный байт D[7:0] на ШД в цикле ~IORQ || ~M1.
- $FF - кадровый,
- $FD - строчный,
- $FB - DMA.
Очень предварительный консепт.
1. General Concepts
В панельку от АУ-3-8910.
Эмулирует АУ и УМ по стандартной модели.
ФМ синтез не планируется. По крайней мере в ближайшем будущем.
Юзает набор доп регов 16-255.
Цифровой звук 12 бит, не менее 44.1кГц, стерео.
ХМ до 32 каналов со всеми фичами.
Возможность плея цифрового эффекта в любой из 32 каналов.
Возможность использования в качестве акселя.
Алсо, в тсконфе я предусмотрю для ДМА АУ как одно из устройств. В обе стороны.
Но работа зетником всегда возможна при отсутствии дмы.
Имеет на борту ОЗУ, мин 512кб, макс 4мб, скока не жалко.
Важный момент - защита от дурака на всех возможных уровнях для предотвращения неконтролируемого зависона.
2. Signaling
Сигналы BC1 и BDIR выбирают режим Latch/Read/Write.
По латчу - номер рега, по риду/райту - данные.
Ресет АУ заведен на апп. ресет арма.
По ресету арм должен быстренько приводить себя в состояние готовности АУ.
Например, тестирование ОЗУ можно отложить на вейтовую по статусу команду
перевода в состояние цифры или ХМ.
3. Programming model
Все те же порты FFFD и BFFD.
Реги 0-15 АУ. В режиме АУ все как у АУ.
Другие реги:
Status (чтение)
- Готовность принимать команду (рэди/бизи)
- Готовность принимать дату (по идее, безвейтовый, проц должен дату быстро принимать, но мало ли)
- Режим девайса (АУ/не АУ)
- Статус (ошибка/не ошибка)
етс.
Расширенные статусы (чтение)
- код ошибки
- расширенное состояние
- етц
Command (запись)
Прежде чем слать че попало - проверяем статус.
По состоянию статуса - знаем, что можно слать.
Какие команды могут быть:
- смена режима (АУ/аудио-дма/ХМ плеер)
- управление режимами (загрузка/плей/стоп)
Менеджер памяти внутренний.
Перед загрузкой модуля/сэмпла необходимо указать размер, при превышении размера свободной памяти вылетаем с ошибкой в статусе.
Предусмотреть удаление объектов с шринком хипа.
Переменные, связанные с плеерами.
- паттерн/нота/етц
Громкости
- глобальная (левый/правый)
- для каждого из каналов в левое/правое ухо. 0-255. 64 рега. Возможно запилить в виде 2х регов: номер канала/уха + громкость.
Версия (чтение)
После записи номера этого рега выдается хз скока байт стринга в кастомном формате,
содержащим инфу про девайс.
4. Output audio
12-бит ЦАП достаточен. Алсо, 12 бит всю жизнь было на расово копирастных ЦэДэ.
Стерео. Дискретизация 44100 или 48кгц.
Эмуляция АУ прямо в ЦАПы по обработке каждого тика.
Формирование цифрового потока идет асинхронно в буфер пачками по 1 тику плеера,
вывод в ЦАПы через ДМА.
Возможность плея цифрового эффекта в любой из 32 каналов
с заданием громкости в обоих ушах (панорамирование), динамически,
в том числе и во время проигрывания ХМ. Эффект играет в канале до его
окончания, паттерн данном канале игнорится до окончания эффекта (опционально).
Суммирование каналов производится путем сложения амплитуд с обрезанием амплитуды по 0 и 255.
Т.е. каждый из каналов играет с громкостью на весь ЦАП, а не 1/32, как в гс и нгс.
Обязательная интерполяция выходного потока.
Предлагается юзать линейную, как наиболее простую в реализации, и весьма эффективную.
5. Possible issues
Если на 14мгц дрочить порты АУ зетником на макс скорости,
проц должен адекватно на это реагировать, не тормозя, не вися, не глитчя.
Предусмотреть ситуацию, когда go sleep stupid user загрузит какое-нить
говно в плеер и даст плей. Т.е. защиту от дебила на всех возможных уровнях:
инит модуля, выполнение команд и тд, и реагировать на это адекватным статусом.
Если свершилось страшное и проц завис - спасает общий ресет.
Бага такого рода лежит на разрабе и подлежит фиксу.
Зависания в режиме АУ не должно быть в принципе.
Keeloq wrote:как продвигается проект?
Keeloq wrote:Будет возможность встроить в проект ym2612?
Users browsing this forum: No registered users and 1 guest