1

Тема: Тест для проверки ЯЗС

Написал небольшую программку для проверки ЯЗС. Может, пригодится кому-нибудь :)

Сразу скажу, что я в курсе, что похожая программа давно написана и называется ЯЗС_ДЕМО (подробности в ролике https://www.youtube.com/watch?v=C7tU0KCrdHE).
Я ей пользовался, но оказалось, что это не очень удобно. При подключенной музыкальной клавиатуре она отказывалась находить ЯЗС вообще (в ней встроенное определение платы), нельзя было некоторые управляющие биты менять одновременно, но самое главное - проверять ЯЗС целиком с её помощью очень долго и нескладно. А хотелось, чтобы был именно софт с автоматическим режимом работы, позволяющий проверить все каналы, со всеми типами огибающих, всеми фильтрами и уровнями громкости. И желательно с примером звучания. Короче, я сделал свою версию.

Программа написана под Монитор Агат-9 и загружается через магнитофонный порт с помощью другой программки отсюда http://forum.agatcomp.ru//viewtopic.php?pid=6669#p6669
Так было сделано для удобства отладки и исключения влияния ДОС. Но если будут пожелания, то можно подумать и над дисковой версией.

Автоопределения ЯЗС в программе нет, потому что нет способа сделать его надежно работающим. ПЗУ у ЯЗС нет, а читать порты ввода/вывода рискованно, потому что некоторые платы не различают чтение и запись и могут изменить свое состояние во время определения.

Так что программа считает, что ЯЗС есть и установлена в слот 1 (разъем X1).


I. Загрузка программы

После включения машины нужно набрать в Мониторе следующие команды

00E0:A0 03 B6 EC 96 3C 88 10
00E8:F9 4C 07 FF 00 18 FF 1D

E0G

После этого воспроизвести файл SOUNDTEST.wav, подав сигнал на магнитофонный вход.

При успешной загрузке Монитор выдаст звуковой сигнал. Далее надо запустить программу командой

1800G

II. Интерфейс

Интерфейс программы выглядит так:

Spoiler

http://forum.agatcomp.ru//misc.php?action=pun_attachment&item=1242&download=1

Строки CHN0-CHN6 соответствуют каналам платы. CHN0-CHN4 - это мелодические каналы, CHN5-CHN6 - ударные. У мелодических каналов есть три поля NOTE (нота), ENV (огибающая), PRESET (пресет). У каналов ударных инструментов есть только PRESET. Текущее поле выделяется скобками "[ ]".
Перемещаться между каналами и полями можно стрелками. Изменение значения производится с помощью клавиш "+" и "-".

Клавиши выбора режима:
Пробел - выполняет проверку выбранного канала (ручной тест)
A - запуск автоматического теста
I - запуск теста прерываний
K - запуск теста музыкальной клавиатуры
Q - выход из программы


III. Ручной тест

Ручной тест позволяет выборочно проверить любой канал ЯЗС. По сути, повторяет работу ЯЗС_ДЕМО.
Для проверки канала нужно выбрать ноту и огибающую (для мелодических каналов), а также пресет. В качестве нот можно выбрать значения C2, C3, C4, C5, C6 (делать полноценный трекер не планировалось, других нот нет). C4 соответствует ноте До первой октавы. Огибающих три: 0 - короткая отрывистая, 1 - непрерывная с плавным нарастанием, 2 - непрерывная с резким нарастанием.
Пресет - это бит громкости плюс три бита фильтров для мелодических каналов, либо бит громкости и биты высоты тона для каналов ударных инструментов. Значение в поле пресета записано в двоичном виде. У мелодических каналов при значениях 0000 и 1000 звук отсутствует - это не бага, так и должно быть, так как не выбран ни один из фильтров.
При нажатии на пробел включается канал, на котором стоит курсор в виде скобок. Звук включается на 2.5 секунды в мелодических каналах и на 1 секунду в каналах ударных и выключается сам. В это время на экран выводится надпись "PLAY".


IV. Автоматический тест

Автоматический тест позволяет проверить все каналы.
В этом режиме сначала автоматически перебираются все мелодические каналы с разными типами огибающих и патчей, а потом все ударные каналы. Порядок тестирования мелодических каналов такой:
1) выбирается бит фильтра (ВЧ, СЧ, НЧ)
2) выбирается тип огибающей (0, 1, 2)
3) выбирается бит громкости (сначала 0, потом 1)
4) для получившегося тембра (всего тембров 18) выполняется цикл по всем пяти мелодическим каналам. Каждый канал последовательно играет ноты C2, C4 и C6. Длительность звука 0.5 секунды. Интервал между звуками 0.1 секунды. После всех трех нот делается пауза на 0.5 секунды.
Нот играется три, чтобы легче было оценить работу фильтров. Каналы играются последовательно, поэтому легко можно услышать, если какие-то каналы играют неправильно.

Каналы ударных тестируются иначе:
1) выбирается высота тона (0 - 7 для канала барабанов, 0 - 3 для канала тарелок)
2) выбирается бит громкости (сначала 0, потом 1)
3) для выбранного тембра играется один звук. Длительность звука 1 секунда.

Сначала перебираются тембры канала барабанов (CHN5), потом канала тарелок (CHN6).

Проверяемое в данный момент сочетание битов и номер канала показываются на экране.

Spoiler

http://forum.agatcomp.ru//misc.php?action=pun_attachment&item=1243&download=1

Прервать тест можно клавишей "РЕД".

Пример звучания оригинальной ЯЗС находится здесь https://disk.yandex.ru/d/KH8s-XdBT0mgWw


V. Тест прерываний

Тест прерываний проверяет работу канала таймера, генерирующего прерывания. В этом режиме таймер программируется на генерацию прерывания через 3.9 секунды. Далее цикл в программе с интервалом раз в секунду проверяет, было ли получено прерывание. Если прерывание было получено, выводится текст "RECEIVED!" и тест завершается. Если цикл досчитал до 9 секунд, и прерывание не было получено, выводится текст "NOT RECEIVED!".

Spoiler

http://forum.agatcomp.ru//misc.php?action=pun_attachment&item=1244&download=1


VI. Тест музыкальной клавиатуры

Тест проверяет работу блока фортепианной клавиатуры (БФК). При нажатии на клавишу, ее код помещается в буфер, если ранее такого кода там не было. При отпускании клавиши ее код удаляется из буфера. После каждого успешного опроса порта клавиатуры коды всех нажатых клавиш в шестнадцатеричном виде выводятся на экран. Размер буфера 8 клавиш (больше в строку не влезало). То есть, одновременно можно нажать до 8 клавиш.

Spoiler

http://forum.agatcomp.ru//misc.php?action=pun_attachment&item=1245&download=1

Чтобы завершить тест, нужно нажать клавишу "РЕД".


--------------------

При создании теста всплыла пара интересных моментов.

* Оказалось, что нельзя работать с ЯЗС без установленного обработчика прерываний. Я долго не мог понять, почему моя программка иногда вылетает в обработчик BRK. Проблема оказалась в том, что при подаче сигнала GATE все ВИ53 начинают считать. Даже если их еще не настраивали на какой-то режим работы :) Сброс таймеров не предусмотрен, поэтому сразу после включения питания у каждого таймера будет установлен какой-то случайный режим. Таймеры ВИ53 имеют 6 режимов работы, но режим задается 3 битами, поэтому часть режимов не определена. И если режим допустимый, то когда счетчик досчитает до нуля, сгенерируется прерывание и будет вызван обработчик прерываний. Или произвольный код, если обработчик не установлен.

** При написании теста БФК выяснилось, что чтение из порта клавиатуры не слишком надежное. Если много раз нажимать одну и ту же клавишу, то иногда она будет выдавать коды других клавиш. В результате коды клавиш могут "залипать" в буфере: при нажатии клавиши генерируется один код, а при отпускании - другой и программа не может понять, что клавиша отпущена. Чтобы сбросить такой "залипший" код надо или долго долбить по клавише в надежде, что она сгенерирует такой же ошибочный код, или нажимать соседние клавиши.

На моем экземпляре БФК особенно выделялся бит 1 порта клавиатуры. Я не проверял, была ли там какая-то проблема с железом, но вел он себя просто как антенна. В зависимости от расположения клавиатуры, БП и генплаты этот бит мог работать нормально, а мог случайно инвертировать значение. В общем, это неудивительно, если учесть длину кабеля (1.4 метра), отсутствие экрана и терминирующих резисторов.

Есть подозрение, что такая проблема была не только у конкретного экземпляра клавиатуры. Я раньше находил в программе "7 гномов" странные двойные проверки кодов клавиш http://forum.agatcomp.ru//viewtopic.php?pid=5061#p5061.
Похоже, что разработчики "7 гномов" столкнулись с такой же проблемой. К тому же, "7 гномов" - программа для детей, наверняка они расстраивались, когда нажимали правильную клавишу, а программа снимала балл из-за неправильно считанного кода. Видимо, тогда и были добавлены эти дополнительные проверки.

Post's attachments

Attachment icon JZS_Test_1.png 3.81 kb, 99 downloads since 2023-09-18 

Attachment icon JZS_Test_2.png 4.17 kb, 94 downloads since 2023-09-18 

Attachment icon JZS_Test_3.png 4.15 kb, 97 downloads since 2023-09-18 

Attachment icon JZS_Test_4.png 4.02 kb, 96 downloads since 2023-09-18 

Attachment icon SOUNDTEST.bin 1.44 kb, 57 downloads since 2023-09-18 

Attachment icon SOUNDTEST.wav 149.88 kb, 61 downloads since 2023-09-18 

2 Отредактировано AlexBel (19-09-2023 13:04)

Re: Тест для проверки ЯЗС

Большое спасибо за тест! У меня, как раз, уже довольно давно лежит собранная плата ЯЗС, у которой проблемы, насколько я помню, с прерываниями, постараюсь в ближайшее время натравить тест на неё :)
Но с магнитофона загружать неудобно, лучше, всё же, с диска. А если DOS чем-то мешается - можно использовать "быстрозапускалку".
Кстати, можно сделать сразу образ "быстрозапускалки" с тестом.

3

Re: Тест для проверки ЯЗС

Дисковая версия

Сделал на основе "Быстропускалки". Доработка понадобилась минимальная - добавлена одна команда для включения текстовой страницы. С реальной платой не проверялась, но вроде бы все должно работать.

Post's attachments

Attachment icon soundtest.zip 4.51 kb, 47 downloads since 2023-09-21 

4

Re: Тест для проверки ЯЗС

Спасибо! В ближайшее время постараюсь испытать на железе.