|
Spectrum Progress
#02
19 января 1997 |
|
Записи программиста - программирование музыкального процессора AY-8912/10.

(C) Денис Паринов, 1997.
Музыкальный процессор включает в себя 16 ре-
гистров. 14 из них используется для формирова-
ния звука.
Для того, чтобы поместить в регистр музы-
кального сопроцессора какие либо данные, надо:
1) выбрать регистр для записи данных
LD BC,#FFFD
LD A,номер регистра 0 - 13
OUT (C),A
2) записать данные
LD BC,#BFFD
LD A,какoе либо число 0 - 255
OUT (C),A
Для чтения данных из регистра надо:
1) выбрать регистр для записи данных
LD BC,#FFFD
LD A,номер регистра 0 - 13
OUT (C),A
2) считать данные
IN A,(C)
Первые шесть регистров используются для
задания высоты звучания каждого канала из
диапазона 0 - 4095.
Регистры R0,R1 - частота звучания канала A.
Регистры R2,R3 - частота звучания канала B.
Регистры R4,R5 - частота звучания канала C.
Регистр R6 - определяет частоту выводимого
шума для трёх каналов из диапазона 0 - 31.
Регистр R7 - управляет звуковыми каналами
d7d6d5d4d3d2d1d0
x x │ │ │ │ │ └ запрещает звучание канала A.
│ │ │ │ └── запрещает звучание канала B.
│ │ │ └──── запрещает звучание канала C.
│ │ └────── запрещает шум канала A.
│ └──────── запрещает шум канала B.
└────────── запрещает шум канала C.
Следующие три регистра используются для
задания громкости звука из диапазона 0 - 15.
4-й бит указывает на то, что громкость будет
изменятся способом указанным в R13 и со
скоростью указаной в R11/R12.
Регистр R8 - определяет громкость канала A.
Регистр R9 - определяет громкость канала B.
Регистр R10 - определяет громкость канала C.
Регистры R11, R12 - определяют скорость
изменения громкости звука от 0 до 65535. (на
практике изменение рег. R11 малоощутимо,
поэтому достаточно задавать только рег. R12)
Регистр R13 - упровляет формированием
огибающей выходного сигнала:
#0,#1,#2,#3,#9 - затухание, затем тихо;
#4,#5,#6,#7,#F - нарастание, затем тихо;
#B - затухание, затем громко;
#D - нарастание, затем зромко;
#8 - повторяющееся затухание;
#C - повторяющееся нарастание;
#E - повторяющееся нарастание и
затухание;
#A - повторяющееся затухание и
нарастание;
Ну, а теперь несколько примеров, демонстри-
рующих сказаное.
Перед обращением к программе в регистр A
необходимо записать номер эффекта с 1 по 4.
; Вх: A - номер эффекта с 1 - 4.
AY_EFF LD HL,EFFECT1 ;Вычисляем
LD BC,#000E ;адрес начала
NEFF ADD HL,BC ;эффекта следующего
DEC A ;за выбранным.
JP NZ,NEFF ;
DEC HL ;HL на конец выбра-
;нного эффекта.
LD A,#0D ;Начать с рег-ра R13
LD C,#FD ;
NREG LD B,#FF ;Выбрать регистр AY
OUT (C),A ;для записи данных.
LD B,#BF ;Запись в регистр AY
OUTD ;байта из (HL) и
;уменьшение HL на 1.
DEC A ;Уменьшение номера
;регистра AY, если
JP P,NREG ;он Є 0, продолжить.
RET ;Иначе выйти.
; Эффект используется в различных boot'ах при
; запуске программ.
EFFECT1 DEFW #0080,#0001,#0000 ;частота тона
;для каналов A, B, C
DEFB #00 ;частота шума
DEFB #38 ;00111000 выкл. шум.
DEFB #10,#10,#10;громк. канал. A,B,C
DEFW #1500 ;изменение громкости
DEFB #01 ;затухание
; Эффект из программы Honey Commander.
EFFECT2 DEFW #203C,#2064,#208C
DEFB #00
DEFB #38
DEFB #10,#10,#10
DEFW #0810
DEFB #01
; Эффект 2 из Honey Commander.
EFFECT3 DEFW #2050,#2060,#2070
DEFB #01
DEFB #00
DEFB #10,#10,#10
DEFW #0400
DEFB #01
; Эффект напоминающий вращение лопастей
; вертолёта.
EFFECT4 DEFW #0000,#0000,#0000
DEFB #00
DEFB #07
DEFB #10,#10,#10
DEFW #0100
DEFB #0E
В заключение, об одном неприятном моменте.
Иногда при чтении с диска из динамиков слышен
гул - это происходит из за того, что програм-
мист не заглушает муз.процессор. Обычно для
этого нужно ещё раз проинициализировать проиг-
рователь мелодии.
На всякий случай мы приводим программу заглу-
шающую муз.процессор.
RES_AY LD HL,#0D00
LD DE,#FFBF
LD C,#FD
RES_AY1 LD B,D
OUT (C),H
LD B,E
OUT (C),L
DEC H
JP P,RES_AY1
RET
══ * ══
Другие статьи номера:
Похожие статьи:
В этот день... 19 ноября