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



         

МУЗЫКАЛЬНЫЙ СОПРОЦЕССОР - часть 2


Вы знаете, что для управления работой музыкального сопроцессора из Бейсика-128 имеется дополнительный (по отношению к стандартному Spectrum-Бейсику) оператор PLAY, но он на самом деле не реализует и десятой доли всех немыслимых возможностей, которые могут быть осуществлены только из ассемблера. Об этом можно судить хотя бы по тем играм, которые написаны специально для Spectrum 128.

Звук извлекается программированием собственных регистров сопроцессора, которые так же, как и регистры CPU имеют по 8 разрядов. Всего их насчитывается 16 (обозначаются от R0 до R15), но нас будут интересовать только 14 из них, так как остальные два служат для несколько иных целей, о чем сказано, например, в [2]. Сначала мы рассмотрим функции этих регистров, а затем расскажем о том, как с ними обращаться.

Первые шесть регистров (R0...R5) образуют три пары и задают высоту звука для каждого из трех каналов в отдельности (сами каналы обозначаются буквами A, B и C). То есть регистровая пара R0/R1 определяет частоту тона в канале A, пара R2/R3 делает то же самое для канала B и R4/R5 - для C. Хотя каждая пара состоит из 16 бит, используются только 12 младших разрядов: все 8 бит младшего регистра (R0, R2 и R4) и 4 младших бита старшего регистра (R1, R3 и R5). Таким образом, числа, определяющие высоту звука, находятся в пределах от 0 до 4095 включительно. В табл. 10.1 приводится соответствие звуков из диапазона неполных девяти октав и чисел, определяющих эти ноты.

Таблица 10.1. Значения для регистров R0...R5

 СККБМ12345
До 338916958474242121065326
До диез 319916008004002001005025
Ре 30201510755377189944724
Ре диез 28501425712356178894522
Ми 26901345673336168844221
Фа 25391270635317159794020
Фа диез 23971198599300150753719
Соль 22621131566283141713518
Соль диез 21351068534267133673317
Ля403120151008504252126633116
Си бемоль38041902951476238119593015
Си35911795898449224112562814
<


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