╒══════════════════════════════╕ │░░░░░░ ПРОГРАММИРОВАНИЕ ░░░░░░│ ╘══════════════════════════════╛ Очень многие пользователи 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, и естественно сделать сам мультролик. Надеюсь, что рассмотренная выше программа,позволит делать мульт- ролики болле привлекательными. * * *