ZX-Ревю 1996 №9 1995 г.

Читатель - читателю - музыкальные процессоры AY-3-8912/8912.


                     
                     МУЗЫКАЛЬНЫЕ ПРОЦЕССОРЫ AY-3-8912/8912

(c) Р.Сагитдинов, г.Екатеринбуг.                     
                      
   1. ОПИСАНИЕ.
     Музыкальные прцессоры (МП) позволяют воспроизводить широкий спектр 
звуковых эффектов.                         
    Каждый из трех аналоговых каналов МП воспроизводит звуковую картину путем 
декодирования двоичного кода по логарифмической шкале.
    Все сигналы управления МП являются цифровыми и вырабатываются 
непосредственно в микропроцессоре, что дает возможность обойтись без изменений 
в схемотехнике.
    Для связи МП с микропроцессором в AY-3-8910 имеется два универсальных 
8-разрядных порта ввода/вывода, а его корпус имеет 40 выводов. В AY-3-8912 
имеется один порт и 28 выводов.
  2. НАЗНАЧЕНИЕ ВЫВОДОВ.
          DA0/DA7-шина данные/адрес с тремя состояниями. Выводы 30-37 в 
AY-3-8910, выводы 21-28 в AY-3-8912.
    Эта 8-разрядная двунаправленная шина паредназначена для пересылки адресов
и данных процессором и самим МП. В режиме данных, DA0-DA7 соответствуют разрядам 
В0-В7 регистровой области генератора. В адресном режиме DA0-DA3 задают номер
выбираемого регистра (0-15), а DA4-DA7, в сочетании с адресными входами,
А8 и неА9 формируют старшую часть адреса.
          А8 (вход)-вывод 25(17) AY-3-9810 (AY-3-8912).
        неА9 (вход)-вывод 24 AY-3-8910, в AY-3-8912 не поддерживается.
    Область памяти МП состоит из 16-ти 8-разрядных слов, входящих в состав общей 
1024-словной памяти. Как раз с помощью этих адресных шин и происходит расширение 
адресации памяти МП с 256 до 1024 слов.
        неRESET (вход)-вывод 23 AY-3-8910, 16 у AY-3-8912.
    Используется для инициализации системы и установки блоков в исходное 
состояние путем подачи на вывод логического нуля. При этом все регистры памяти 
МП сбрасываются в ноль.
                   
                                   AY-3-8910

                            ----------------------¬  
                    земля --+1 *                40+-- +5V
           не используется--+2                  39+--TEST
                   канал В--+3                  38+--канал С
                   канал A--+4                  37+--DA0
           не используется--+5                  36+--DA1
                      IOB7--+6                  35+--DA2
                      IOB6--+7                  34+--DA3
                      IOB5--+8                  33+--DA4
                      IOB4--+9                  32+--DA5 
                      IOB3--+10                 31+--DA6 
                      IOB2--+11                 30+--DA7 
                      IOB1--+12                 29+--BC1 
                      IOB0--+13                 28+--BC2 
                      IOA7--+14                 27+--BDIR 
                      IOA6--+15                 26+--TEST 2 
                      IOA5--+16                 25+--A8
                      IOA4--+17                 24+--неA9
                      IOA3--+18                 23+--неRESET
                      IOA2--+19                 22+--CLOCK(тактовые импульсы)                              
                      IOA1--+20                 21+--IOA0
                            L----------------------
          CLOCK(вход)-вывод 22 AY-3-8910, 15 у AY-3-8912.
    Используется для подачи тактовой частоты, задающей временные параметры 
генераторов шума, тона и генераторов огибающей. Вход ТТЛ-совместимый.
          BDIR, BC2, BC1 (входы)-выводы 27, 28, 29 AY-3-8910, 18,19,20 у 
AY-3-8912.
    Управляющие шины-BUS DIRECTION 1,2. Исползуются для управления всеми 
внешними и внутренними шинными операциями в МП. Сигналы для этих шин 
вырабатываются непосредственно процессором.
          IOA0-IOA7 (вход/выход) - выводы 14-21 AY-3-8910, 7-14 у AY-3-8912.
          IOB0-IOB7 (вход/выход) - вывод 6-13 AY-3-8910, в AY-3-8912 не 
          поддерживается
                                                                                    
                                  AY-3-8919
                            ---------------------¬
                   канал С--+1 *               28+--DA0
                    TEST 1--+2                 27+--DA1
                       +5V--+3                 26+--DA2
                   канал B--+4                 25+--DA3
                   канал A--+5                 24+--DA4
                     земля--+6                 23+--DA5
                      IOA7--+7                 22+--DA6
                      IOA6--+8                 21+--DA7
                      IOA5--+9                 20+--BC1
                      IOA4--+10                19+--BC2
                      IOA3--+11                18+--BDIR
                      IOA2--+12                17+--A8
                      IOA1--+13                16+--неRESET
                      IOA0--+14                15+--CLOCK
                            L---------------------

          TEST1-вывод 39 AY-3-8910, 2 у AY-3-8912.
          TEST2-вывод 26 AY-3-8910, в AY-3-8912 не поддерживается.
    Предназначены для тестирования генератора.
  4. РЕГИСТРЫ.
    МП имеют шестнадцать восьмиразрядных регистров(R0-R15). Через эти регистры 
осуществляется управление тональным генератором, генератором шума, смесителем и 
вводом/выводом, амплитудой выходных сигналов, генератором огибающей, формой
и периодом огибающей.    
  4.1. ТОНАЛЬНЫЙ ГЕНЕРАТОР (ТГ).
    Каждый канал имеет свой собственный ТГ, который вырабатывает импульсы 
требуемой частоты. Управляется регистрами R0-R5.
  4.2. ГЕНЕРАТОР ШУМА (ГШ).
    Вырабатывает частоту шума на все каналы. Управляется регистром R6.
  4.3. СМЕСИТЕЛЬ.
    Через этот регистр осуществляется управление звуковыми каналами и регистрами 
ввода/вывода. Управление осуществляется через регистр R7. Смеситель объединяет 
частоты генераторов тона и шума каждого из 3-х каналов. Направление передачи 
информации в портах ввода/вывода общего назначения (IOA и IOB) задается 
состоянием двух старших разрядов регистра R7.
  4.4. АМПЛИТУДА.
    Амплитуды сигналов задаются содержимым регистров R8-R10 для каналов А,В,С
соответственно.
  4.5. ГЕНЕРАТОР ОГИБАЮЩЕЙ (ГО).
    В МП реализовано два независимых способа создания сложных форм огибающей
выходного сигнала:
    - изменение частоты ГО программированием регистров R11 и R12;
    - изменение формы огибающей изменением содержимого регистра R13.
  4.6. ПАМЯТЬ ДАННЫХ ПОРТОВ ВВОДА/ВЫВОДА.
    Регистры R14 и R15 используются соответственно для связи с каналами 
ввода/вывода. Содержимое этих регистров можно в любой момент считывать и 
записывать - на формировании звука это никак не отражается.
  3. ЗВУКОВЫЕ ГЕНЕРАТОРЫ.
    Звуковая частота в МП формируется несколькими звуковыми генераторами.
К таковым относятся:
    - тональные генераторы, вырабатывающие для каждого канала основную тональную
частоту;
    - генератор шума;
    - смесители, объединяют для каждого канала их выходной и шумовой сигналы;
    - регулятор амплитуды, управляет ЦАП;
    - ЦАП, формирует для каждого из каналов выходной звуковой сигнал;
    - генератор огибающей, вырабатывает образец огибающей, используемый для 
амплитудной модуляции выходных сигналов.
  5. ПРОГРАММИРОВАНИЕ МП. 
    Поговорим о самом интересном - о программировании МП.
    Программирование МП на ZX-Spectrum осуществляется через два порта, а именно: 
49149(#BFFD) и 65533(#FFFD).
    Для доступа к какому-либо регистру МП, его номер необходимо записать в порт
65533, а значение регистра в порт 49149.
    С этим прекрасно справляется команда OUT. Поэтому МП можно программировать
как из АССЕМБЛЕРа, так и из БЕЙСИКа. Но сначала рассмотрим побитную раскладку 
регистров R0-R13, (R14,R15 никак не влияют на формирование звука).
   РЕГИСТР                             НАЗНАЧЕНИЕ
     0             Плавная установка высоты тона канала А (0...255)
     1             Грубая установка высоты тона канала А (0...15)
     2             Плавная установка высоты тона канала В (0...255)
     3             Грубая установка высоты тона канала В (0...15)
     4             Плавная установка высоты тона канала С (0...255)
     5             Грубая установка высоты тона канала С (0...15)ъ
     6             Частота шума для каналов А,В,С одновременно (0...31)
     7             Управление каналами :
             бит 0-тон А                   бит 3-шум А
             бит 1-тон В                   бит 4-шум В
             бит 2-тон С                   бит 5-шум С
        0 в бите указывает,что функция разрешена
     8             Амплитуда канала А (0...15)
     9             Амплитуда канала В (0...15)
     10            Амплитуда канала С (0...15)
        При амплитуде, равной 15, включается генератор огибающей
     11            Плавное управление периодом огибающей (0...255)
     12            Грубое управление периодом огибающей (0...255)
     13            Выбор типа огибающей (0...15)

    Пример программирования МП на АССЕМБЛЕРе выглядит так:
 
10 ;7-th ORACLE & Sagitdinov R.№1995 Special for INFORCOM
20         ORG 40000
30         ENT
40         LD BC,65533   ;
50         LD A,3        ;в порт 65533 загружается номер 3-го регистра
60         OUT (C),A     ;(грубая установка тона в канале В)
70         LD BC,49149   ;в порт 49149 загркжается значение регистра
80         LD A,5        ;(высота тона 5)
90         OUT (C),A     ;
100        LD BC,65533   ;программирование регистра 7
110        LD A,7        ;
120        OUT (C),A     ;
130        LD BC,49149   ;значение регистра 7
140        LD A,%11111101;(включается канал В,без шумовых эффектов
150        OUT (C),A     ;
160        LD BC,65533   ;прогрвммирование регистра 9
170        LD A,9        ;(амплитуда канала В)
180        OUT (C),A     ;
190        LD BC,49149   ;значение регистра 9
200        LD A,16       ;(т.к. амплитуда равна 16,то включается гене-
210        OUT (C),A     ;ратор огибающей
220        LD BC,65533   ;программирование регистра 12
230        LD A,12       ;(грубое управление периодом огибающей)
240        OUT (C),A     ;
250        LD BC,49149   ;величена периода огибающей
260        LD A,255      ;
270        OUT (C),A     ;
280        LD BC,65533   ;программирование типа огибающей
290        LD A,13       ;
300        OUT (C),A     ;
310        LD BC,49149   ;
320        LD A,%11111110;
330        RET           ;возврат

    Я не советую подобные программы использовать для написания реальных
программ, т.к. невооруженным глазом видно, что они занимают много памяти.
   Лучше пользоваться готовыми блоками или использовать музыкальные редакторы.
Данная программа приведена для лучшего понимания материала.
    Нужно немного сказать о типах огибающей:
       бит 0 - амплитуда меняется периодически от 0 до Мах;
       бит 1 - амплитуда наростает с 0 до Мах и затем остается на постоянном
    уровне;
       бит 2 - амплитуда с ее Мах значения плавно затухает, а через некоторое
    время процесс повторяется;
       бит 3-амплитуда плавно возрастает до Мах и резко обрывается.
   Период огибающей зависит от содержимого R11,R12.
    Программа, аналогичная выше приведенной, но на БЕЙСИКЕ:
10 REM 7-th ORACLE & Sagitdinov R.№1995 Special for INFORCOM
20 OUT 65533,3:OUT 49149,5:REM установка высоты тона канала В
30 OUT 65533,7:OUT 49149,BIN 11111101:REM включается канал В
40 OUT 65533,9:OUT 49149,16:REM установка амплитуды канала В
50 OUT 65533,12:OUT 49149,255:REM установка периода огибающей
60 OUT 65533,13:OUT 49149,BIN 11111110:REM выбор типа огибающей
   Эти программы программируют канал B. Замечу, что канал В в Spectrum работает 
на правый и левый каналы, а A и C на правый и левый, соответственно (имеются 
ввиду стереоканалы).
   Попробуйте бейсик-программу дополнить строками:
60 OUT 65533,9:REM подготовка к изменению амплитуды канала В
70 FOR I=10 TO 2 STEP -1:REM организация цикла
80 OUT 49149,I:REM непосредственная установка амплитуды канала В
90 NEXT I
100 GO TO 70:REM зацикливание
110 OUT 65533,7:OUT 49149,BIN 11111111:REM отключение всех каналов
   Звуковой эффект похож на звуки при подскакивании мячика. Остановить программу
можно BREAK'ом, но в этом случае МП будет генерировать какую-нибудь частоту. 
Этим реализируется главное достоинство МП - параллельная генерация звука и 
выполнение основной программы. Центральный процессор нужен только для 
изменения содержимого регистров, командой GO TO 110 можно отключить все каналы.
   На этом я заканчиваю. Надеюсь, что Вы узнали что-нибудь новое.
     Если есть вопросы, то пишите. Думаю, информация о МП не должна ограничиться
данной статьей, а, наоборот, послужит поводом для обмена информацией на 
страницах "РЕВЮ" о музыкальных возможностях "всеми нами горячо любимого 
товарища" Spectrum`а, а может быть и послужит для открытия новой рубрики.
     Мой адрес: 620072, г.Екатеринбург, ул. В.Высоцкого, 10-384, Сагитдинову Р.



СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Так кто же первый? - Когда и как появился Первый Отечественный Спектрум?..
Железо - Хитрость как не платить за телефонные разговоры.
Фантазия - новелла по игре "Viaje at centre of Terra" (Путешествие к центру земли).
Ликбез - Ассемблер взгляд издалека: Работа с внешними устройствами. Чтение данных из порта. Команды записи в порт.
Читы - читы и пароли к популярным западным играм.

В этот день...   28 апреля