User Tag List

Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 20

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

  1. #1

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,377
    Спасибо Благодарностей отдано 
    1,696
    Спасибо Благодарностей получено 
    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
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2

    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    14,289
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    202
    Спасибо Благодарностей получено 
    1,456
    Поблагодарили
    946 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    LVD (по этому реверсу) делал verilog модель
    https://github.com/lvd2/ay-3-8910_reverse_engineered

  4. #3

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

    По умолчанию

    Цитата Сообщение от goodboy Посмотреть сообщение
    LVD (по этому реверсу) делал verilog модель
    https://github.com/lvd2/ay-3-8910_reverse_engineered
    Да. Но у них эта модель для симуляции, не для реализации в FPGA. Она не синхронная.

  5. #4

    Регистрация
    19.01.2005
    Адрес
    Наро-фоминск
    Сообщений
    2,011
    Спасибо Благодарностей отдано 
    510
    Спасибо Благодарностей получено 
    207
    Поблагодарили
    126 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Круто, уже есть реверс-инженеринг ULA, z80, вгшки, теперь ещё и AY. В итоге спек может быть проэмулирован на 99.99% ?
    Haiku OS - духовный последователь AmigaOS! Welcome на борт MK4 с зоопарком операционных систем, в наш космо-десант, Special Forces, в крайний отсек корабля, уходящего в гиперпрыжок, на поиски Раккслы и эры Встретившихся рук, в Час Быка, Звездное Наследие за нами!!!
    https://t.me/haiku_ru

  6. #5

    Регистрация
    19.01.2005
    Адрес
    Санкт-Петербург
    Сообщений
    11,551
    Спасибо Благодарностей отдано 
    205
    Спасибо Благодарностей получено 
    188
    Поблагодарили
    83 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Отечественной ULA нет.

    А есть ли фото кристала AY/YM?

  7. #6

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

    По умолчанию

    Цитата Сообщение от newart Посмотреть сообщение
    А есть ли фото кристала AY/YM?
    Да, в одной из папок по ссылке, которую выше давал goodboy.

  8. #7

    Регистрация
    01.02.2010
    Адрес
    Москва
    Сообщений
    769
    Спасибо Благодарностей отдано 
    178
    Спасибо Благодарностей получено 
    191
    Поблагодарили
    91 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Да. Но у них эта модель для симуляции, не для реализации в FPGA. Она не синхронная.
    На основе реверса LVD испанец JOTEGO сделал реализацию AY / YM. https://github.com/jotego/jt49

    Этот пользователь поблагодарил xolod за это полезное сообщение:

    Titus(01.12.2025)

  9. #8

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

    По умолчанию

    Цитата Сообщение от xolod Посмотреть сообщение
    На основе реверса LVD испанец JOTEGO сделал реализацию AY / YM. https://github.com/jotego/jt49
    Только не LVD, а deathsoft'а.

    А YM откуда испанец брал?

  10. #9

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

    По умолчанию

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

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

    daniel(01.12.2025)

  11. #10

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

    По умолчанию

    Еще раз обновил. Исправил полярность F1. С делителя она шла как F1, а на счетчики приходила как /F1.

    - - - Добавлено - - -

    И еще раз обновил.
    Пересмотрел внимательно транзисторный вариант, и понял, что RS-триггеры в блоках счетчиков сокращать нельзя, т.к. они являются защитой от дребезга при записи в регистры.
    Если без них, то от переходных процессов при записи нового значения в регистр может срабатывать не только компаратор, сбрасывая значение счетчика. Но еще и несколько раз бы переключился выход счетчика (TONE_A,B,C, F4, F_ENV). А с RS-триггеры защищают от множественного переключения, хотя и не защищают от сброса счетчика, как было замечено в основном описании.

Страница 1 из 2 12 ПоследняяПоследняя

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

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

Эту тему просматривают: 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

Ваши права

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