Снова об AY3-8910/12
(С) 1999, (R)soft
__________________________________________
Не знаю, куда главный редактор поместит
эту статью, в "Металлолом" или в "Разное",
суть статьи останется той же. Проблема
"фальши" музыкального сопроцессора на сов-
ковых Спектрумах. К сожалению, как заядлый
железячник, я эту проблему без паяльника
решить не смог. Иногда проблема несовмес-
тимости софта решается не перепатчиванием
мегабайтов кода, а просто заменой некор-
ректно работающего железа. Это я и сде-
лал...
* * *
Я прочитал третий номер "ZX-Power", и
меня буквально потрясли две статьи. Это -
"Фальшивые редакторы" by JAM и незаконче-
ная статья "Траблы с AY" by TAN. Сразу
скажу, что в обоих статьях я заметил неко-
торые неточности (да не обидятся на меня
авторы ;-). В статье JAM'а указано, что
частота тактирования в фирменном "Spectrum
2+" связана с частотой процессора, как
fAY=fCPU/2, что не есть правильно. TAN
правильно заметил, что она связана с час-
тотой цветовой поднесущей PALа 4.4336190
МГц. Если ее разделить на 2.5, то получим
1.773448 МГц, которые и заводятся на зву-
ковой сопроцессор. Здесь опять маленькая
неточность. Все дело в том, что частоту
4.4336190 МГц получают делением на два
стандартной частоты PALовского кварца
8.867238 МГц. Отсюда выходит не целый ко-
эффициент делителя у TANа, надо делить
частоту кварца на пять, а не частоту под-
несущей цвета на 2.5.
В общем, у меня родилась идея доработать
свой AY так, чтобы он полностью соот-
ветствовал фирменному по частоте тактиро-
вания. Сначала я проверил, соответствует
ли указанная частота (в фирменный Спектрум
я, естественно, не заглядывал ;-) реально
используемой в "Spectrum 2+"? Пришлось
поступить несколько необычным образом. За
основу я взял формулу получения частоты
ноты на AY (нота = FtaktAY/16/делитель), а
также несколько программ, работающие с AY.
Как известно, в каждом проигрывателе мело-
дии для AY есть табличка делителей частоты
для каждой ноты в пределах семи или восьми
октав - все зависит от конкретного типа
проигрывателя. Для тестирования я взял
пять типов программ (точнее, даже четыре
;-). Это муз. редактор ProTracker 3.1,
проигрыватель музыки для AY из игры "Bat-
man" известнейшей фирмы Ocean, муз. демо
"FXSOUND" by Frantishek Fuka и муз. проиг-
рыватель из игры "Monty Free". В общем все
четыре программы по принципу проигрывания
мелодий особо не отличаются. Самое главное
- мне нужны были таблицы делителей. В муз.
редакторе ProTracker таких таблиц оказа-
лось две (от старого SoundTrackera и род-
ная). Они переключаемы в редакторе (жаль,
что не загружаемы!!!). И вот что получи-
лось. В проигрывателе "Monty Free" полной
таблицы не было, а ноты получались делени-
ем основных двенадцати делителей самой
низкой (первой) октавы на два, до требуе-
мой октавы.
Я посчитал это наиболее грубым пересче-
том т.к. частоты нот представляются не це-
лым числом герц, а с точностью до сотых и
при делении тактовой частоты AY не получит
требуемой частоты с достаточной точностью.
Хотя в программе "Monty Free" использован
довольно правильный метод формирования де-
лителей нот, но не в данном случае. В иде-
але, как это делается на ЭМИ (электромузы-
кальных инструментах) - синтезаторах? Сто-
ит двенадцать откалиброванных генераторов
частоты. Потом каждая частота делится на
два, тем самым получая все требуемые окта-
вы и частоты. В данном же случае, конкрет-
но с AY точной частоты ноты не получить, в
каждом отдельном случае будут некоторые
погрешности после округления коэф. деле-
ния. Вот например как я проверял пра-
вильность делителя для ноты. Получалось
так, что из пяти полученных таблиц делите-
лей две полностью совпали - SoundTracker'а
и Batman'а (для удобства я буду их так на-
зывать), остальные несколько отличались
друг от друга. Сначала я "схватился" за
проигрыватель Frantishek'а т.к. был его
давним поклонником и доверял ему на 100%.
Мои надежды оправдались. Взял я первый ко-
эффициент из таблицы и подставил в формулу
с тактовой частотой 1.773448 МГц. Т.е.
1773448/16/4031=27.497023 или получается
почти нота ля (A) нулевой (нижней) октавы
(в идеале 27.50Гц). Это максимальный коэф-
фициент из таблицы нот (Кmax=4095). Далее
я распечатал таблицу и надписал возле каж-
дого делителя ноту, которая ему соот-
ветствует. Взял я табличку частот нот от
нулевой до седьмой октавы и начал прове-
рять коэффициенты деления, но теперь я де-
лил так: 1773448/16/261.63(нота до четвер-
той октавы)=423.653633. (Т.е. делил уже не
на коэффициент, а на частоту ноты.) При
округлении до 424, число соответствовало
делителю в таблице. Далее: 1773448/16/
/587.33 (нота ре пятой октавы) =188.7192
или 189 - правильно. В общем, мне это на-
доело (пересчет на калькуляторе) и я напи-
сал на скорую руку программку на бейсике,
которая выдавала коэффициенты делителя для
каждой ноты и помечала коэффициент, если
он мог округляться либо в большую, либо в
меньшую сторону (т.е. десятичное значение
равно 5). Как ни странно, но пара коэффи-
циентов из 84 нот на единицу не совпадали
с моими расчетными. Но в общем погрешность
составляла очень малую долю (на слух почти
;-) не отличимо). У Frantishek Fuka табли-
ца начиналась с ноты ля нулевой октавы. В
Batman, Protracker и Monty Free - с ноты
ля-диез нулевой октавы. С таблицей ProT-
racker'а у меня вышла некоторая заминка. В
общем там коэффициенты деления получались
для тактовой частоты AY порядка 1.447 МГц
(???), но точно посчитать я так и не смог.
Для меня это осталось единственной загад-
кой.
Теория - теорией, калькулируй - не
калькулируй, а результат тот же - проблема
фальшивых нот. Я взялся за схему. Вот что
у меня получилось:
Схема получилась простой и недорогой
по деталям. Генератор, собраный на DD1.1 и
DD1.2 генерирует с частотой кварцевого ре-
зонатора. Подстроечным конденсатором уста-
навливается точная частота генерации. Если
C1 совсем не устанавливать, то схема будет
и так работать. Но кварц будет шунтиро-
ваться сопротивлениями R1 и R2. Получается
заниженная на несколько десятков килогерц
частота. Поэтому лучше C1 поставить. Счет-
чик DD2 работает как делитель частоты на
пять. Схема нуждается в некоторой наладке
- по частотомеру устанавливают точную час-
тоту генерации ZQ1, вращая движок C1
(контролируют либо на 14, либо на 8 ноге
счетчика). Если нет частотомера, то ем-
кость C1 ставят в районе 12-22 пикофарад
(идеального кварца все равно нет). У меня
получилось отстроить частоту с точностью
-10 Гц. Но, естественно, такая точность
особо не нужна. Все равно погрешность час-
тоты ноты будет при округлении делителя до
целого значения. Печатная плата генератора
размером 20х30 мм установлена сверху платы
звукового сопроцессора. После опробывания
муз. редактора (конечно, с таблицей от So-
undTracker'a) и попытке подыгрывания люби-
мым композициям было замечено довольно
точное соответствие реальным нотам. Ну ес-
тественно! Теория пересеклась с практикой,
т.е. как и должно быть. Наконец-то я смог
нормально подыграть композиции "Two Win-
ters Only" группы "My Dying Bride". Вооб-
ще, кто занимается музыкой, такая нехитрая
переделка позволит более продуктивно ис-
пользовать свой Спектрум для несложных
аранжировок. Помнится, как-то лет пять на-
зад я с приятелем пытался с SoundTrackerom
сделать аранжировку песни под гитару. В
редакторе был написан простейший ритм-бокс
и что-то типа звука флейты. Так вот, флей-
та ну НИКАК не вписывалась в гитару. Я
долго не мог понять почему. Понял намного
позже, даже, точнее, мне кто-то подсказал.
Как оказалось, все из-за несоответствия
частоты. Теперь бы ту композицию прове-
рить. ;-) Что же, может я не зря потратил
время на устранение этого, мягко говоря,
глюка?
Ладно! Все это хорошо. А если не все
имеют возможность залезть внутрь своего
Спектрума с паяльником? Я вижу здесь два
выхода из сложившейся ситуации.
1) Как уже правильно говорил JAM (я присо-
единяюсь!) - писать новые муз. редакторы с
нормальными таблицами делителей под 1.75
МГц. Хотя, по моему, проще пофиксить это
дело в самом редакторе (например в ProT-
racker'е). Лучше, чтобы была возможность
подгрузки таблички с диска. Как сказал
Rst7: "Драйвера - рулез!" ;-).
2) Покупка фирменного "Spectrum 2+" ;-)
Это, конечно, шутка. Первый вариант более
подходит.
Ну а если не хотите корячить новый и
старый софт (муз. демки, игрушки и т.д.) -
собирайте вышеизложенную схему и наслаж-
дайтесь "фирменным", не фальшивым звуком.
Выражаю особую благодарность главному
редактору "ZX-Power" за публикацию статьи.
Главное, что идея не пропала. ;-) Да и те-
ма вроде бы еще не иссякла. С интересом
отвечу на все вопросы и возражения по ниже
указанному адресу.
С уважением, Бакум Владимир
aka (R)soft
2:461/1024.6 (7/11/1999)
__________________________________________