Просмотр полной версии : Алгоритм работы муз. сопроцессора AY-3-891x
Spectramine
02.02.2011, 18:28
Подскажите, плиз, где можно почитать по сабжу. Обычно в описаниях ограничиваются назначением регистров AY, без особой детализации, как на основе значений этих регистров формируется выходной сигнал. По крайней мере я ничего вразумительного для себя пока не нашёл.
в сорсах любого эмулятора.
например, 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? Только сорсами других эмулей?
хотелось бы всё-таки почитать теорию
http://www.ym2149.com/ay8910.pdf
Spectramine
03.02.2011, 00:05
Спасибо, это я уже нашёл. Опять же, есть общая схема и расписаны регистры, а как сигналы формируются в целом, ниасиливаю. Это справочник для уже грамотных, а я ищу что-то типа инфоркомовской статьи. Пытаюсь понять, как формируются сигналы каждого блока (тон/шум/огибающая) и как они смешиваются.
Вот ты, когда свой эмуль писал, чем руководствовался при написании кода эмуляции 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
Понятно. Ладно, буду с сорсами разбираться. А так хотелось почитать что-нибудь такое, научно-популярное :)
http://code.google.com/p/zxtune/source/browse/trunk/src/devices/aym/aym.cpp
Даже кой-какие комменты есть, даже с картинками:)
Vitamin, имхо у тебя как-то перемудрено.
вместо одной строчки "if (++ta >= fa) { ta = 0; bitA ^= -1; }" имеется 4 функции, не считая этой самой строчки.
(это я так, просто сказал :) а то можно опять скатиться к C vs C++).
вместо одной строчки "if (++ta >= fa) { ta = 0; bitA ^= -1; }" имеется 4 функции, не считая этой самой строчки.
А не смущает, что там дополнительный функционал в этих строчках?
Даже скажу какой- генерация меандра с указанной скважностью, причем для каждого канала свой флаг для включения данной фичи.
Напиши пожалста такой код на С. Я посмотрю насколько он будет очевиднее, короче и оптимальнее.
Напиши пожалста такой код на С. Я посмотрю насколько он будет очевиднее, короче и оптимальнее.
это уже начало холивара :)
это уже начало холивара
Чорд. Забыл сказать сразу, добавляю: "это я так, просто сказал" :)
Spectramine
03.02.2011, 22:04
А не смущает, что там дополнительный функционал в этих строчках?
Даже скажу какой- генерация меандра с указанной скважностью, причем для каждого канала свой флаг для включения данной фичи.
А вроде на настоящем AY скважностью нельзя управлять?
(а у меандра скважность фиксированная, равная 2 :) )
А не смущает, что там дополнительный функционал в этих строчках?
Даже скажу какой- генерация меандра с указанной скважностью, причем для каждого канала свой флаг для включения данной фичи.
Напиши пожалста такой код на С. Я посмотрю насколько он будет очевиднее, короче и оптимальнее.
не не не дэвид блейн :), никаких холиваров сегодня.
я лучше иконки тебе в плеер нарисую.
(ну и так, не холивара ради - тот код, который относится к той строчке что я указал, переписывается на C почти один в один :) , я просто к чему - http://habrahabr.ru/blogs/java/112969/)
А вроде на настоящем 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
код уже стал крайне труден в поддержке.
Третий вариант (см. выше) более логичен и расширяем.
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot