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
──────────────────────────────────────────



Другие статьи номера:

От редакции - новый украинский электронный журнал под названием "3BiT".

От редакции - накануне: переписка авторов журнала с корреспондентами.

От редакции - Credits: авторы журнала.

Speccy news - новости: Scl выпустил газету Cossackos, результаты Воронежского фестиваля KidSoft'2004, Сергей Бульба архив AY музыки, Alone Coder выпустил Info Guide #6...

Программинг - новый быстрой и короткий PT3.x Player от RSM.

Программинг - дизайн исходных кодов: основные требования к листинг программы, ориентированной на широкую публику.

Программинг - процедуры печати текста шрифтами 8х8, 6х8, 5х8, 4х8 точек.

Программинг - обзор особенностей моделей оттечественного и фирменного спектрума от Rob F.

Программинг - сборник кодов: Рисование окна с рамкой в цвете, обработка дисковых ошибок TR-DOS, универсальня процедура Scroll'a экрана.

Программинг - Game Making: Mad Killer делится опытом создания игр для ZX Spectrum.

Программинг - Нестандартное использование General Sound: эмулятор звукового сопроцессора AY-3-8910.

Hacker Zone - "фрикинг": Халявные звонки на таксофонах. Бесплатные звонки в любую точку мира.

Перспективы - Dune для Спектрума от Сосюра Игоря.

Есть мнение - Mad Killer уличает Инфорком в продажности PC.

Рабочий стол - JPEG/GIF laboratory 1.1: программа для просмотра картинок в формате JPEG/GIF.

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

Рабочий стол - обзор утилиты для поиска музыкальных файлов Pro Tracker 3.X Mod Finder v1.2

Игромания - Архивариус: обзор не очень свежей но интересно адвентюры "Последняя авантюра".

Игромания - Wolf 2004: Мир увидел то, над чем трудился Alone Coder целых 8-мь лет!!

Железячки - Кое-что о CMOS-часах: доработанная схема от Alone Coder'a.

Железячки - обзор некоторых современных контроллеров для работы с внешними накопителями информации для ZX-Spectrum.

Веселуха - Жизнь простого сисадмина И печальна и тосклива если рядом нету пива: Сисадмину посвящается.

Веселуха - юмористический рассказ: Я МАШИНА.

Веселуха - Компьютерные анекдоты.

Иной мир - Radeon X700: недорогая основа для геймерских карт.

Разное - отчет Rob F. с Украинской тусовки SpeXtream'2004.

Разное - старости: для чего нужны программы, особенно игровые и как их делать хорошо.

Разное - Конкурс от групы P7S для патриотов Спектрума!

Разное - Интервью с DESALEX'ом/XPJ.

Разное - интервью с автором одного из самых ожидаемых игровых проектов, игры Dune: The Battle for Arakkis.

Разное - интервью с автором нашумевшей демки под VIC-20 - Viznut/PWP.

Разное - интервью с известным Английским спектрумистом Gasman/Raww arse.

Разное - Интервью с Random'om взятое на Construction Chaos 2004.

Разное - Реклама - двигатель торговли и не только.


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

Похожие статьи:
Железо - две схемы подключения Covox'a.
Перед судом истории - О себе, о "Страннике", и о тех, кто рядом.
Brand Name - "Бытовой Компьютер Компаньон" - история Ижевского клона ZX Spectrum'a.

В этот день...   24 июня