Emulator AY-3-8910/AY-3-8912/YM2149F

The Emulator is firmware for AVR microcontroller Atmega8/48/88/168/328.

 

 

Current version 24.7

Changes: Improved noise generator and fixed other generators

This version is incompatible with AYPlayer below version 6.0!!!

AY_Emul_Version24_7  08.07.2017 (fixed version).

 

Previous versions

Version 24.6

Changes: fixed HUGE problem in parallel mode (versions 24.3-24.5)

Supported: Atmega8/48/88/168/328

This version is incompatible with AYPlayer below version 6.0!!!

AY_Emul_Version24_6  08.05.2017 (fixed version).

 

Version 24.5

Changes: added 2 volume tables for AY and YM, added versions for Atmega48/88/168/328

This version is incompatible with AYPlayer below version 6.0!!!

AY_Emul_Version24_5  15.02.2017 (fixed version).

 

Version 24.4

Changes: even more optimization! + read mode optimization

This version is incompatible with AYPlayer below version 6.0!!!

AY_Emul_Version24_4  25.09.2016.

AY_Emul_244_m48  13.02.2017 (for Atmega48)

Version 24.3

Changes: super optimization!

This version is incompatible with AYPlayer below version 6.0!!!

AY_Emul_Version24_3  20.09.2016.

Version 24.2

Changes: improved noise generator, better channels mixing, new volume table.

This version is incompatible with AYPlayer below version 6.0!!!

AY_Emul_Version24_2  25.08.2016.

 

TWO CHANNEL VERSIONS ARCHIVE

 

THREE CHANNEL VERSIONS ARCHIVE

 

 

How to upload firmware

Use avrdude & USBAsp

For all oscillators except internal

avrdude -b 19200 -p atmega8 -c USBasp -U flash:w:emul25mhz.hex -U lfuse:w:0xCE:m -U hfuse:w:0xC5:m
or
avrdude -b 19200 -p atmega8 -c USBasp -U flash:w:emul25mhz.hex -U lfuse:w:0xCF:m -U hfuse:w:0xC7:m

For oscillators with frequency <=16MHz (power save)

avrdude -b 19200 -p atmega8 -c USBasp -U flash:w:emul16mhz.hex -U lfuse:w:0xCE:m -U hfuse:w:0xD5:m

For internal oscillator 8MHZ

avrdude -b 19200 -p atmega8 -c USBasp -U flash:w:emul8mhz.hex -U lfuse:w:0x24:m -U hfuse:w:0xC5:m

 

You can download AVRDUDE here avrdude or from developer site

Output circuit for 2 channel version

outputcircuit2ch

These RC-Filters cuts frequencies below 20 Hz and above 48 kHz, so you can simply connect it to your sound card or amplifier. This circuit generates about 50mV output.

EMULATOR PIN MAPPING TO AY-3-8910

pinmap2ch

41 thoughts on “Emulator AY-3-8910/AY-3-8912/YM2149F

  1. Вчера подключил эмулятор к реалу (Дельта-С)

    Кварц 25 Мгц. Иногда слышны артефакты (чего не было в последовательном режиме), буду пробовать ставить более высокочастотный кварц.

    Режим чтения, как и в оригинале эмулятора не реализован (в демках индикаторы уровня “стоят”)?

    Схема

    Печатка

    1. Если на 27 будут артефакты (особенно на версии 12.3) – сообщите.
      Насчет режима чтения… в принципе, это можно реализовать на регистре сдвига или может найду какой способ попроще.
      Попробую сделать как вернусь из отпуска (неделя-две), а может и сегодня, если успею.

  2. Удалось на 8 меге сделать всё-таки режим чтения, индикаторы в SUPREME замигали и в других проигрывателях. Отпишитесь по результатам тестов, если будут какие-то проблемы, поправлю как вернусь.

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

    1. 12.4 проверял в разных режимах на живом железе, всё отлично работало на 27 МГц, если у вас есть еще атмеги, попробуйте другую поставить, может в ней дело, у меня тоже не все хорошо работают, некоторые не тянут нормально 27 МГц.

      PS: да, у меня атмега на место AY подключена напрямую, без всяких конденсаторов по питанию и на RESET, может еще в этом дело.

  4. На 12.3 все нормально работает. Мегу можно и поменять, у меня из старой партии 8 ые остались, но здесь использую из новой партии 8а.
    Еще у меня есть идея заменить 155ЛА3 на что-то более высокочастотное, но с другой стороны частота там в рамках 155 серии.

    1. Подключил, всё отлично работает в версии 12.4, правда RAMDOCTOR не находит AY в тесте, но это наверное потому что он шлет в него 255, а т.к. возвращается всего 6 бит, то он его и не видит, но вроде везде всё играет и откликается.

    1. В галерею закинул картинку, схема исправленная, за основу взял от магик-05 и от ленинграда, после чего исправил неработающий AY в схеме от ленинграда, очень хочется попробовать реализовать эту схему на атмеге на встроенном кварце, может что из этого и получится… получится вся доработка вместе с AY на двух мегах и одной ла3 🙂 заодно и больше бит с шины адреса обработать

    2. Оказывается у меня была 12.4 трехканальная, всё работало хорошо, прошил двухканальную, тоже получил шум, но после ресета всё стало нормально, видимо проблема в начальной инициализации, попробую сейчас поправить.

      Всё, исправил, можно пользоваться 🙂

    1. Отлично что работает, у меня тоже работает хорошо, жалко только одного 7-го бита не хватило на меге 8 чтобы сделать так чтобы в тестах чип нормально определялся, т.к. тесты проверяют 6 бит 0-го регистра AY…. 🙁
      В 12.5 немного улучшена часть обработки данных в параллельном режиме, т.е. работает немного пошустрее.
      Не знаю, есть ли смысл менять местами биты 6 и 5 для нормального определения в тестах или нет.
      Пробовал сделать все 8 бит, но т.к. они на разных портах, а при записи в 2 порта, чтение происходит только по фронту первого, то второй порт не читается, т.е. либо биты 6,7, либо 0-5… а в микроконтроллере регистра позволяющего сделать вывод одновременно в несколько портов нету 🙁 а так было бы замечательно всё ((( еще как вариант приспособить ресет под это дело… но это опасно, если нету FUSE BIT DOCTOR да и ресет придется реализовывать через питание.

  5. Прошил 12.5 – в Lyra II во второй части (с индикаторами) индикаторы стали неправильно работать – только изредка дергаются. Отктился обратно на 12.41

    1. Да, там есть такое, самая лучшая сейчас версия 15.0, в ней очень сильно оптимизирована часть генерирующая звук и увеличено время обработки прерываний по BC1/BDIR, так же в связи с исправлением микшера теперь более качественный шум, видимо он в более старых версиях и дает на ваших примерах искажения. Я вчера сверялся с оригинальным чипом AY-3-8910, в нем именно такой шум, как в версии 15.0. А в более ранних было наследие оригинальной версии.

      1. В моих примерах слышно, как МК не успевает обрабатывать поток, шум я не сравнивал. Примерно то же самое было, когда не успевала 25 МГц версия.

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

        1. Я сейчас протестировал на Кворум-Бк04 версию 15.1, вообще никаких артефактов, всё справляется отлично. А в оригинале было много недоработок, вообще удивительно как там работал параллельный режим 🙂 Но, благодаря оригиналу получилось то, что есть сейчас.
          В оригинале с шумом было так, если тон и шум, то амплитуда удваивалась, если в микшере тон и шум и заданы тон или шум, то шла единица в канал, а по информации из надежных источников, например отсюда http://www.cpcwiki.eu/index.php/PSG#07h_-_Mixer_Control_Register должно быть так, что если в микшере тон и шум, то обычная амплитуда, если в канале одновременно тон и шум, и тишина, если не оба сразу.

          PS: тестируйте сразу 15.1, предыдущие смысла особо нет тестировать 🙂

          PPS: мне сейчас даже непривычно слушать некоторые композиции, к которым я уже привык, т.к. они звучат совсем по-другому 🙂 вот что значит небольшая ошибка в микшере…

        2. Сейчас подумал, почему у вас может быть проблема со звуком, проверил на нескольких МК, такая проблема, если МК плохо тянет 27МГц, я то тестирую на МК который тянет 40МГц (правда из 40 штук такой один оказался). Во-общем, версия 15.3 отлично тянет кристаллы 24+МГц, возможно и 20МГц, во всяком случае у меня звучала нормально. Так что рекомендую кристалл 24-25МГц и версию 15.3
          Еще рекомендую, если пойдет, заменить серию 74LS на 74HC, у меня заметно лучше стало работать на ZX

            1. МК не может не успевать, т.к. он тянет даже на 16МГц, скорее всего что-то с сигналами BC1/BDIR или МК не тянет кристалл.
              А какие микросхемы используете для получения BC1/BDIR и кварц? у меня тоже было такое, пока не поставил 74HC вместо 74LS, еще попробуйте другой МК или кварц с частотой поменьше, во-общем, похоже на то что плохо согласуются уровни CMOS/TTL

              1. На эту же плату с помощью МГТФ и DIP40 панельки был подключен реальный YM, там же был сделан генератор на 3,5 Мгц. Звук нормальный.

                1. А не пробовали ставить кварц с частотой поменьше на эмулятор? может ваша атмега не тянет просто такую частоту, например, 20 МГц

                  1. Она на Спектруме нормально работает, а на Векторе ненормально. На Векторе стоит ВМ80 (работающий на 3 МГц) и сигнал WRIO формируется с помощью нескольких микросхем и в итоге его длительность много меньше аналогичного у Z80

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

  6. Там еще несколько интересных моментов имеется. На оригинальной версии эмулятора на atmega8515 я в итоге добился нормальной работы (на запись) – взял WRIO немного в другом месте (http://zx-pk.ru/showpost.php?p=754229&postcount=25). На вашем варианте – изменения есть, но они незначительные.
    На чтение не работает не оригинальная версия, ни ваша версия.
    На ZX ваша версия работает замечательно, оригинальную не проверял.

    1. Ну да, потому что генерация (дискретизация) происходит в 2 раза быстрее, чем на предыдущих версиях, т.е. звук более качественный. Так же огибающая теперь генерируется более точно, за счет 32 уровней, ранее нулевой период был в раза медленнее, что в произведениях с быстрой огибающей делало её более низкой по звучанию (хотя, это спорно, т.к. частота всё-равно та же у тона).

  7. Здравствуйте. А можно Вашу прошивку , последнюю например, или какую другую залить в attiny2313. Как я себе понимаю, что в меге, что в тине используются одни и те же регистры, по размеру собственно программы и еепрома то же конфликтов нет. Или может есть какая то тонкость, которую с первого раза не видно?
    С уважением.

    1. Есть тонкость, я уже делал версию под этот контроллер, без поддержки режима чтения никаких проблем нет. Если режим чтения пытаться реализовать, то возникает проблема в том, что на втором порту находятся выводы PWM, в Atmega8 они на отдельном от ввода/вывода данных порту. Плюс пины внешних прерываний расположены так, что они пересекаются с PWM, т.е. нельзя быстро совместить данные с двух портов без дополнительных сдвигов, что приводит к нестабильной работе в параллельном режиме.

  8. Здравствуйте. Скажите, а где можно было бы ознакомиться с проектом под тини? Схема, как я понял, полностью совпадает с исходником. Как я себе понимаю, мне режим поддержки чтения не нужен. Я хочу поставить эмулятор в клон спектрума.
    С уважением.

    1. Как раз таки он вам и нужен, он нужен именно для работы в спектруме, чтобы работали индикаторы в проигрывателях и демках.

Leave a Reply

Your email address will not be published. Required fields are marked *