К вопросу о некоторых проблемах эмуляции SAA1099
Чтобы было понятно, о чем вообще идёт речь в данном топике, начну издалека.
На одном из профильных форумов весьма деятельный камрад desUBIKado оставил около месяца назад пост следующего содержания:
… что в вольном переводе на великий и могучий звучит как «ЭТО я плохо слышу или у всех НЕ очень хорошо играет сие?»
Восприятие музыки(звуков) процесс достаточно субъективный, не даром в пословице лучше один разВидеть, чем семь раз услышать же. Подумалось, а как же в таком случАе можно утвердительно ответить на вопрос, “Проверить алгеброй гармонию“© как сказал (бы) Великий ас Пушкин.
Выше была присказка, теперь суть вопроса. Я не вхожу в сотнюсамых богатых
счастливых обладателей ZXM-SoundCard с микросхемой SAA1099 на борту или владельцев Sam Coupe, поэтому у меня единственная(почти:) возможность услышать музыкальные произведения на нем — это эмуулятор, софтовый ли, хардварный, но эмулятор оной.
Начну с железных эмулей, они ближе да и затеивалось вообще-то ради них :-)
Кратко по истории вопроса. Для ФПГА/ПЛИС сУществует несколько моделей, разной степени достоверности. Первоначальный модуль на verilog от Miguel Angel Rodriguez Jodar ака mcleod_ideafix, созданный для компьютера Sam Coupe на базе ZX Uno, доделанный и допИленный модуль на system verilog от Sorgelig-a для MiST/MiSTer и этот же модуль, но перетранслированный из некоторых соображений обратно на verilog, это уже для AEON-a. К слову сказать, вышеприведенная цитата от камрада из солнечной Испании относится к модулю маклеода, он наименеее достоверно звучит. Добавлю — субъективно и в некоторых композициях. И в сравнении с реализацией от Sorgelig-a.
Что касаетсянезаконченных предложений чисто софтовых реализаций. Наиболее релевантная, йящитайю, модель звучания этой psg в эмуляторе SimCoupe, потом идет старинная версия эмулятора Unreal с модулем от Молодцова. В нем и с ним в основном и сравнивал. Истины ради надо добавить, что есть как бы «улучшенная» версия модуля в последних Анрилах, в т.ч. от TS Labs, но автор(-ы?) сказал(и), что, цитируйю, «Тестировать не пойми как эмулятором — не дело». Ну не дело — так не дело. Вычеркиваем. И последняя(крайняя) реализация сего — в эмуле Xpeccy. Проблемы в звучании такие же, как в версии от маклеуда, могу сделать предположение, что что-то не так с миксером каналов, ну и огибающей. Как у всех.
Теперь про котлеты из песТни и собственно «не-пойми-как-прости-господи» сам тест. Изтеории суперструн краткого мануала на SAA1099 известно, что это 6-ти канальный PSG, каждый из каналов может быть запрограммирован как на стерео звук, так же и моно, так и на разный уровень в каждом из стереоканалов. Плюс в каждом из каналов может быть включен шум (noise) в четырех режимах, плюс в третьем\шестом канале огибающая (envelope) то жи в некотором количестве вариаций и сочетаний. В итоге получается приличный микс из отдельных звуков, которые в целом мы и называем музыкой?
И когда в этой какафонии, кпримеру, косячит какой то канал\эффект, то на слух наверное трудно догадаться где и что не так звучит, а тем более в каком из шести каналов, не так ли? ПользовАтели трекеров могут пользоваться возможностью отключать любой\все каналы и слушать что звучит в одном. «Я прав или прав или прав?»©Д.С.
Так вот моя под(д)елка работает аналогичным образом. Принцип сепаратора.
Разделяет все каналы. Можно включить\отключить практически ВСЁ! Амплитуду в каждом канале, шумы, огибающую. Каналы отключаются поштучно, шумы — все сразу и огибающие — в обоих каналах. Так же и включаются. Можно слушать только шумы, или чистый синус, или огибающие, или комплексно. Ну и все это наглядно смотреть глазкамЕ, не только слушать :) Впрочем смотрите то жи, ибо вряд ли кто то захочет в трезвом уме и здравой памяти ЭТО запускать\повторять) Для реального чипа этот тест не нужен априори, для эмулей — он не нужен писателям, похоже они сами себе все знают, остаеЦЦа для меня — ну нужен конечно для оконЧАТельной отладки FPGA, для собственных нужд :) Тем более, по полседним тенденциям релизить бинарники уже не модно же, ю-туб — наше фсиё??
Некоторые технические аспекты. Первый вариант теста был на чистом бейсике, десятка два-три строк с OUT-ами в порты. Окончательный(?) вариант — чистый асм, даже без бейсика :( Видео захватывалось с Анрила, вариант Молодцова. По секундам можно расписать, но вроде и так ясно. Первый тест — синтетический, ка и три следующих. Сперва в каждый канал загоняем частоту с различной амплитудой. Во втором — наоборот, амплитуда постоянна, но частота меняется от второй октавы до седьмой. Третий — шумы по каналам. Четвертый хотел сделать синтетический с огибающими, но может потом как, в итоге четвертый — это реальный song с ETracker-a, немножко разбирался как с ним работать, наощупь. Чуть позже cпсихнул, нашел ман 92 года к нему, сканами в PDF, сделал из него приличный OSR в .DOC, с исправлениями и вычиткой, который уже можно переводить с ненашего на великий, что то жи поЧти сделал, ну процентов на 69%, когда нибудь добью. Занятная вещь, эти ваши трекеры…
Так, отвлекся. Повторю — четвертый тест — это реальный song, он же последний, почти)
Тест управляется кнопочками, на экране в нижней части я их расписал. Пробелом можно сразу перейти или к следующему тесту 1-4, или после четвертого — переключаться на три реальных song-а. Пятый тест — это тот самый пример из из верхней цитаты
тема называется Solitaire (Game Music), вот тут можно услышать оригинальное звучание
Solitaire
Для этого теста я отключал все каналы, кроме третьего, и оставлял там только огибающую, ну когда проверял, даже не 100пицот раз, а гораздо более. Уж точно звучит по разномуу во всех эмулях, а где то и не звучит со всемъ.
Следующая мелодия (шестая?) — просто приятная мелодия, кстати абсолютно без огибающих, вот поэтому она будет звучать одинаково хорошо на любом эмуле. Что меня кстати и сбивало с толку ранее, до вопроса из цитаты. Какие то мелодии звучали то и так вполне прилично. Таких, без огибающих, встречал не одну и не две, в процессе отладки сего непотребства.
Ну и последняя — очень известная мелодия :), надейюсь. Там в некоторых, других хороших:), эмуляхплохо нестандартно звучит последний шестой канал, с огибающими вестимо.
Вполне допускаю, что я не прав, и все и всюду звучит идеально, а иногда и лучше идеального. Пусть так.
Ах да, по бордюру пару словов. Ну во вторых — с Наступающим Днем России!!! :) В третьих — что бы не ваял, все какой то бордер-креатив получается. Тяжелое прошлое.
В четвертых — удобно отслеживать оставшиеся\текущие такты во фрейме.
Синяя полоса — это подпрограмма анимации стрелок(не кардиограммы!). Многожручая.
Красная полоса — оочень прожорливая подпрограмма заполнения\показа регистров SAA
Показываются шесть основных регистров. Но! на 4-5 регистров еще хватает one-frame, и то на пятом регистре звук как бы уже подтормаживает, что странно. Поэтому показ регистров переделал под half-frame, по три регистра на прерывание. А так бы красная полоса почти в два раза ширее была бы. Все отсальное — флеш, время, кардиограмма — занимает значительно меньше времени.
По кнопкам еще — выключенное состояние кнопок\регистров отображается красными атрибутами в соответствующих местах, а включенные\выкл>ченные каналы еще и текстом в правом верхнем углу (отсылка к трекеру Etracker)
З.Ы. при написании оной поделки использованы фрагменты исходников Mick-a, в частности модуль графического амплитудного анализатора, несколько уменьшенный в размерах, ну и само собой модуль проигрывателя ETracker, вынутый видимо им из компилятора трекера.
p.s.p.s. Программа написана в ужасм-е, в котором в процессе нашел еще несколько неприятных и занятных багов, но а5 же — комуу это интересно :)
Для ZX Spectrum 48 как минимум и для Sam Coupe. Обе реализации идиентичны в части работы, в части кода есть некоторые отличия само собой.
Обновлено.
.DSK, .TAP, .SNA — вдруг комуу пригодиЦЦа. .TRD не делал, ибо в ESXDOS тап-ки и снапшоты и так вполне прилично работают. Но при желании загрузчик изобрести можно.
upd.:
Итак, техно-демо.
Добавил 4-й тест envelope. Пока там два примера.
rgho.st/8mjKWdTDl
То же самое для Sam Coupe
rgho.st/7R2tzw8J6
хы… Прикольно работает автозамена. Слово «upd.:» просто так вверх не перетащить:)
>
На одном из профильных форумов весьма деятельный камрад desUBIKado оставил около месяца назад пост следующего содержания:
He estado probando este core con soporte del chip de sonido SAA1099 y para ello me he bajado diferentes archivos con música SAA desde estas 2 páginas:(зы — нравяЦЦа мне у них вопросительные знаки в начале предложения:) Догадайтесь — зачемъ)
https://velesoft.speccy.cz/saa1099-cz.htm
http://micklab.ru/My%20Soundcard/ZXMSoundCard.htm
]El caso es que el sonido del SAA1099 no me suena muy bien. He buscado por YouTube algún video donde escuchar música del SAA y he encontrado este donde sobre el minuto 3 prueba el archivo etunes-3.trd
https://www.youtube.com/watch?v=AFjONQQ2N6c&feature=youtu.be&t=2m55s
Comparando el sonido del vídeo (que tampoco es que sea muy bueno) y el que sale por el ZX-Uno, veo que en este último suena peor. Creo que donde más se nota es en MELODY 14.
¿podéis probarlo alguno más a ver que no sea yo el que sea duro de oído? :D
… что в вольном переводе на великий и могучий звучит как «ЭТО я плохо слышу или у всех НЕ очень хорошо играет сие?»
Восприятие музыки(звуков) процесс достаточно субъективный, не даром в пословице лучше один разВидеть, чем семь раз услышать же. Подумалось, а как же в таком случАе можно утвердительно ответить на вопрос, “Проверить алгеброй гармонию“© как сказал (бы) Великий ас Пушкин.
Фарш невозможно провернуть назад
И мясо из котлет не восстановишь...
(из какой-то песни?)
Выше была присказка, теперь суть вопроса. Я не вхожу в сотню
счастливых обладателей ZXM-SoundCard с микросхемой SAA1099 на борту или владельцев Sam Coupe, поэтому у меня единственная(почти:) возможность услышать музыкальные произведения на нем — это эмуулятор, софтовый ли, хардварный, но эмулятор оной.
Начну с железных эмулей, они ближе да и затеивалось вообще-то ради них :-)
Кратко по истории вопроса. Для ФПГА/ПЛИС сУществует несколько моделей, разной степени достоверности. Первоначальный модуль на verilog от Miguel Angel Rodriguez Jodar ака mcleod_ideafix, созданный для компьютера Sam Coupe на базе ZX Uno, доделанный и допИленный модуль на system verilog от Sorgelig-a для MiST/MiSTer и этот же модуль, но перетранслированный из некоторых соображений обратно на verilog, это уже для AEON-a. К слову сказать, вышеприведенная цитата от камрада из солнечной Испании относится к модулю маклеода, он наименеее достоверно звучит. Добавлю — субъективно и в некоторых композициях. И в сравнении с реализацией от Sorgelig-a.
Что касается
Теперь про котлеты из песТни и собственно «не-пойми-как-прости-господи» сам тест. Из
И когда в этой какафонии, кпримеру, косячит какой то канал\эффект, то на слух наверное трудно догадаться где и что не так звучит, а тем более в каком из шести каналов, не так ли? ПользовАтели трекеров могут пользоваться возможностью отключать любой\все каналы и слушать что звучит в одном. «Я прав или прав или прав?»©Д.С.
Так вот моя под(д)елка работает аналогичным образом. Принцип сепаратора.
Разделяет все каналы. Можно включить\отключить практически ВСЁ! Амплитуду в каждом канале, шумы, огибающую. Каналы отключаются поштучно, шумы — все сразу и огибающие — в обоих каналах. Так же и включаются. Можно слушать только шумы, или чистый синус, или огибающие, или комплексно. Ну и все это наглядно смотреть глазкамЕ, не только слушать :) Впрочем смотрите то жи, ибо вряд ли кто то захочет в трезвом уме и здравой памяти ЭТО запускать\повторять) Для реального чипа этот тест не нужен априори, для эмулей — он не нужен писателям, похоже они сами себе все знают, остаеЦЦа для меня — ну нужен конечно для оконЧАТельной отладки FPGA, для собственных нужд :) Тем более, по полседним тенденциям релизить бинарники уже не модно же, ю-туб — наше фсиё??
Некоторые технические аспекты. Первый вариант теста был на чистом бейсике, десятка два-три строк с OUT-ами в порты. Окончательный(?) вариант — чистый асм, даже без бейсика :( Видео захватывалось с Анрила, вариант Молодцова. По секундам можно расписать, но вроде и так ясно. Первый тест — синтетический, ка и три следующих. Сперва в каждый канал загоняем частоту с различной амплитудой. Во втором — наоборот, амплитуда постоянна, но частота меняется от второй октавы до седьмой. Третий — шумы по каналам. Четвертый хотел сделать синтетический с огибающими, но может потом как, в итоге четвертый — это реальный song с ETracker-a, немножко разбирался как с ним работать, наощупь. Чуть позже cпсихнул, нашел ман 92 года к нему, сканами в PDF, сделал из него приличный OSR в .DOC, с исправлениями и вычиткой, который уже можно переводить с ненашего на великий, что то жи поЧти сделал, ну процентов на 69%, когда нибудь добью. Занятная вещь, эти ваши трекеры…
Так, отвлекся. Повторю — четвертый тест — это реальный song, он же последний, почти)
Тест управляется кнопочками, на экране в нижней части я их расписал. Пробелом можно сразу перейти или к следующему тесту 1-4, или после четвертого — переключаться на три реальных song-а. Пятый тест — это тот самый пример из из верхней цитаты
тема называется Solitaire (Game Music), вот тут можно услышать оригинальное звучание
Solitaire
Для этого теста я отключал все каналы, кроме третьего, и оставлял там только огибающую, ну когда проверял, даже не 100пицот раз, а гораздо более. Уж точно звучит по разномуу во всех эмулях, а где то и не звучит со всемъ.
Следующая мелодия (шестая?) — просто приятная мелодия, кстати абсолютно без огибающих, вот поэтому она будет звучать одинаково хорошо на любом эмуле. Что меня кстати и сбивало с толку ранее, до вопроса из цитаты. Какие то мелодии звучали то и так вполне прилично. Таких, без огибающих, встречал не одну и не две, в процессе отладки сего непотребства.
Ну и последняя — очень известная мелодия :), надейюсь. Там в некоторых, других хороших:), эмулях
Вполне допускаю, что я не прав, и все и всюду звучит идеально, а иногда и лучше идеального. Пусть так.
Ах да, по бордюру пару словов. Ну во вторых — с Наступающим Днем России!!! :) В третьих — что бы не ваял, все какой то бордер-креатив получается. Тяжелое прошлое.
В четвертых — удобно отслеживать оставшиеся\текущие такты во фрейме.
Синяя полоса — это подпрограмма анимации стрелок(не кардиограммы!). Многожручая.
Красная полоса — оочень прожорливая подпрограмма заполнения\показа регистров SAA
Показываются шесть основных регистров. Но! на 4-5 регистров еще хватает one-frame, и то на пятом регистре звук как бы уже подтормаживает, что странно. Поэтому показ регистров переделал под half-frame, по три регистра на прерывание. А так бы красная полоса почти в два раза ширее была бы. Все отсальное — флеш, время, кардиограмма — занимает значительно меньше времени.
По кнопкам еще — выключенное состояние кнопок\регистров отображается красными атрибутами в соответствующих местах, а включенные\выкл>ченные каналы еще и текстом в правом верхнем углу (отсылка к трекеру Etracker)
З.Ы. при написании оной поделки использованы фрагменты исходников Mick-a, в частности модуль графического амплитудного анализатора, несколько уменьшенный в размерах, ну и само собой модуль проигрывателя ETracker, вынутый видимо им из компилятора трекера.
p.s.p.s. Программа написана в ужасм-е, в котором в процессе нашел еще несколько неприятных и занятных багов, но а5 же — комуу это интересно :)
Для ZX Spectrum 48 как минимум и для Sam Coupe. Обе реализации идиентичны в части работы, в части кода есть некоторые отличия само собой.
Обновлено.
.DSK, .TAP, .SNA — вдруг комуу пригодиЦЦа. .TRD не делал, ибо в ESXDOS тап-ки и снапшоты и так вполне прилично работают. Но при желании загрузчик изобрести можно.
upd.:
Итак, техно-демо.
Добавил 4-й тест envelope. Пока там два примера.
rgho.st/8mjKWdTDl
То же самое для Sam Coupe
rgho.st/7R2tzw8J6
хы… Прикольно работает автозамена. Слово «upd.:» просто так вверх не перетащить:)
>
18 комментариев
В каком эмуляторе сейчас самый точный звук? Как с этим обстоят дела у ZXTune?
По ФПГА- реализации — безусловно корка от Sorgelig-a. Единственное, что меня там смущает — уровень громкости каналов чистых и с огибающей. С огибающей звучат заметно тише, может так и должно быть, а может надо поднять. Но для этого надо дорисовать синтетический тест с envelope и сравнить с реальным SAA1099, но у меня его нет, все мои Спектрумы без nemo-bus, а колхозить на монтажке не очень хочется. Обхожусь дев-бордами.
Вариант корки от МакЛеода вполне можно починить. У него те же проблемы с envelope, который звучит даже в выключеном состоянии. Что то видимо с миксером итоговым. Та же проблема в эмуле Xpeccy присутствует.
в тс-анриле я бы тоже сказал, что каналы с огибающей работают несколько, хмм, необычненько. Но доказать то я этого не могу, а там просят пальцем показать, где именно подправить :(
Я равняюсь или на старый Анрил, ну или для надежности на SimCoupe, там то надеюсь эти проблемы давно выкопали.
По портам тоже. Порты больше для наглядности процесса. Особенно смущают порты noise, во всех мануалах написано, что задействованы биты 0,1 и 4,5 в 16 канале, а судя по индикатору там и 6,7 биты меняются. Вариантов как минимум джва — или косячит проигрыватель, не то показывает\заносит, ну или действительно эти биты реально в музыке используются. Да, и третий вариант — косяк ETracker-a. Но к шумам у меня как то меньше претензий.
Ну а с ZXTune — елси там есть возможность отключать каналы, то вот можно и сравнивать, а так то только по общему впеЧАТленийю — насколько режет слух та или иная композиция.
Любые другие варианты сравнения «точности эмуляции» годятся только для передачи «Битва экстрасенсов».
Сгенерировал тестовый паттерн? простенький, и прогнал через джва эмуля. Если вы считаете, что звучЯт совершенно идиентично — ну что ж, тогда я испанский летчик Сент Экзюпери и мне пора на битву экстрасенсов.
rgho.st/8gBbsDLPQ
Добавил пару ссылок вверху. Как всегда пятидневок.
Касательно точности эмуляции есть всего два основных момента. Первый — точность эмуляции внутренней логики чипа. Действие битов микшера, предельные моменты типа нулевого делителя. Ошибки в логике чипа ведут к неправильному звучанию музыки, в большинстве случаев это проявляется очень явно. Пока они присутствуют, дальше углубляться в точность нет смысла. Для начала чип должен просто правильно работать. Второй момент — точность параметров типа характеристик ЦАП и алгоритма генератора шума. На мой взгляд, это наименее значительная из всех проблем эмуляции, т.к. слабо заметна ухом и не так уж сильно влияет на звук (разница между AY/YM в основном не в характеристике ЦАП, а в логике огибающей, имеющей двойное разрешение).
Но самый главный фактор, что всегда выдаёт эмуляцию и вносит заметную разницу в звучание — проблема передискретизации, т.е. ресэмплинга. Она принципиально неразрешима (у чипа нет частоты дискретизации, у звуковых карт есть) и всегда даёт те или иные артефакты, хорошо заметные уху. Есть разные способы приблизить звучание к правильному — апсэмплинг, фильтры, band-limited синтез или трюки для приближения к нему (типа приклеивания кусочков транзиентов). Но всё это не имеет отношения к собственно эмуляции чипов, один и тот же ресемплер можно использовать с разными эмулируемыми чипами, и наоборот.
машину временивелосипедгенератор тестовых сигналов звуковой частоты :) Инструмент для проверки правильности постройки данного чипа в отдельно взятом ФПГА. Камертон. А вот то, что этот «камертон» по разномуу звучит на конкретном рояле и трех, хороших, пианинах — это проблемы инструмента?? Сойдемся на том, что это просто-напросто мини-демо, воспроизводящееся на разных машинах со своими, неповторимыми нюансами. Не более. Для моих целей эта подделка вполне подходит *взял с полки пирожок, без спроса*. А других то и нету, чтобы явно сказать «Баа!!! Да у тебя же 5 бит в envelope вообще лажает и не задействован!» Я прав или прав или прав?©