Три таймера на три регистровые пары BC,DE,HL (старший байт считает, младший инициализация), как досчитали, выдаём еденицу, через некоторое время (соответствующее громкости канала) выдаём ноль. Согласен, не самый честный и правильный вариант, но лучше, чем ничего. По прерыванию обрабатывается мелодия и меняет громкость (в переменной) и высоту звука (младший байт регистра). Для пауз используется серия из 256 NOP-ов, чем больше пауза, тем больше их выполняется. Основной цикл подстраивается, т.е. чтобы выключить канал меняем OUT xx на MVI A,xx и тому подобные хаки. В исходнике обработчик мелодии сделан макросом и повторяется три раза для каждого из каналов.



Ответить с цитированием
Исправлять вряд-ли буду, это уже история каменного века.
Размещение рекламы на форуме способствует его дальнейшему развитию 
