╒══════════════════════════════╕
│░░░░░░ ПРОГРАММИРОВАНИЕ ░░░░░░│
╘══════════════════════════════╛
Очень многие пользователи ZX-
-Spectrum, которые освоили пакет
программ "Animation" постоянно
задают один и тот же вопрос.
Как подключить музыкальное соп-
ровождение при выводе мультика?
Для тех кто имеет компьютер с
ОЗУ 48кб. подключение мелодии
связано с большими трудностями.
Если мультролик займет все сво-
бодное место ОЗУ, то вставить
музыкальное сопровождение будет
невозможно.
В этом отношении очень хорошие
возможности имеют пользователи
компьютеров с ОЗУ 128кб.и более.
Музыкальное сопровождение на та-
ких компьютерах можно сделать к
любому изготовленному вами муль-
тику, кроме того вы можете заг-
рузить в память компьютера сразу
несколько блоков.
Далее будет рассмотрено как
практически осушествить вывод
ролика с музыкальным сопровожде-
нием.
Величутин Н.В.
──────────────
Программа, приведенная ниже,по-
может всем,кто хочет чтобы вывод
мультролика сопровождался проиг-
рыванием музыки.
Ограничения:
1. Наличие не менее 128 кб. ОЗУ
2. Наличие музыкального процес-
сора.
В программе, которую мы сейчас
рассмотрим, мелодия загружается
в 4-ю страницу памяти, но поль-
зователи, естественно, могут ис-
пользовать любую другую страницу
Адрес инициализации мелодии и
адрес проигрывания приведены для
музыкального редактора ASM 1.12.
Для редакторов Sound Tracker и
Pro Tracker адреса следует заме-
нить соответственно на 49152 и
49158. Вы можете заменить эти
адреса и в готовом откомпилиро-
ванном блоке поместив адрес ини-
циализации мелодии по адресу
25002, а адрес проигрывания ме-
лодии по адресу 25004. Например
из Basic'a это можно сделать
набрав в строке POKE 25002,0:
POKE 25003,192:POKE 25004,6:POKE
25005,192.
Адрес старта программы 25000.
START EQU 33150 ;адрес старта
; мультролика
BUF EQU 25344 ;адрес буфера
;перехода по
;вектору пре-
;рываний
BANK EQU 23388 ;сист. пере-
;менная,номер
;страницы ОЗУ
ORG 25000
JR BEGIN
MISIN DEFW 49163 ;адрес иниц.
;мелодии
MUSIC DEFW 49166 ;адрес проиг-
;рывания мел.
BEGIN LD HL,(MUSIN)
LD (MUS1+1),HL
LD (MUS2+1),HL
LD HL,(MUSIC)
LD (MUS3+1),HL
LD A,20 ;подключаем
LD (BANK),A ;4 стр. ОЗУ
LD BC,#7FFD ; заносим в
OUT (C),A ; в порт
MUS1 CALL 49163 ; инициали-
; зация ме-
; лодии
LD BC,#7FFD ;подключаем
LD A,16 ;0 стр. ОЗУ
LD (BANK),A
OUT (C),A
CALL IM2ON ; включаем
;прерывания
;2-го рода
CALL START ; запуск
;мультролика
CALL IM2OFF ; включаем
;прерывания
;1-го рода
LD BC,#7FFD
LD A,20
LD (BANK),A
OUT (C),A
MUS2 CALL 49163
LD BC,#7FFD
LD A,16
LD (BANK),A
OUT (C),A
RET
;ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫ-
;ВАНИЙ 2-го РОДА.
;Работу данной подпрограммы мож-
;но разделить на 5 частей:
; 1.Сохранение на стеке значений
; всех регистров процессора
; 2.Переключение страницы ОЗУ
; 3.Проигрывание мелодии
; 4.Переключение страницы ОЗУ
; 5.Восстановление всех значений
; регистров процессора
OBRIM2 DI
PUSH HL
PUSH DE
PUSH BC
PUSH IX
PUSH IY
EXX
PUSH HL
PUSH DE
PUSH BC
PUSH AF
EX AF,AF'
PUSH AF
LD BC,#7FFD ; переклю-
LD A,20 ;чение стр.
OUT (C),A ; ОЗУ
PUSH BC
MUS3 CALL 49166 ;проигрыва-
;ние мелод.
POP BC ; переклю-
LD A,16 ;чение стр.
OUT (C),A ; ОЗУ
POP AF
EX AF,AF'
POP AF
POP BC
POP DE
POP HL
EXX
POP IY
POP IX
POP BC
POP DE
POP HL
EI
JP #0038 ;переход на
;опрос кла-
;виатуры и
;возврат в
; основную
; программу
;ПОДПРОГРАММА ВКЛЮЧЕНИЯ ПРЕРЫВА-
;НИЙ ВТОРОГО РОДА.
;В данной программе вначале под-
;готавливается буфер для перехо-
;да по вектору прерываний.
;Подготовка такого буфера необ-
;ходима для компьютеров у кото-
;рых нестабильна шина данных.
;Устанавливается вектор прерыва-
;ний на адрес этого буфера.
;Так как переход будет осущест-
;вляться по адресу #FFFF то по
;этому адресу заносится байт #18
;(JR), а относительный переход
;#F3 берется из ПЗУ.В адрес это-
;го перехода заносится байт #C3
;(JP) и далее адрес подпрограммы
;обработки прерываний.
IM2ON DI ;запрет прерыв.
LD HL,BUF ;в буфер за-
LD DE,BUF+1 ;носим числа
LD BC,#0100 ;#FF - адрес
LD (HL),#FF ;перехода по
LDIR ;вект.прерыв.
LD A,#18 ;код JR
LD (#FFFF),A ;в адрес
LD A,#C3 ;код JP
LD (#FFF4),A ;в адрес
LD HL,OBRIM2 ;переход на
LD (#FFF5),HL;подпрограм.
;обр.прерыв.
LD A,#63 ;устанавлив.
LD I,A ;вектор
;прерываний
IM 2 ;включаем
;прерывания
;2-го рода
EI
RET
;ПОДПРОГРАММА ВКЛЮЧЕНИЯ ПРЕРЫВА-
;НИЙ ПЕРВОГО РОДА.
IM2OFF DI
LD A,#3F ;устанавли-
LD I,A ;ваем вектор
;прерываний
IМ 1 ;включаем
;прерывания
;1-го рода
EI
RET
На следуюшей странице помещен
кодовый блок программы. Для его
использования необходимо скопи-
ровать экран, подготовить и от-
компилировать музыку по адресу
49152, и естественно сделать сам
мультролик.
Надеюсь, что рассмотренная выше
программа,позволит делать мульт-
ролики болле привлекательными.
* * *