Как написать игру для ZX Spectrum на ассемблере



         

СОЗДАНИЕ ЗВУКОВЫХ ЭФФЕКТОВ - часть 3


TWOTON LD A,(23624) AND #38 RRA RRA RRA LD H,D LD L,E DI TWOTN1 DEC H ;задержка для получения первого тона JR NZ,TWOTN2 XOR 16 OUT (254),A ;извлечение первого звука LD H,D ;восстановление значения задержки ; для первого тона TWOTN2 DEC L ;задержка для получения второго тона JR NZ,TWOTN1 XOR 16 OUT (254),A ;извлечение второго звука LD L,E ;восстановление значения задержки ; для второго голоса PUSH AF LD A,B ;проверка окончания звучания OR C JR Z,TWOTN3 POP AF DEC BC JR TWOTN1 TWOTN3 POP AF EI RET

Перед обращением к процедуре в регистровой паре BC нужно указать длительность звучания, а в регистрах D и E - высоту звука соответственно в первом и втором голосах. Если в регистрах D и E задать близкие значения, то вместо двух различных тонов получится звук приятного тембра, слегка вибрирующий и как бы объемный. Послушайте, например, такое звучание:

LD BC,500 ;длительность звучания LD D,251 ;высота первого тона LD E,250 ;высота второго тона CALL TWOTON RET

Не меньшим спросом в игровых программах пользуются и различные шумовые эффекты, имитирующие выстрелы, разрывы снарядов, стук копыт и т. п. Такие звуки характеризуются отсутствием какой-то определенной частоты - в них присутствуют частоты всего спектра. Это так называемый «белый» шум. Но обычно в шуме все же преобладают тона определенной высоты, что позволяет отличить шипение змеи от грохота обвала. И это необходимо учитывать при создании нужного эффекта.

Первый звук этого типа, который мы хотим предложить, при подборе соответствующей длительности позволяет имитировать звуки от хлопков в ладоши до шипения паровоза, выпускающего пар. Продолжительность звучания задается в регистровой паре DE, однако ее значение не должно превышать 16384, так как в качестве генератора «случайных» чисел, определяющих частоту тона используются коды ПЗУ:

HISS LD A,(23624) AND #38 RRA RRA RRA LD B,A LD HL,0 ;начальный адрес ПЗУ DI HISS1 LD A,(HL) ;берем байт в аккумулятор AND 16 ;выделяем 4-й бит OR B ;объединяем с цветом бордюра OUT (254),A ;получаем звук INC HL ;переходим к следующему байту DEC DE ;уменьшаем значение длительности LD A,D OR E JR NZ,HISS1 ;переходим на начало, ; если звук не закончился EI RET




Содержание  Назад  Вперед