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 ──────────────────────────────────────────
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября