╔═════════════════════════╗ ║ Программистам об AY-шке ║▓ ╚═════════════════════════╝▓▒ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░ ТЕХНИЧЕСКАЯ ИНФОРМАЦИЯ ПО ПРОГРАММИРОВАHИЮ МУЗЫКАЛЬНОГО СОПРОЦЕССОРА "AY" НА SPECCY ! ========================================== Музыкальный сопроцессор подключается к спектруму через два внутренних порта: 1. Порт 49149 (#BFFD) 2. Порт 65533 (#FFFD) Именно через эти два порта процессор Z80 осуществляет обмен данными с муз.сопр. У муз.сопр. имеется шестнадцать внутренних регистров R0...R15.Эти регистры двунаправ- ленные,т.е. информацию можно в них записы- вать и считывать.Для доступа к произволь- ному регистру его неужно сделать теку- щим,для этого надо записать номер этого регистра (0..15) в порт 65533... после этого можно осуществлять обмен данными с этим регистром: Для записи в рег. - вывод в порт 49149 Для чтения из рег. - чтение из порта 65533 Муз.сопр. имеет три независимых канала для формирования звука (A,B и C) и два двунаправленных восьмиразрядных канала ввода/вывода - IRA и IRB: Через канал IRA осуществляется связь с принтером, вывод сигналов для специального интерфейса MIDI и, кроме этого,связь со специальной выносной клавиатурой функцио- нальных клавиш, используемых в расширенном интерпретаторе Бейсика. Но данные функции канал IRA выполняет в натуральном Sinclairе, а у нас в России в наших моделях это не прижилось... ( по крайней мере мной небыло найдено ни одной машины, где бы так использовался канал IRA)... В наше время каналы IRA и IRB некоторыми используються для подключения внешних устройств: AY-Mouse, AY-Covox и т.д. Hеко- торые из них даже стали стандартом, правда не очень распостраненным (Ay-Mouse). Теперь рассмотрим для чего нужны все ре- гистры и как сформировать звук: *** R0/R1, R2/R3, R4/R5 *** Три спаренных регистра R0/R1;R2/R3;R4/R5 используются для выборки частоты тона соответственно для каналов A,B и C. Необходимые двенадцатиразрядные значения образуються из восьми бит младшего по но- меру регистра и четырех младших бит стар- шего по номеру регистра... *** Регистр R6 *** Младшие пять разрядов этого регистра за- дают частоту шума... *** Регистр R7 *** Через этот регистр осуществляется управле- ние звуковыми и шумовыми каналами, а так- же каналами ввода/вывода IRA и IRB: Биты 0..2 если их установить,то будет запрещен вы- вод частоты тона в каналы A,B и C соотв. Биты 3..5 -//- но для частоты шума... Биты 6 и 7 Их состояние определяет режим работы ка- налов IRA и IRB соответственно: если бит=1, то канал работает на ввод... если бит=0, то канал работает на вывод.. *** Регистры R8,R9 и R10 *** Младшие пять разрядов этих регистров уп- равляют соответственно амплитудой каналов A,B и C. *** Регистры R11/R12 *** Спаренные регистры R11/R12 образуют шестнадцатиразрядное значение огибающей выходного сигнала,R11-младш. R12-старш. *** Регистр R13 *** Младшие 4 разряда этого регистра управляют формой и режимом огибающейвыходного сигна- ла: Бит 0 - затухание Бит 1 - чередование Бит 2 - нарастание Бит 3 - продолжение *** Регистры R14/R15 *** R14-связь с IRA R15-связь с IRB ... ------------------------------------------ Теперь конкретно о воспроизведении Digital эффектов: Оцифрованный звук представляет из себя конечный набор восьмиразрядных байт, ха- рактеризующих значения амплитуды цифруемых колебаний в дискретные моменты времени... Для воспроизведения оцифровок нужно пода- вать в порты управления громкостью эти байты с определенной частотой... Распространены два вида форматов Digital звука 1.Wav-файлы: Оцифровка производиться по 256-бальной шкале (0..255), только поло- жительной части звуковой волны... 2.Aif-файлы: Оцифровка производиться по двум 128-бальным шкалам: Положительная часть волны (0...128) Отрицательная часть волны (-128...0) Рассмотрим как же воспроизвести оцифр. звук: Если у вас есть COVOX, то значения байтов из WAV-файла целиком и полностью подаются в порт данных COVOX`а. Для проиг- рывания AIF-файлов к каждому байту перед подачей его на COVOX надо прибавить число 128... Это обуславливается тем, что COVOX -это устройство для воспроизведения восьмибит- ных WAV-файлов... и AIF необходимо преоб- разовать для корректного проигрывания COVOX'ом... А теперь программа: ORG 30000 COVOX EQU #FB START EQU 35000 LENGTH EQU 5000 PAUSA EQU 20 XOR A OUT (COVOX),A LD HL,START LD DE,LENGTH LOOP LD A,(HL) *** ADD A,128 OUT (COVOX),A LD B,PAUSA DJNZ $ INC HL DEC DE LD A,D OR E JR NZ,LOOP RET Если же у вас нет COVOX'а,но есть AY,то можно воспроизвести DIGITAL звук на нем, хотя качество будет похуже: ORG 30000 START EQU 35000 LENGTH EQU 5000 PAUSA EQU 20 CHANEL EQU 10 LD BC,#FFFD LD A,#07 OUT (C),A LD B,#BF LD A,#FF OUT (C),A LD HL,START LD DE,LENGTH LD BC,#FF LD A,CHANEL OUT (C),A LOOP LD B,#BF LD A,(HL) *** ADD A,128 SRL A SRL A SRL A OUT (C),A LD B,PAUSA DJNZ $ INC HL DEC DE LD A,D OR E JR NZ,LOOP RET Переменные используемые в программах имеют следующие значения: START- адресс хранения в памяти оцифровки. LENGTH - длина оцифровки. COVOX - порта COVOX'а (обычно #FB для PENTAGONA 128, и 231 для SCORPIONA 256)... CHANEL-канал для воспроизведения(см. выше) PAUSA-самый главный параметр.Он определяет с какой частотой будет проигрываться оциф- ровка. Вообще говоря PAUSA задает время паузы между двумя соседними выводами в звуковой канал... В обоих случаях звездочкой помечены строч- ки, которые необходимо оставить, если воспроизводятся AIF-файлы, и надо удалить для воспроизведения WAV-файлов... Вот в принципе и все что надо знать чтобы воспроизвести оцифровку... Но данный способ воспроизведения является частото время зависимым, т.е. при измене- нии частоты изменяется соответствующим об- разом и время воспроизведения инструмен- та...