У меня два предположения - или на диске DISK3.CPM версия плеера PLAY.COM с ошибкой или я не понял, как он должен выдавать 3 голоса. Может соберусь дизассемблировать, но не уверен.
У меня два предположения - или на диске DISK3.CPM версия плеера PLAY.COM с ошибкой или я не понял, как он должен выдавать 3 голоса. Может соберусь дизассемблировать, но не уверен.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Три таймера на три регистровые пары BC,DE,HL (старший байт считает, младший инициализация), как досчитали, выдаём еденицу, через некоторое время (соответствующее громкости канала) выдаём ноль. Согласен, не самый честный и правильный вариант, но лучше, чем ничего. По прерыванию обрабатывается мелодия и меняет громкость (в переменной) и высоту звука (младший байт регистра). Для пауз используется серия из 256 NOP-ов, чем больше пауза, тем больше их выполняется. Основной цикл подстраивается, т.е. чтобы выключить канал меняем OUT xx на MVI A,xx и тому подобные хаки. В исходнике обработчик мелодии сделан макросом и повторяется три раза для каждого из каналов.
О, я не знал. Тогда понятно, почему там в качестве примеров было что-то из ихнего мюзикла того времени.
Значит я правильно понял. Проблема в том, что канал с наименьшим адресом всегда MVI A, я при трассировке не смог увидеть, чтобы туда писался OUT. Хотя процедура такая (как и для других каналов) есть.
- - - Добавлено - - -
Возможно я плохо трассировал, но пока пребываю в убеждении, что с одним из каналов что-то не так.
Не утерпел до вечера, копнул PLAY.COM. Все же я не глухой, не слепой и не тупой, нашел в нем ошибку. Хотя как посмотреть, возможно ошибка в файлах .NOT
Просто несогласованность - в файлах .NOT номер голоса 1,2,3, а PLAY.COM ожидает 0,1,2. Поэтому младший канал никогда не был задействован. Правильнее исправить PLAY.COM, но проще - файлы NOT. Если подкорректировать FR и SP, то в FR становится слышен адекватный третий (или нулевой, кому как нравится) голос, в SP как то странновато.
Мне это напомнило историю с публикацией про рисование окружности для специалистовского бейсика.
Прикольно. Я, видимо, был в восторге от мелодии на каналах 1 и 2, и не заметил ошибку.Исправлять вряд-ли буду, это уже история каменного века.
Кстати, теоретически, по такому принципу можно до 6 каналов сделать, если константы высоты тона и громкости прямо в код писать, но тогда на высоких нотах ещё больше фальшивить будет. На трёх каналах опорная частота 33КГц и делитель однобайтовый (основное время выполняются 4 пары DCR JNZ, это 60 тактов).
Сколько там набранной музыки, имеет смысл подумать над портированием этой штуки. Немного фальшивит, но звучит круто, особенно учитывая возможности железа.
Для "модов", т.е. с какими-никакими инструментами и как минимум envelopes. Это в какой-то степени реализовано в самых крутых мультиканальных трекерах для Спектрума (4 и 8 каналов, и даже совсем уже невероятные 16 каналов). По идее у нас все для этого есть, у меня не хватает мозга и усидчивости это осмыслить.
- - - Добавлено - - -
См.:
"ZX-16 (Jan Deak, 2014) (пример звучания)
Рекордное достижение в области биперной полифонии – единственный в своём роде 16-канальный движок от ветерана биперной сцены и создателя линейки движков и редакторов ZX-3, ZX-7, ZX-10. К сожалению, автор покинул нас в ноябре 2014 года, но дело его живёт, а достижение едва ли будет превзойдено. Движок генерирует звук по принципу ZX-7 и имеет схожее, но более шумное звучание. Ударные инструменты отсутствуют. "
Однако, это нечто мозговыносящее и непонятное. Код я не смотрел, но просто по рабоче-крестьянски можно прикинуть. Пусть по минимуму, без громкости и без особой заботы о точности высоких нот, но чтобы более-менее симметрично. Для каждого канала нужен счетчик (части) периода, его надо бы для пристойности хранить в регистре. Если так рассуждать, то 8080 даст 6 голосов максимум, как уже написал b2m, аккумулятор в сочетании с самомодифицирующимся кодом останется для всего остального. Это я без частых прерываний. У z80, конечно еще +6 альтернативных "основных" +1 альтернативный A +4 IX IY. Хотя может в zx-16 нечто совершенно инновационное.
Если делать подобную штуку, то она и сама сложная и музыку для нее придется самому искать/набирать или даже сочинять. В общем это круто, желаю успеха, но это очень сложно.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)