Вход

Просмотр полной версии : Алгоритм работы муз. сопроцессора AY-3-891x



Spectramine
02.02.2011, 18:28
Подскажите, плиз, где можно почитать по сабжу. Обычно в описаниях ограничиваются назначением регистров AY, без особой детализации, как на основе значений этих регистров формируется выходной сигнал. По крайней мере я ничего вразумительного для себя пока не нашёл.

Sinus
02.02.2011, 22:42
в сорсах любого эмулятора.
например, https://github.com/mkoloberdin/zemu/blob/master/src/lib_ay/ay_chip.cpp
смотри C_AyChip::Write() и C_AyChip::Flush()
(всё остальное - это завязка на эмулятор)

Spectramine
02.02.2011, 23:08
Спасибо. Но хотелось бы всё-таки почитать теорию. Тяжело разбираться в коде, имея только очень приблизительное представление о моделируемом устройстве и его функционировании. (Я сейчас как раз коды эмулей копаю, но большинство к тому же очень трудночитаемые).

Вот ты, когда свой эмуль писал, чем руководствовался при написании кода эмуляции AY? Только сорсами других эмулей?

goodboy
02.02.2011, 23:34
хотелось бы всё-таки почитать теорию
http://www.ym2149.com/ay8910.pdf

Spectramine
03.02.2011, 00:05
Спасибо, это я уже нашёл. Опять же, есть общая схема и расписаны регистры, а как сигналы формируются в целом, ниасиливаю. Это справочник для уже грамотных, а я ищу что-то типа инфоркомовской статьи. Пытаюсь понять, как формируются сигналы каждого блока (тон/шум/огибающая) и как они смешиваются.

Sinus
03.02.2011, 01:02
Вот ты, когда свой эмуль писал, чем руководствовался при написании кода эмуляции AY? Только сорсами других эмулей?

у меня AY основан на коде из анриала.
когда рефакторил, тогда уже смотрел доки и сорсы из других эмулей (в MAME код мутный, но авторы AY в MAME провели пару хороших исследований, там в комментах написано)


Пытаюсь понять, как формируются сигналы каждого блока (тон/шум/огибающая) и как они смешиваются.



if (++ta >= fa) { ta = 0; bitA ^= -1; }
if (++tb >= fb) { tb = 0; bitB ^= -1; }
if (++tc >= fc) { tc = 0; bitC ^= -1; }

это собственно весь AY :) (ну не весь, только тон, без шума и огибающей)

дальше по коду там 3 строчки на шум и чуть больше на огибающаю (про огибающую хорошо в доке написано, кстати)

Spectramine
03.02.2011, 01:46
Понятно. Ладно, буду с сорсами разбираться. А так хотелось почитать что-нибудь такое, научно-популярное :)

Vitamin
03.02.2011, 07:43
http://code.google.com/p/zxtune/source/browse/trunk/src/devices/aym/aym.cpp

Даже кой-какие комменты есть, даже с картинками:)

Sinus
03.02.2011, 20:53
Vitamin, имхо у тебя как-то перемудрено.
вместо одной строчки "if (++ta >= fa) { ta = 0; bitA ^= -1; }" имеется 4 функции, не считая этой самой строчки.
(это я так, просто сказал :) а то можно опять скатиться к C vs C++).

Vitamin
03.02.2011, 21:03
вместо одной строчки "if (++ta >= fa) { ta = 0; bitA ^= -1; }" имеется 4 функции, не считая этой самой строчки.
А не смущает, что там дополнительный функционал в этих строчках?

Даже скажу какой- генерация меандра с указанной скважностью, причем для каждого канала свой флаг для включения данной фичи.

Напиши пожалста такой код на С. Я посмотрю насколько он будет очевиднее, короче и оптимальнее.

psb
03.02.2011, 21:13
Напиши пожалста такой код на С. Я посмотрю насколько он будет очевиднее, короче и оптимальнее.
это уже начало холивара :)

Vitamin
03.02.2011, 21:15
это уже начало холивара
Чорд. Забыл сказать сразу, добавляю: "это я так, просто сказал" :)

Spectramine
03.02.2011, 22:04
А не смущает, что там дополнительный функционал в этих строчках?

Даже скажу какой- генерация меандра с указанной скважностью, причем для каждого канала свой флаг для включения данной фичи.

А вроде на настоящем AY скважностью нельзя управлять?

(а у меандра скважность фиксированная, равная 2 :) )

Sinus
04.02.2011, 01:08
А не смущает, что там дополнительный функционал в этих строчках?

Даже скажу какой- генерация меандра с указанной скважностью, причем для каждого канала свой флаг для включения данной фичи.

Напиши пожалста такой код на С. Я посмотрю насколько он будет очевиднее, короче и оптимальнее.

не не не дэвид блейн :), никаких холиваров сегодня.
я лучше иконки тебе в плеер нарисую.

(ну и так, не холивара ради - тот код, который относится к той строчке что я указал, переписывается на C почти один в один :) , я просто к чему - http://habrahabr.ru/blogs/java/112969/)

Vitamin
04.02.2011, 10:43
А вроде на настоящем AY скважностью нельзя управлять?

(а у меандра скважность фиксированная, равная 2 )
Нельзя. Просто попросили сделать такую фичу. Звук очень напоминает SID в результате.


не не не дэвид блейн , никаких холиваров сегодня.
я лучше иконки тебе в плеер нарисую.
То-то же :-D
Не холивара ради, а для себя просто напиши такую функциональность и попробуй разобраться с налету в собственном коде:)


(ну и так, не холивара ради - тот код, который относится к той строчке что я указал, переписывается на C почти один в один , я просто к чему - http://habrahabr.ru/blogs/java/112969/)
Ну ты хоть почитай что я пишу. Изначально там и была одна строчка:
http://code.google.com/p/zxtune/source/browse/tags/ver1/src/lib/devices/aym/aym.cpp

Потом добавилась поддержка скважности и интерполяция:
http://code.google.com/p/zxtune/source/browse/tags/ver2/src/core/devices/aym/aym.cpp
код уже стал крайне труден в поддержке.

Третий вариант (см. выше) более логичен и расширяем.