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



         

СОЗДАНИЕ ЗВУКОВЫХ ЭФФЕКТОВ



СОЗДАНИЕ ЗВУКОВЫХ ЭФФЕКТОВ

Различные звуковые и шумовые эффекты, которыми изобилуют компьютерные игры, достигаются через изменение по тому или иному закону частоты выводимого звука. Нетрудно догадаться, что высота звука напрямую зависит от продолжительности цикла задержки между командами вывода в порт динамика: чем больше задержка, тем более низким получится звук.

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

TWEET LD A,(23624) ;определение цвета бордюра AND #38 RRA RRA RRA DI TWEET1 XOR 16 ;переключение 4-го бита OUT (254),A PUSH BC DJNZ $ ;цикл задержки POP BC DJNZ TWEET1 EI RET

Длительность эффекта перед обращением к процедуре TWEET задается в регистре B, например:

LD B,200 CALL TWEET RET

Прежде чем привести следующий пример, скажем несколько слов, относящихся не только к этой подпрограмме, но и ко всем остальным. Поскольку в реальных программах цвет бордюра обычно не изменяется и определен заранее, то он, как правило, не вычисляется в программе, а задается в явном виде загрузкой в аккумулятор кода нужного цвета. Вы также можете вместо первых строк от метки TWEET до команды DI просто написать XOR A для получения черного бордюра или, например, LD A,4 - для зеленого.

Другой интересный момент касается уже не самой программы, а собственно ассемблера. Вы, наверное, обратили внимание на запись

DJNZ $

Как известно, символ доллара при трансляции принимает значение текущего адреса размещения машинного кода, а точнее, адрес начала строки ассемблерного текста. Поэтому такая запись полностью равноценна записи

LOOP DJNZ LOOP

но позволяет обойтись без дополнительных меток.

После такого небольшого лирического отступления давайте продолжим «изобретение» звуковых эффектов.

Особо часто в игровых программах можно услышать множество разновидностей вибрирующих звуков. Получить такой эффект можно, периодически увеличивая и уменьшая частоту (то есть количество циклов задержки). Вибрация характеризуется двумя параметрами: собственной частотой и глубиной (амплитудой), поэтому для такой процедуры потребуется, кроме длительности звучания, задавать и некоторые другие входные данные. Сначала приведем текст подпрограммы для получения вибрирующего звука, а затем объясним, какие значения в каких регистрах следует разместить перед обращением к ней.




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