3Bit #01
03 января 2005

Рабочий стол - General Sound AY Emulator v1.0

 General Sound AY Emulator v1.0

(c) Dr.Lion/RSM
──────────────────────────────────────────
  Представленный ниже програмный продукт является авторским дос-
тоянием! При его использовании ссылка на автора обязательна!
  Данный програмный продукт является эмулятором м/с AY-3-8910 на
звуковой карте  General Sound 1.04 (GS).  Версия ПЗУ GS не имеет
значения, так как оно используется лишь при загрузке внутреннего
кода эмулятора AY.  В дальнейшем эмулятор работает непосредстве-
нно с "железом" GS.
  Всвязи с тем, что скоростные характеристики GS весьма  скромны
для полнофункциональной эмуляции AY, было принято решение реали-
зовать минимум возможностей AY, позволяющих проигрывать  на эму-
ляторе музыку любым стандартным плеером,  предварительно переде-
ланым под обмен данными с эмулятором AY.
  Ниже представлены особенности эмулятора AY:

1.Обмен данными
  Формат данных, передаваемых на эмулятор аналогичен формату AY,
  т.е.существует порт регистра (#BB), в который записывается но-
  мер выбираемого регистра, и порт данных (#B3), в который запи-
  сываются передаваемые в регистр данные. Но в отличие от реаль-
  ного AY, эмулятор не может  моментально принять посылаемые  на
  него данные, ведь эти данные должен прочитать практически пол-
  ностью загруженый генерацией звука процессор GS.  Поэтому  за-
  пись данных в регистр эмулятора выполняется следующим образом:
  
            ....
            LD   A,register     ;номер регистра для записи
            OUT  (#BB),A
            LD   A,data         ;записываемые данные
            OUT  (#B3),A
            CALL WaitDat        
            ....

    WaitDat IN   A,(#BB)        ;ожидание чтения эмулятором по-
            RLCA                ;сланых ему данных
            JR   C,WaitDat
            RET  
  
  Так же эмулятор не позволяет производить  чтение из его регис-
  тров. Реализация такой возможности  неоправдано затормозила бы
  общую скорость обмена данными между ZX и эмулятором AY.

2.Частота дискретизации
  Она составляет  12500Hz  и позволяет  воспроизводить тональные
  частоты в диапазоне 6076,39-26,71Hz, что соответствует коэффи-
  циентам деления от 18 до 4095. Частоты выше 6076,39Hz преобра-
  зовываются в частоту 6076,39Hz. Диапазон шумовых частот гораз-
  до уже, т.к. разрядность коеффициента деления для частоты шума
  составляет 5 бит (но это стандарт AY).

3.Разрядность и назначение битов регистров
  Это сохранилось без  изменений за  исключением регистров R12 и
  R13. Регистр R12 может  содержать числа  от 0 до 3. Если число
  больше 3, то оно преобразуется в 3. Таким образом честота оги-
  бающей не может быть ниже 6,68Hz.  С другой стороны, коэффици-
  ент деления для частоты огибающей не может быть меньше 5.  R13
  может принимать значения 8, A, C, E или любое другое значение,
  которое после преобразования все равно примет одно  из четырех
  оговореных выше значений.

4.Генераторы тона, шума, огибающей
  Они построены на 24-х битных  масштабирующих счетчиках-делите-
  лях по примерной схеме:

             ....               ;тон канала A
    A_NumA   LD   HL,0          ;младшие 16 бит накопления
    A_SetA   LD   DE,0          ;младшие 16 бит приращения
             ADD  HL,DE
             LD   (A_NumA+1),HL ;накопление
    A_NumB   LD   A,0           ;старшие 8 бит накопления
    A_SetB   ADC  A,0           ;старшие 8 бит приращения
             LD   (A_NumB+1),A  ;накопление
             JR   NC,B_NumA
             LD   A,C           ;смена полупериода волны
             XOR  %00000001 
             LD   C,A
    B_NumB   ....               ;тон канала B

  Масштаборующий коэффициент вычисляется по следующей формуле:

             K=(NumA+65536*NumB)/(65536*256)

             K=0-0,99999994 точность до 0,01Hz

             Frq=Fgsi*K где Fgsi=12500Hz

  Генератор шума сильно упрощен  и очень далек от реальной схемы
  генеретора шума AY. Ситуация еще больше усугубляется малой ча-
  стотой дискретизации, которая позволяет использовать коэффици-
  енты деления для частоты шума только в пределах от 18 до 31.
  Реализация генератора случайной последовательности бит для ге-
  нератора шума и миксера:

             ....
             LD   (N_NumB+1),A  ;накопление
             JR   NC,Mixer
             LD   A,R           ;вычисление псевдослучайного
             RRCA               ;бита
             LD   R,A
             JR   NC,Mixer
             LD   A,C           ;смена полупериода волны для
             XOR  %00111000     ;всех каналов сразу
             LD   C,A
    Mixer    LD   A,C           ;замаскировать биты полуволн
    MixVal   OR   0             ;битами миксера
             LD   L,A           ;бит=0 - активный сигнал  
             ....

5.Дополнительные возможности
  В эмуляторе AY реализовано два дополнительных регистра R14,R15
  выполняющие некоторые дополнительные функции. Регистр R14 пре-
  дназначен  для управления  общей громкостью  звука эмулятора и
  может принимать значения от 0(минимум) до 15(максимум). Не ре-
  комендуется задавать значения больше 15.  Код громкости преоб-
  разуется по экспоненциальной шкале во внутреннюю громкость ка-
  налов GS. Через R15 можно задать один из 4-х законов, по кото-
  рым вычисляются выходные значения DAC'ов каналов GS.

6.DAC GS и каналы AY
  Как известно, GS имеет четыре 8-ми битных канала  A,B,C,D. Для
  каждого канала можно задавать "аппаратную" громкость 0-63. Ка-
  налы A и B объеденены в левый канал, а C и D - в правый. Соот-
  ветствие AY каналов и каналов GS выражает следующая таблица:

        ┌──────────┬──────────┬─────────────────────┐
        │ Канал AY │ Канал GS │ Громкость канала GS │
        ├──────────┼──────────┼─────────────────────┤
        │   A      │   A      │   100% (63 R14=15)  │
        │   B      │   B,C    │   50%  (31 R14=15)  │
        │   C      │   D      │   100% (63 R14=15)  │
        └──────────┴──────────┴─────────────────────┘

  Регистр R15 позволяет выбрать шкалу громкости по одному из за-
  конов:0-линейный, 1-квадратный, 2-экспоненциальный, 3-гипербо-
  лический. Следует заметить, что экспоненциальный закон являет-
  ся "родным" для AY, поэтому он активен поумолчанию. Квадратный
  закон введен как аналог экспоненциального закона,  но он имеет
  более высокую  и насыщеную  выходную громкость.  Другие законы 
  носят, скорее, экспериментальный характер.

  Эмулятор распространяется в виде  исходника  и инсталляционной
программы. Исходник можно вставить в свою программу. Инсталляци-
онная программа загружает в GS программу эмулятора AY  и переза-
пускает Speccy.  Она нужна для работы некоторых уже адаптирован-
ных под эмулятор программ, например PT3+69 by Alone Coder.
  Эмулятор AY может найти самое разное приминение. Например, су-
шествует  такой девайс,  как Turbo Sound (два AY).  Уже пытаются 
написать под него 6-ти канальный музыкальный редактор.  Но, ска-
жем, эмуляторов, поддерживающих данный девайс меньше, чем эмуля-
торов, имеющих  в своем арсенале  General Sound.  Поэтому, новые
программы под 6-ти канальный FM-звук можно адаптировать под обы-
чный AY  и  мой эмулятор AY на GS.  Вообщем, юзайте так, как вам
позволяет ваша фантазия!
   Напоследок приведу пример адаптации PT3+69 под эмулятор AY:

-- Последовательность переделки PRO TRACKER 3.69 под GSAYemul --
1. В pt5_368.H найти процедуру OUTAY и заменить ее на:

    OUTAY    LD   HL,frqA    ;GSAYemul!
             LD   BC,#0D00   ;пересылка данных в эмулятор
    OUTAY0   LD   A,C
             OUT  (#BB),A
             LD   A,(HL)
             INC  HL
             OUT  (#B3),A
             CALL OUTAY1
             INC  C
             DJNZ OUTAY0
             LD   A,C
             OUT  (#BB),A
             LD   A,(HL)
             CP   B
             RET  Z
             OUT  (#B3),A
             LD   (HL),0
             RET 
    OUTAY1   IN   A,(#BB)
             RLCA 
             JR   C,OUTAY1
             RET 

2. В pt3D.H найти процедуру IVOLQ и заменить ее на:

    IVOLQ    LD   (VOL),A    ;GSAYemul!
             PUSH AF         ;глобальная громкость звука
             LD   DE,#41A6   ;в редакторе
             CALL PRF8
             LD   A,#10
             OUT  (#BB),A
             POP  AF
             OUT  (#B3),A
             RET 
 
3. В PTconst.H найти процедуру GETRG и заменить ее на:

    GETRG    LD   (ZZC),A    ;GSAYemul!
             PUSH DE         ;анализатор каналов
             LD   DE,frqA
             PUSH HL
             LD   H,0
             ADD  HL,DE
             LD   A,(HL)
             POP  HL
             LD   L,H
             LD   H,0
             ADD  HL,DE
             LD   E,(HL)
             INC  HL
             LD   D,(HL)
             LD   L,E
             CPL 
             AND  #0F
             ADD  A,'SIN
             LD   H,A
             LD   A,D
             BIT  3,A
             CPL 
             JR   Z,$+3
             XOR  A
             AND  7
             POP  DE
             RET 

4. В PT369.H найти метку tABOUT  и заменить DB с названием реда-
   ктора на новое:

   DB "-- Pro Tracker v3+69 for GSAYemul v1.0 by Dr.Lion/RSM --"

5. Запускаем сборщик mkpt3.B  и переменовываем полученый файл во
   что-то вроде PT3+69gs.B
                                                       3.10.2004
──────────────────────────────────────────




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

Похожие статьи:
Реклама - реклама и объявления.
Potoki - Поток сознания Валерии "Не обижай меня".
Юмор - Правила пользования мужским туалетом.

В этот день...   25 сентября