User Tag List

Показано с 1 по 10 из 20

Тема: Реверс-инжиниринг AY-3-8910

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,378
    Спасибо Благодарностей отдано 
    1,697
    Спасибо Благодарностей получено 
    2,217
    Поблагодарили
    871 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию Реверс-инжиниринг AY-3-8910

    Несколько лет назад мне попалась замечательная работа по транзисторному реверс-инжинирингу AY-3-8910 от deathsoft'а.
    Но только сейчас руки дошли сделать из этого логическую схему, попутно исследуя особенности работы чипа.

    Итак, начнем (под спойлером):

    Скрытый текст


    Особенности работы схемы сброса RES:

    1. Генератор шума, счетики периода тона для трех каналов, счетчик периода огибающей и счетчик периода шума сбрасываются в 0.
    2. Имитируется выборка всех 16 регистров, на внутреннюю шину B0..7 выдается 0, активируется сигнал REG_WR, по которому одновременно во все 16 регистров записываются 0.
    3. Счетчик формы огибающей записывается 0.


    Недокументированный выход TEST1:

    На выход TEST1 напрямую выдается сигнал F_ENV (выход генератора частоты огибающей).
    Таким образом, при желании, если отказаться от подмешивания огибающей в основные каналы, можно получить 4-й независимый голос фиксированой громкости.


    Недокументированный вход TEST2:

    Если на входе TEST2 логическая '1', то блокируются внутренние сигналы REG_WR и DA_OUT_EN, что фактически эквивалентно отключению AY-3-8910 с шины.
    Иными словами, вход TEST2 можно обозначить как /CS (Chip Select).


    Глюки при записи новых значений в счетчики тона трех каналов, огибающей, генератора шума:

    Из-за того, что запись в регистры не синхронна с тактовой частотой AY-3-8910, если момент записи попадает в активную фазу CNT_CLK, может произойти ситуация, когда компаратор счетчика даст ложное срабатывание. Это происходит потому, что сравнение счетчика со значением регистра происходит в тот момент, когда значение регистра изменяется, т.е. не стабилизировалось. В норме, если у нас в регистре записано число 100, а счетчик досчитал до 10, то при записи нового значения 200, счетчик продолжит считать до нового значения 200. Т.е. периоды будут 100, 100, 200, 200 и т.д. Если же запись произошла в момент активной фазы сравнения (CNT_CLK), то счетчик может сбросится, и мы получим такие периоды: 100, 100, 10, 200, 200 и т.д. Что будет слышиться на слух как щелчок.

    Из перечисленного следует, что наиболее благоприятная схема тактирования AY-3-8910 должна удовлетворять двум требованиям:
    1. Тактироваться от того же источника, что и процессор, производящий запись в регистры AY-3-8910.
    2. Цикл начала записи (нестабильная фаза изменения на шине) не должен попадать на сигнал CNT_CLK. Чего, впрочем, достичь сложно, т.к. цикл CNT_CLK генерируется каждый 8-й такт CLK, и его позиция зависит исключительно от времени окончания сигнала RES.

    Резюме - скорее всего избежать случайных 'иголок' при записи новых значений в генераторы тона каналов A,B,C, огибающей и шума - практически невозможно.


    Подтягивающие ESD-резисторы на землю:

    Все входы имеют защитные ESD-резисторы на землю. Судя по всему, они же являются слабыми (несколько мегаом) подтягивающими резисторами, позволяющими оставлять неиспользуемые выводы в воздухе. Впрочем, лучше этим не злоупотреблять, а сажать неиспользуемые выводы на землю принудительно.


    Порты ввода-вывода IOA и IOB:

    Порты являются одновременно и входами, и выходами с открытым коллектором, и с внутренними подтягивающими резисторами на плюс питания. При записи в регистры R16 и R17 записываются новые значения в порты IOA и IOB, соответсвенно. При чтении регистров R16 и R17 всегда читается фактическое текущее значение портов, а не содержимое регистров.


    Чтение нереализованных битов в регистрах:

    При чтении нереализованных битов в регистрах, в нормальных условиях читается 0, т.к. перед циклом чтения внутренняя шина B0..7 предзаряжается нулем. Однако, если цикл чтения будет очень долгим, есть вероятность, что эти биты 'поплывут'.


    Генератор шума:

    Генератор шума основан на 17-битном регистре сдвига с линейной обратной связью (LFSR) с использованием примитивного многочлена P(x)=x^17+x^14+1 с периодом 131071 циклов.


    Нелинейность ЦАП:

    Судя по исследованиям реальных чипов AY-3-8910, шкала громкости отличается от идеальной с шагом SQRT(2).

    Реальные измеренные значения громкости примерно такие (исследования от DDp):

    00: 0.00
    01: 0.99
    02: 1.43
    03: 2.08
    04: 3.05
    05: 4.57
    06: 6.46
    07: 10.63
    08: 12.79
    09: 20.57
    10: 29.35
    11: 37.23
    12: 49.27
    13: 63.54
    14: 80.55
    15: 100.0

    Что делает звуковую характеристику AY более пологой, чем на YM, благодаря чему тихие звуки не так теряются на фоне громких, что работает как естественная компрессия.


    Изменение наименований сигналов относительно транзисторной схемы deathsoft'a:

    RST_1 -> RST
    /F1 -> F1
    /SEL_EA -> ENV_INV
    /F_ENV -> F_ENV
    F4 -> F_NOISE
    BDIR_1 -> BDIR
    BC2_1 -> BC2
    BC1_1 -> BC1


    Остальные переименования незначительны.

    [свернуть]


    Обновление:
    Небольшие косметические правки в основной схеме, и добавлена почти синхронная версия схемы, без двунаправленных шин и большинства латчей. Латчи в регистрах оставлены, т.к. переделывание их в триггеры приведет к тому, что момент обновления регистров сдвинется во времени, что приведет к расхождению в таймингах с оригинальным чипом. В оригинальном чипе регистры в момент записи прозрачны для шины, и как только на шине появляется новое значение (еще не стабилизированное в начале цикла записи), оно же появляется в регистрах и сразу доступно компараторам счетчиков.
    Вложения Вложения
    Последний раз редактировалось Titus; 14.12.2025 в 18:14.

    Эти 13 пользователя(ей) поблагодарили Titus за это полезное сообщение:

    and1981(30.11.2025), CityAceE(30.11.2025), CodeMaster(30.11.2025), creator(01.12.2025), daniel(01.12.2025), Mick(30.11.2025), org(01.12.2025), Pyk(01.12.2025), Reobne(01.12.2025), SegaBoy(30.11.2025), SoftFelix(01.12.2025), zebest(01.12.2025), Копейкин(10.12.2025)

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Реверс-инжиниринг Z80
    от Titus в разделе Программирование
    Ответов: 802
    Последнее: 22.05.2025, 13:19
  2. Ответов: 72
    Последнее: 12.05.2025, 23:53
  3. Ответов: 32
    Последнее: 18.12.2024, 18:19
  4. Реверс-инжиниринг игры Boovie
    от Oleg N. Cher в разделе Программирование
    Ответов: 41
    Последнее: 09.01.2022, 23:07
  5. Реверс инжиниринг печатной платы
    от Filin в разделе Несортированное железо
    Ответов: 36
    Последнее: 11.03.2018, 22:46

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •