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


         

базовый адрес блока данных эффекта


0/1 - базовый адрес блока данных эффекта 2/3 - текущий адрес в блоке данных 4/5 - частота тона 6 - частота шума 7 - флаг разрешения вывода в канал 8 - длительность звучания эффекта 9 - количество повторений эффекта 10 - вывод тона (1), шума (8) или их комбинации (9) 11/12 - базовый адрес данных для формирования частоты 13/14 - текущий адрес данных для формирования частоты 15/16 - базовый адрес данных для формирования огибающей 17/18 - текущий адрес данных для формирования огибающей

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

0 - конец данных (возврат на повторение эффекта) 1 - адрес данных для изменения тона (+2 байта адреса) 2 - адрес данных для формирования огибающей (+2 байта адреса) 3 - управление выводом тона/шума (+2 байта: 1-й определяет вывод тона, шума или комбинированный вывод, 2-й - длительность звучания)

Когда программа встретит код 0, вывод звука либо прекратится, либо весь эффект повторится еще раз - в зависимости от заданного изначально количества повторений. Следующие два байта после кодов 1 или 2 интерпретируются как адреса дополнительных блоков данных, определяющих характер изменения частоты звука и огибающей соответственно. С этих двух кодов должен начинаться любой блок данных, иначе программа не будет «знать», каким образом изменять звук. Последний код (3) служит собственно для извлечения звука. После него необходимо указать еще два однобайтовых параметра: первый задает вывод тона (1), шума (8) либо одновременно и тона и шума (9), второй определяет продолжительность заданного звука в 50-х долях секунды.


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