Эмулятор AY-3-8910/AY-3-8912/YM2149F

Эмулятор AY-3-8910/AY-3-8912/YM2149F

Эмулятор представляет собой прошивку для AVR микроконтроллера Atmega8/48/88/168/328.

 

Текущая версия эмулятора 26.0

Изменения: Исправлена работа генератора шума (данная версия микс версии 24.7 и генератора шума из 25.0)

Внимание! Данная версия не совместима с AYPlayer версий ниже 6.0!!!

AY_Emul_Version26_0 дата выхода 16.04.2020.

 

 

Предыдущие версии

 

Version 25.0 (В данной версии проблемы с производительностью, не используйте!)

Изменения: Исправлена работа микшера и генератора шума

Внимание! Данная версия не совместима с AYPlayer версий ниже 6.0!!!

AY_Emul_Version25_0 дата выхода 11.09.2019.

 

Version 24.7

Изменения: Исправлена работа генератора шума и других генераторов

Внимание! Данная версия не совместима с AYPlayer версий ниже 6.0!!!

AY_Emul_Version24_7 дата выхода 08.07.2017.

 

Version 24.6

Изменения: Исправлена работа в параллельном режима, он практически не работал в версиях 24.3-24.5 и никто не сказал 🙂

Поддерживаются: Atmega8/48/88/168/328

Внимание! Данная версия не совместима с AYPlayer версий ниже 6.0!!!

AY_Emul_Version24_6 дата выхода 08.05.2017.

 

 

Version 24.5

Изменения: добавлены таблицы громкости для эмуляции AY/YM, добавлены версии для Atmega48/88/168/328!

Внимание! Данная версия не совместима с AYPlayer версий ниже 6.0!!!

AY_Emul_Version24_5 дата выхода 15.02.2017 (исправленная версия).

 

Version 24.4

Изменения: еще больше оптимизации, а так же оптимизирован параллельный режим!

Внимание! Данная версия не совместима с AYPlayer версий ниже 6.0!!!

AY_Emul_Version24_4 дата выхода 25.09.2016.

AY_Emul_244_m48 дата выхода 13.02.2017 (для Atmega48)

 

Version 24.3

Изменения: проведена большая работа по оптимизации эмулятора.

Внимание! Данная версия не совместима с AYPlayer версий ниже 6.0!!!

AY_Emul_Version24_3 дата выхода 20.09.2016.

 

Version 24.2

Изменения: улучшен генератор шума, улучшено микширование каналов, новая таблица громкости.

Внимание! Данная версия не совместима с AYPlayer версий ниже 6.0!!!

AY_Emul_Version24_2 дата выхода 25.08.2016.

 

 

АРХИВ ДВУХКАНАЛЬНЫХ ВЕРСИЙ

АРХИВ ТРЕХКАНАЛЬНЫХ ВЕРСИЙ

 

[ad name=»HTML»]

Прошивка прошивается с помощью avrdude и USBAsp программатора стандартным способом

Строка для запуска

Для всех кварцев, кроме встроенного

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

Для кварцев с частотой до 16MHz включительно (режим энергосбережения)

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

Для внутреннего кварца с частотой 8MHZ

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

AVRDUDE можно скачать здесь avrdude или с сайта разработчика

Схема подключения усилителя к двухканальной версии

outputcircuit2ch

Данные RC фильтры обрезают частоты ниже 20 Гц и выше 48 кГц, так что вы можете спокойно подключить эту схему к звуковой карте или усилителю, в оригинальной схеме RC фильтр был построен неправильно.

Если вы собираетесь прослушивать эмулятор в наушниках, то RC-фильтр не требуется и можно подключать их напрямую к PB1 и PB2.

Схема с подмешиванием бипера (для ZX-Spectrum)

outputcircuit2ch_speaker

EMULATOR PIN MAPPING TO AY-3-8910

pinmap2ch

[ad name=»HTML»]

66 thoughts to “Эмулятор 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 да и ресет придется реализовывать через питание.

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

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

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

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

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

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

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

  8. I have a few more questions (sorry, in English only):

    — The emulator can be found for 1.75 mhz (spectrum, or more precisely, Pentagon, as the spectrum should be 1,77 mhz) and 2 mhz (atari st). Do you think it could be possible to get a version of the emulator for the Amstrad CPC as well? The frequency for this one is 1 mhz, so if we play it on the emulator, it’s too high pitched! Or how could it be generated. I guess with a crystal running at half the speed of the configuration, it won’t work this easily?

    — now it seems the emulator and the configurations for the crystal are on two different files. Is there an advantage to use an external crystal instead of the 8 mhz of the arduino? Or was it less precise? (the same for the power-saving one at 16 mhz)

    1. Evgeniy explained the configuration in one of Russians forum and over the email as follows:

      «About ICR value…
      It is used to limit time period in timer interrupt and as maximal value for Fast PWM.
      ICR value calculated as (AVR_crystal_value/PSG_generator_freq/2-1). Division by 2 is used because for 1Hz wave we need 2 timer interrupts, for set output to 1 and back to 0 with duty cycle 50%. As ICR uses only integer values we need to round it. So for 1.78 is better to use 120.

      Config file consists of 4 bytes.
      1) USART_ENABLE: 0 — disable, 1-enable (if enabled serial mode active)
      2) INT_ENABLE: 0 — disable, 1-enable (if enabled parallel mode active)
      3) ICR_VAL value of ICR calcilated as if formula above
      4) UBRRL_VAL value setting speed of serial interface (according to used crystal value)

      So, you can write binary file with these 4 values and convert using bin2hex utility.»

      In your case using the serial mode, 24MHz crystal and emulating 1MHz AY the config would be as follow:
      4 bits in hex values: 0x 01 00 BF 33

  9. thanks a lot Klaud, it works perfectly according to your values!

    For 1 MHz replay like on Amstrad with a 24 MHz crystal I’ve created a file with this content:

    :050000000100BF33FF09
    :00000001FF

    For the last 2 digit I wasn’t sure what to use, but it looks like it’s some kind of checksum. It found 09 with this hex file so I’ve set it this way to avoid a checksum error!

    For the formula, the numbers are in hz and the psg_generator value is multiplicated by 16 so it will be like this:

    ay serial 24 mhz 1.00 mhz:
    (24000000×(16/2)/1000000)−1
    =191 = BF

    (found original thread on zx-pk.ru but I can’t write the full url here because of spam filter)

  10. Добрый день, не могу запустить прошивку, eeprom и flash прошил, выставил на внешний кваррц, кварц стоит 27 мгц, фьюз СКОРТ включил, пробовал разные прошивки и другие контроллеры, иногда слышны шипения и разные звуки, шил через avrdude только оконное приложение не командная строка, ничего не пойму не запускается ничего. контроллер atmega8-16pu рабочий мои программы на нем работаю без проблем, помогите может есть нюанс какойто

    1. atmega8-16pu изначально подразумевает кварц 16 МГЦ, 27МГц это уже разгон контроллера, SMD версии микроконтроллера легко тянут частоту до 24 МГц, дальше идет лотерея, тянет — не тянет, видимо не повезло с конкретным экземпляром. Еще есть момент, в разных ZX клонах реализация AY сделана по-разному, в каких-то грамотно, в каких-то не очень, тогда сигналы BC1/BDIR могут приходить не очень удачно и контроллер не успевает их обрабатывать

  11. I’m sorry to say but I cant get it to work at all.
    What Xtal is needed for a mega88 for 3ch parallel? currently I’m using 27MHz.
    I get sound but it is out of tune and not really possible to recognize the song. Circuit works with an original ym2149.
    25MHz was choppy, but at least you could recognize the tune.

    ./avrdude -p m88 -c avrispmkii -U flash:w:AY_Emul_250_3ch_m88_ym.hex -U eeprom:w:../../Configs/27MHz/Conf_parallel_27MHz_2Mhz.hex -U lfuse:w:0xee:m -U hfuse:w:0xdd:m -U efuse:w:0xff:m

    Do I need a faster Xtal for parallel 3ch?

    The closest I got to get anything resembling a proper output was using an mega328p with 20MHz xtal but flashing the eeprom config to 40MHz. At least I got the tune out, even when the tuning was off. the current 27MHz version on the mega88 just sounds like random noise and square wave sounds :((

    any help welcome!

      1. nope tuning is off. the track sounds an octave oe morw too low with 40MHz xtal 🙁 but tuning in itself seems right.
        ./avrdude -p m88 -c avrispmkii -U flash:w:AY_Emul_250_3ch_m88_ym.hex -U eeprom:w:../../Configs/40MHz/Conf_parallel_40MHz_2Mhz.hex -U lfuse:w:0xee:m -U hfuse:w:0xdd:m -U efuse:w:0xff:m

        any help welcome. I’m about to give up 😉

          1. where to use the capacitor? or just change the value of the 2 load capacitors? I just read to add a resistor.
            I checked with a scope and the 40MHz xtal currently runs at 13MHz :-/
            At least I got a Pointer now.

            Whats the minimum xtal freq so 3ch parallel works? 40 is quite high!

            1. Yes, I mean oscillator load capacitors to start oscillator at appropriate harmonics.
              For parallel mode 24MHz is the lowest value. 40MHz should work well if it is true 40MHz and AVR works at this frequency, but my experience show that only 1 from 40 Atmega8 works at 40MHz, only 1 48A from 10 etc…

                1. It works!
                  I tried the 27MHz version with the choppy sound in another host/driver pcb and now it works like a charm.
                  Before I used an arduino to stream .ym files via serial and all I got was choppy audio.
                  Now with a dedicated player PCB the chip suddenly works. An original YM chip worked with both driver/host solutions.

  12. Звучит супер «тепло» и по «лампово»
    На Атмеге 328p u
    И по RX //
    И по полному коннекту //
    На 25-ом кварце.
    Слушаю музон, вспоминаю прошлое ))

  13. На атмеге 328 надо по схеме два плюса и два минуса подключить. Resset (1) нога через 10 Ком на +
    Между ногами 7 и 8 полярный кондер на 22 Мкф

  14. На 25Mz работает с ком портом (через AYPlayer_v136) и параллельный режим, на 40Mz только параллельный режим. Запускал на arduino uno c 328p. Версия эмулятора 26.0.

  15. Hi again, I made this video about an issue with the 3-channel firmware: https://www.youtube.com/watch?v=r5fgRy2_kqM
    So the volume of the third channel is a lot lower, although I can’t find a cause for that in the source of the firmware.
    I’m using AVR-AY v26, set to AY levels, with 24MHz clock, and ATMega48. I disconnected the output pins from the application like ZX-AY or Harlequin 128 board, to make sure the cause is not in the analogue mixing on the board where the AVR-AY is on.
    Of course I started with testing on speakers, where I discovered the issue.
    Tried different firmwares: older versions, YM volume levels, with speaker firmware, but nothing helped.
    I’m really curious what could be causing this, could you help maybe?

Добавить комментарий

Ваш адрес email не будет опубликован.