подожди, а разве в MAME не было кода эмуляции нижних регистров YM? может проще взять полностью FM+SSG?Сообщение от Dexus
подожди, а разве в MAME не было кода эмуляции нижних регистров YM? может проще взять полностью FM+SSG?Сообщение от Dexus
Там эмулятор AY8910 - отдельный. Там вообще много каких процессоров есть эмуляции. Но они все через извратную систему драйверов (хотя на самом деле куда более удобно чем у Вас, потому как разрабатывалось унифицировано, и ради расширябельности свободной).Сообщение от SMT
Конкретно AY8910 подключается по указателю, как практически отдельный эмулятор, и просто на него ссылается, и передаются ему регистры. Так же как и передается ему просто текущая его частота.. "налету". Но вообще они в совсем разных местах
Кроме того - этот новый не будет обладать возможностями ваших разных уровней громкостей, или диджитал сэмплов, или стерео-раскладки.
Я хочу вносить _минимум_ для того чтобы по максимуму похоже эмулировалось.![]()
Последний раз редактировалось Dexus; 26.08.2005 в 16:22.
вообще вся эта переинициализация - лишние тормоза. ведь на самом деле это регистры делителя (а внешняя частота AY постоянна), и нужно всего лишь поправить расчёт fa,fb,fc,fn,fe в функции AY::write, умножив эти периоды на текущий делитель частоты
digital samples можно выкинуть (сам это собираюсь сделать, точнее найти более забавную замену)
Даже если не происходит никаких записей в регистры - частота должна меняться.Сообщение от SMT
С изменением периодов fa/fb/fc/fn/fe - спасибо за мысль. Попробую такой алгоритм внедрить.
Диджитал самплес - интересная штука (порой слушал), но к сожалению кривовато реализовано. То ли буффер криво ставится, то ли еще что - но щелчки постоянно прут (с частотой 50 гц)...
да, тут облом - придётся расчитывать текущий fa в начале AY::flush и использовать егоСообщение от Dexus
Ну есть один способ. Частота меняется как 1/2х, 1х, 2х. Т.е. кратно двум. Делить частоту - самое простое. А вот умножать...Сообщение от SMT
Поэтому наверно придется работать с умноженной частотой.. и даже 3.5Мгц превратится в 7...
Да и вообще.. частота эта меняется не так часто, поэтому расчеты всяких этих temp.mult_const2, temp.mult_const3, ay.mult_div, temp.ay_div2, последующим c restart_sound() не приведет ни к чему критичному.
Выкладываю новую версию (с работающим прескейлером) http://inatix.com/spool/unreal031b_YM2203.zip .
по моему, одинаково просто как делить, так и умножать на степени двойки (да, ты же в десятичной системе думаешьДелить частоту - самое простое. А вот умножать)
http://inatix.com/spool/unreal031b_2203_full.zip
с конфигом и с ромами..
http://inatix.com/spool/2203test2.zip
хобетовский файлик, для теста (внутри кодовый фрагментик в 6 килобайт с адреса 30000).. не очень конечно качественный. короткий.. тут расширенная версия (типа эхо сделано за счет задержки и перекидывания на второй чип с меньешй громкостью).
лучшего теста-примера пока нету по причине отсутствия нормального инструментария..
Добавление: Почему то при компиляции с оптимизацией (особенно под п4) наблюдается странный эффект - звуки совсем запортаченные.. как будто без операторов вовсе... голимая синусоида.
Последний раз редактировалось Dexus; 29.08.2005 в 08:54.
Кстати вот попробовал сделать стерео (нулевой чип направо 0.8 правый 0.6 левый и наоборот) - намного прикольней звучит, и сильного стерео разнобоя нету.
Последний раз редактировалось Dexus; 30.08.2005 в 19:20.
что-то я не подумал: можно пересчитывать при записи в регистр делителяСообщение от Dexus
ищи глюк у себя. я раз 20 на такое нарывался: ну всё думаю, точно глюк ms-компилятора. и каждый раз (кроме одного случая, причём глюк исправили в 7-й версии без моего участия) оказывалось, сам дуракСообщение от Dexus
хотя, бывает, переменная хитро меняется вне функции в обход поля видимости оптимизатора - попробуй компильнуть без /Oa
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)