Эмулятор музыкального сопроцессора компьютера

ZX SPECTRUM

Что делает эта программа?

Что нового в этой версии?

О командах меню

О командной строке

Форматы используемых файлов

Как вытащить музыку из программ?

Что будет в версии 1.5?

Благодарности

Архивы музыки и страница в Internet

О создателях этой программы


Программа “Эмулятор AY-3-8910 или AY-3-8912” предназначена для преобразования потока вывода на музыкальный сопроцессор в звуковой поток. Поток вывода может быть взят из следующих файлов: OUT, ZXAY, ZX50, STC,  ZXS, ASC, YM, VTX, PSG, STP, FTC, FLS, PSC, PT1, PT2 и PT3.

Требования программы: операционная система Windows 95 или выше, процессор 386 или старше. Для проигрывания непосредственно из программы необходимы звуковая карта, поддерживающая 8-битный звук на 44100, 22050 или 11025 Гц и высокопроизводительный процессор (опробован Pentium 133 MHz).


В версии 1.4 Эмулятора реализована поддержка ещё трёх типов файлов:

1) YM – файлы Multi-Computer Sound Emulator (ST-Sound) by Arnaud Carre (Leonard/OXYGENE), поддерживаются YM3, YM3b и YM5 версии. Этот эмулятор и музыку к нему с ATARI, AMSTRAD и Speccy можно найти в Интернете по адресу: http://www.mygale.org/09/leonard/. Также, огромный архив YM музыки можно найти на http://www.brainbug.ch/stsound/ странице (около 5,5 мегабайтный архив), на http://www.cybergoth.force9.co.uk/music.htm странице (около 200 КБ) и на http://www.islandia.is/~oedipus/ym2149.html странице (около 3 МБ).

2) VTX – файлы V_Soft Vortex AY/YM Chip Emulator (Романа Щербакова). Этот эмулятор в виде plug-in к Winamp и музыку к нему можно найти в Интернете по адресу: http://vortex.da.ru

3) PSG – файлы x128 (эмулятор Speccy by James McKey) и fMSX (эмулятор MSX by Marat Fayzullin или Marcel de Kogel). Первый можно найти на "World Of Spectrum" http://www.void.demon.nl/spectrum.html. Возможность получения PSG файлов также встроена в эмуляторы ZX Spectrum Z80Stealth by Mr.Kirill (http://z80.da.ru) и R80 by Raul Gomez Sanchez (http://www.chaosite.com/r80).

Также, в Эмулятор встроен мультиконвертер из всех поддерживаемых форматов в PSG, YM5, VTX.

В версии 1.4 выпуск 2 произошли следующие изменения.

1) Добавлена поддержка модулей редакторов Sound Tracker Pro by KSA (STP), Pro Tracker v2.xx (PT2) и Pro Tracker v3.xx (PT3).

2) Исправлена ошибка в декодере PSG-файлов.

3) При запуске второго экземпляра Эмулятора все параметры командной строки передаются первому экземпляру.

4) Размер программы уменьшен на 100 кБ.

В версии 1.4 выпуск 3 произошли следующие изменения.

1) Добавлена поддержка модулей редакторов Pro Tracker v1.xx (PT1), Pro Sound Creator (PSC), Fast Tracker (FTC) и Flash Tracker (FLS).

2) Новый декодер PSG-файлов.

3) Добавлена возможность зацикливания мелодий.

4) Добавлена возможность смены приоритета Эмулятора.

5) Новый алгоритм распознавания типа файла при открытии.

6) Проигрывание файлов VTX версий ниже 2.00 без предварительного преобразования их в версию 2.00.

7) Добавлена возможность поиска модулей различных музыкальных редакторов в файле.


Файл

Команда Открыть… предназначена для открытия файла. Если открываемый файл имеет расширение OUT, ZXAY, ZX50, STC, ASC, YM, VTX, PSG, STP, PSC, FTC, FLS, PT1, PT2 или PT3, то независимого от реального содержимого этих файлов Эмулятор считает, что это OUT, ZXAY, ZX50, STC, ASC, YM, VTX, PSG, STP, PSC, FTC, FLS, PT1, PT2 или PT3 файл соответственно. При любом другом расширении проверяется наличие в начале файлов строк “ZXAY”, “ZX50” или “PSG”+#1A и, если они там есть, считается, что это ZXAY, ZX50 или PSG файл соответственно. Иначе ищутся строки ‘AY’, ’YM’, ‘ay’ или 'ym’, если они есть, считается что это VTX файл. Если этих строк нет, то по смещению +2 ищется строка ‘-lh5-‘, при её наличии считается, что это YM файл. Если предыдущие проверки не дали результат, то открываемый файл исследуется на наличие в нём модулей Sound Tracker, Sound Tracker Pro, ASC Sound Master v0.xx, ASC Sound Master v1.xx, Pro Sound Creator, Pro Tracker v1.xx, Pro Tracker v2.xx, Pro Tracker v3.xx и Fast Tracker. Поиск заканчивается при обнаружении первого же модуля или по желанию пользователя (клавиша ‘ESC’ или левая кнопка мыши). Если поиск не дал положительного результата, выдаётся сообщение о том, что тип файла распознать не удалось.

Если открывается YM файл, дополнительно анализируется первые четыре байта после его распаковки. Если это строки ‘YM3!’, ‘YM3b’ или ‘YM5!’, то считается, что это YM3, YM3b или YM5 файлы соответственно, иначе выдаётся сообщение о том, что архив не содержит известных форматов.

К сожалению, Эмулятор пока не ищет автоматически FLS модули, поскольку существующий алгоритм очень медленный, поэтому файлы FLS обязательно должны иметь соответствующее расширение.

Команда Конвертировать в WAV… конвертирует открытый файл в WAV-файл, используя значения, которые можно изменить в меню Настройки. Всегда создаётся PCM, 44100 Гц, 8 бит, Стерео файл. Данная команда - единственный способ услышать эмулируемый сопроцессор на “медленных” машинах.

Команда Конвертировать в ZXAY… преобразует OUT-файл в ZXAY-файл.

Команда Конвертировать в VTX… преобразует открытый файл в VTX-файл.

Команда Конвертировать в YM5… преобразует открытый файл в YM5-файл.

Команда Конвертировать в PSG… преобразует открытый файл в PSG-файл.

Команда Переработать… предназначена для удаления из OUT-файлов обращений к портам ZX Spectrum, отличных от портов для доступа к микросхеме AY-3-8910/12. Если Вы планируете использовать этот OUT-файл только для прослушивания в данном Эмуляторе, лучше конвертировать его в ZXAY (при этом не происходит никаких потерь, т.е. не теряется связь между выводом в регистр сопроцессора и моментом времени, когда осуществился этот вывод).

Команда Поиск модулей в файле… предназначена для поиска модулей различных редакторов в файле. В этой версии можно искать модули Sound Tracker, Sound Tracker Pro, ASC Sound Master v0.xx, ASC Sound Master v1.xx, Pro Sound Creator, Pro Tracker v1.xx, Pro Tracker v2.xx, Pro Tracker v3.xx, Fast Tracker и Flash Tracker. Поиск модулей Flash Tracker по умолчанию выключен, поскольку сильно замедляет весь процесс анализа. Включайте эту опцию только если уверены, что модули Flash Tracker есть в исходном файле, иначе зря потратите уйму времени. В появляющемся диалоге необходимо ввести имя исходного файла и имя рабочей папки. Если данная папка не существует, она будет создана. В рабочей папке создаётся файл Finder.log с полным протоколом работы. Также в этой папке сохраняются найденные модули с именами ModuleName.Ext, где ModuleName – число, означающее смещение от начала исходного файла до найденного модуля, Ext – одно из принятых в Эмуляторе расширений. Существующие в рабочей папке файлы с аналогичными именами будут перезаписаны.

Команда Выход предназначена для завершения работы программы.

Замечание. Все поддерживаемые файлы можно разбить на две группы: «непрерывные» (OUT и ZXAY) и синхронизированные (все остальные). Непрерывные файлы хранят информацию о выводе на сопроцессор с точностью до такта Z80, а синхронизированные – с точностью до величины периода прерываний Спектрума (по умолчанию 1/50 секунды). Файлы одной группы без проблем и без потерь конвертируются друг в друга. Успешное конвертирование из первой во вторую группу возможно при выполнении двух условий: 1) вывод на настоящем Спектруме осуществлялся синхронно с прерываниями; 2) правильно настроены параметры конвертирования в меню Настройки.

При конвертировании в VTX и YM5 файлы вызывается редактор заголовка файла, в котором можно задать частоту сопроцессора, частоту прерываний, квант для зацикливания мелодии, тип микросхемы, распределение каналов и прочее.

Проигрывание

Команда Начать начинает проигрывание открытого файла.

Команда Пауза временно приостанавливает проигрывание.

Команда Продолжить возобновляет проигрывание.

Команда Остановить останавливает проигрывание.

Настройки

Частота сэмплирования (дискретизации) может быть 44100, 22050 или 11025 Гц. Рекомендуется значение по умолчанию – 44100 Гц. Данный параметр не влияет на генерацию WAV-файла.

Маска портов используется для дешифрации OUT-файлов. При проигрывании других типов файлов значение этого параметра может быть любым. О том, как правильно настроить этот параметр, можно почитать здесь.

Значение параметра Частота процессора Z80… по умолчанию равно 3494400 Гц для совместимости с основным “поставщиком” OUT-файлов – эмулятором ZX Spectrum ‘Z80’ v.3.02 и 3.03 Г.А. Лунтера. В отечественных аналогах Speccy частота главного процессора равна 3500000 Гц. Данный параметр влияет на проигрывание только OUT и ZXAY файлов.

Частота музыкального сопроцессора… по умолчанию равна 1773400 Гц. Такое значение частоты используется в оригинальных ZX Spectrum, в отечественных разработках чаще встречается 1750000 Гц. Если в диалоге установить флажок возле надписи «Если возможно, взять из открываемого файла», то при открытии YM5 или VTX файла частота сопроцессора будет взята из заголовка этого файла (если она в диапазоне 1-3 МГц).

Опция Время первого прерывания… совместно с опцией Число тактов между прерываниями… используется для настройки конвертирования из непрерывных файлов в синхронизированные файлы (см. описание меню Файл). Первый параметр определяет координату по оси времени (в тактах Z80) первого прерывания в конвертируемом OUT- или ZXAY-файле. Второй параметр задаёт количество тактов процессора Z80 между двумя соседними прерывания, по умолчанию равное 69888 тактов для совместимости с вышеупомянутым эмулятором ‘Z80’. О правильной настройке этих параметров можно почитать здесь.

Команда Частота прерываний… используется при проигрывании синхронизированных файлов и устанавливает частоту обновления регистров сопроцессора (это понятие эквивалентно частоте прерываний Спектрума). Если в диалоге установить флажок возле надписи «Если возможно, взять из открываемого файла», то при открытии YM5, VTX или PSG (версии 10+) файла частота прерываний будет взята из заголовка этого файла (если она в диапазоне 1-255).

Команда По умолчанию устанавливает значения всех вышеперечисленных параметров меню Настройки в значения по умолчанию. Используйте эту команду, когда в результате установки этих параметров вручную проигрываемая песня вдруг начинает “резать” слух.

Установив «галочку» возле опций Амплитудный индикатор, Частотный индикатор и Начинать проигрывание после открытия, Вы разрешаете соответственно следующие действия: вывод в главном окне Эмулятора индикатора амплитуды по трём каналам, вывод анализатора спектра проигрываемой песни, немедленное проигрывание файла сразу же после открытия.

Если помечена опция Зацикливать мелодии, проигрываемая мелодия по окончании будет воспроизведена сначала или с точки зацикливания (для файлов, имеющих понятие «точка цикла»).

Опция Оптимизация позволяет установить тип оптимизации. Оптимизация по качеству (рекомендуется) указывает Эмулятору производить вычисления на частоте часов звука сопроцессора (частота чипа, делённая на восемь), в то время как при оптимизации по скорости расчёт производится на текущей частоте сэмплирования с упрощённой выборкой сэмплов.

Опция Приоритет Эмулятора позволяет настроить приоритет Эмулятора перед другими программами Windows. Имеется низкий, обычный и высокий уровни приоритета. Чем выше приоритет, тем больше процессорного времени отпускается Эмулятору для воспроизведения мелодии.

Lang

Команды этого меню устанавливают язык интерфейса Эмулятора. Возможны русский (Russian) и английский (English) интерфейсы.

?

Содержание вызывает данный файл справки.

Команда О программе… вызывает окно с информацией об авторах и авторских правах.


Эмулятор может воспринимать параметры, передаваемые в командной строке. Параметры должны быть разделены пробелами. Если параметр начинается со знака “/” (наклонная черта), то он воспринимается как ключ, иначе – как имя файла. Если имя файла-параметра содержит пробелы, то оно должно передаваться в кавычках. Если в командной строке имеется ряд одинаковых параметров, то запоминается значение последнего в строке.

Ниже приведён список ключей.

Частота сэмплирования:	sXXXXX,

где XXXXX – требуемая частота.

Маска портов: 	mBBBBB,

где BBBBB – двоичное число, образующее 16-битную маску портов.

Частота процессора Z80	zXXXXX.

Частота coпроцессора 	yXXXXX,

yfile – брать из заголовка VTX или YM5 файлов при открытии,

ysetup – не брать из заголовка VTX или YM5.

Время первого прерывания	tXXXXX.

Число тактов между прерываниями	iXXXXX.

Амплитудный индикатор	aUUU.

Частотный индикатор	fUUU,

где UUU – off  или on.

Проигрывание после открытия	pUUU.

Оптимизация	по скорости	op,

по качеству	oq.

Частота прерываний	nXXXXX,

nfile – брать из заголовка VTX, PSG или YM5 файлов при открытии,

nsetup – не брать из заголовка VTX, PSG или YM5.

Язык интерфейса: русский	lr,

английский	le.

Зацикливание мелодий	cUUU.

Приоритет Эмулятора	ri – низкий,

rn – обычный,

rh – высокий.


Эмулятор музыкального сопроцессора компьютера

ZX SPECTRUM

Версия 1.4 Выпуск 3

Автор программы  С.В.Бульба, Хабаровск (E-mail: vorobey@eol.ru).

Красочное оформление главного окна программы сделал Иван Решетников (E-mail: van@fessl.ru), Хабаровск.

Особая благодарность Ли Цзянхуа за то, что он был посредником между автором программы  и настоящим сопроцессором.

Большое спасибо Роману Щербакову за информацию о ЦАП AY и YM чипов.

©1999 С.В. Бульба.

Дата написания – 19.12.99 г.


Описание форматов проигрываемых файлов.

Эмулятор музыкального сопроцессора проигрывает файлы OUT, ZXAY, ZX50, STC, ZXS, ASC, YM, VTX,  PSG, STP, PSC, FTC, FLS, PT1, PT2 и PT3.

OUT

Поддерживаются OUT файлы, созданные эмулятором Спектрума “Z80” (G.A.Lunter) версий 3.02 и 3.03. OUT файл имеет регулярную структуру из последовательности 5-ти-байтных блоков, первое слово блока - время в тактах процессора (в диапазоне 0-17471), второе слово - адрес порта, в который осуществлён вывод, третье значение размером в байт - записанное в порт значение. Каждый 17472-й такт процессора записывается один блок (если во время этого такта не было вывода, то первое слово блока равно 65535).Один такт процессора равен 1/3494400 секунды. В общем случае OUT файл может содержать вывод в любые порты Спектрума, в частном случае – только в те, которые указаны в соответствующих настройках эмулятора “Z80”. Для того, чтобы отследить весь вывод на музыкальный сопроцессор, следует указать “Z80” отслеживать порт #FD, а затем, при необходимости, в эмуляторе сопроцессора выбрать команду Переработать… для удаления обращений к другим портам Спектрума.

Об ошибке в “Z80” можно почитать здесь.

ZXAY

ZXAY файл может быть получен из любого OUT файла и представляет из себя более оптимальный способ хранения вывода на сопроцессор, чем OUT файл. ZXAY файл представляет собой последовательность четырёхбайтных блоков, причём самый первый блок является ASCII строкой, содержащей аббревиатуру “ZXAY”. Любой следующий блок является структурой вида

№№ битов	Название

0 – 19	Time

20 – 23	Register

24 – 31	Data.

Time – время в тактах процессора в диапазоне 0 – 0FFFFFh, во время которого осуществлен вывод в регистр сопроцессора, номер которого от 0 до 13 хранится в поле Register. Поле Data содержит данные, записанные в этот регистр. Если при Time=0 не было вывода на сопроцессор, блок всё равно записывается, при этом поле Register=15. Если поле Register=1, 3, 5 или 13, то старшие четыре бита поля Data должны быть равны нулю. Если поле Register=6, 8, 9 или 10, то старшие три бита поля Data должны быть равны нулю. Если поле Register=7, то старшие два бита поля Data должны быть равны нулю. При создании ZXAY файла вывод в регистр 0 – 12 того же числа, что он и содержал до этого вывода, игнорируется. Вывод в регистр 13 записывается всегда.

ZX50

ZX50 файл может быть получен из OUT или ZXAY файла, при условии что вывод на Спектруме осуществлялся синхронно с прерываниями. При этом можно считать, что вывод во все регистры сопроцессора осуществляется почти одновременно один раз за прерывание. Для корректного конвертирования из OUT или ZXAY в ZX50 файл необходимо правильно настроить два параметра эмулятора сопроцессора: Количество тактов Z80 между прерываниями  и Время первого прерывания. Первый параметр по умолчанию (69888) подходит для OUT файлов, созданных в “Z80” Г.А.Лунтера v.3.02 и v3.03, он должен быть настроен точно. Если значение второго параметра отрицательно сказывается на генерации ZX50 файла, его необходимо увеличить или уменьшить примерно на половину первого параметра (+35000 или –35000).

Первые четыре байта ZX50 файла равны ASCII строке “ZX50”. Далее следуют порции переменной длины. Порция состоит из 16-битного слова, называемого Mask, и одного или нескольких байт данных. Если бит с номером от 0 до 13 этой маски равен 1, то данные длиной в байт, записываемые в регистр с тем же номером хранятся в данной порции.  Например, если Mask=0000000000000101b, то следующие за ней два байта являются данными для записи в регистр номер 0 и 2 соответственно. Аналогично ZXAY файлам, запись одного и того же числа в один и тот же регистр в текущую порцию не записывается (за исключение регистра 13), а также должны быть обнулены неиспользуемые биты конкретных регистров (по принципу, изложенному при описании ZXAY файлов).

Замечание. Всё сказанное выше о конвертировании OUT и ZXAY файлов в ZX50 в полной мере относится и к конвертированию OUT и ZXAY файлов в YM, VTX и PSG файлы.

STC

Данные файлы создаются спектрумовской программой ST Song Compiler 1.2 и используются Эмулятором без изменений. Упрощенная структура STC файла следующая.

Смещение относительно начала файла	Число байт	Наименование	Описание
+0	1	Delay	Минимальное число прерываний между соседними нотами
+1	2	Positions Pointer	Указатель на таблицу Positions
+3	2	Ornaments Pointer	Указатель на таблицу Ornaments
+5	2	Patterns Pointer	Указатель на таблицу Patterns
+7	18	Identifier	Строка ‘SONG BY ST COMPILE’
+25	2	Size	Длина всего блока в байтах
+27	Size-27	Data	Прочие данные
Встречаются файлы, содержащие в поле Identifier строку “SOUND TRACKER v1.3”. Их можно «подсунуть» Эмулятору, поскольку они полностью совместимы с вышеописанным форматом (если открываемый файл имеет расширение STC, поле Identifier Эмулятором игнорируется).

ZXS

Файлы с расширением ZXS являются 100%-ми аналогами STC файлов. Автор Эмулятора обнаружил архив с этими файлами на FTP “World of Spectrum”: ftp://ftp.void.jump.org/pub/sinclair/music/aysongs.zxs.zip. Этот архивчик – приложение к ZXMUS.EXE Vesrion 1.02 Beta by Super Dima из Калуги. Этот эмулятор AY можно найти на том же FTP.

ASC

Данные файлы производятся музыкальным редактором ASM для Speccy. Насколько известно автору Эмулятора, при компиляции, в отличие от Sound Tracker, к блоку данных всегда приписываются коды проигрывателя, которые для проигрывания в Эмуляторе не нужны. Кроме того, есть ещё один неприятный момент – информация о названии и авторе песни в блоке ASM располагается как раз в кодах проигрывателя, поэтому при отрезании проигрывателя от данных данная информация теряется. Автор Эмулятора приносит свои извинения musicmaker’ам на ASM. В качестве альтернативы предлагается вручную заносить информации об авторе ASC-файла в отдельный файл описания или в конец ASC-файла. Последний вариант возможно будет “узаконен” в следующих версиях Эмулятора.

Упрощённая структура ASC-файла следующая.

Смещение относительно начала файла	Число байт	Наименование	Описание
+0	1	Delay	Начальное минимальное число прерываний между соседними нотами
+1	1	Loop Position	Позиция, с которой зацикливается проигрывание
+2	2	PatternPointers Pointer	Указатель на таблицу PatternPointers
+4	2	SamplePointers Pointer	Указатель на таблицу SamplePointers
+6	2	OrnamentPointers Pointer	Указатель на таблицу OrnamentPointers
+8	1	Position’s Number	Количество позиций
+9	???	Data	Прочие данные
Встречаются файлы, в которых отсутствует поле Loop Position (подразумевается равенство нулю). Эти файлы производятся редакторами ASM версий младше 1.00. Что бы проиграть их в Эмуляторе, достаточно добавить это поле, записав туда ноль, и увеличить на единицу значения следующих трёх указателей, либо присвоить файлу любое из неиспользуемых расширений, тогда он будет автоматически распознан и проигран.

YM

Данный формат файлов разработал Arnaud Carre (Leonard/OXYGENE) для своего эмулятора ST-Sound. Первоначально он задумывал его как эмулятор ATARI ST (YM2149 чип), но впоследствии (видимо, благодаря вниманию людей в к его продукту), он модернизировал свой формат, благодаря чему он стал Multi-Computer Sound Emulator.

В данный момент этот проект состоит из большого числа программ, начиная от plug-in к WinАmp, отдельной программы с неплохим интерфейсом, множества конвертеров и заканчивая собственно огромным архивом музыки с Atari и Amstrad. Архивы музыки со Speccy находятся в плачевном состоянии, видимо благодаря ужасным конвертерам со Speccy в YM.

Прослушивая музыку с Atari и Amstrad, не забывайте установить частоту сопроцессора в 2 000 000 и 1 000 000 Гц соответственно, т.к. в YM3 и YM3b файлах нет информации об этом параметре.

Итак, любой YM файл представляет собой архив LHA типа 5, созданный программой LHA.EXE v2.00 и выше с ключом –h0 (заголовок типа “ноль”) by Haruyasu Yoshizaki.

Внутри этого архива находится один файл с любым именем, поддерживаемые форматы которого описаны ниже.

YM3

Первые четыре байта являются ASCII строкой “YM3!”. Далее следует блок данных, который состоит из значений, отправляемых в YM-регистры. Регистры обновляются один раз за прерывание компьютера. Предположим, песня состоит из N квантов (прерываний). Тогда блок будет содержать N байтов – значений, отправляемых в регистр 0, за которыми следуют ещё N байтов – значений, отправляемых в регистр 1 и т.д., всего N*14 байтов. Если в текущем кванте не было записи в регистр 13, то байт в блоке данных, относящийся к этому кванту и к этому регистру равен 255.

YM3b

Первые четыре байта являются ASCII строкой “YM3b”. Затем идёт такой же блок, как и в YM3. После блока находится значение DWORD, указывающее номер кванта для зацикливания мелодии.

YM5

Данный формат содержит расширенную информацию о музыке, как то: частота прерываний, частота чипа, название, автор, комментарий, а также специфическую информацию, позволяющую воспроизводить эффекты, названные автором ST-Sound Digi-Drum (некоторые программы на Atari используют эти эффекты). В данном же Эмуляторе эти специфические возможности, естественно, не поддержаны.

Выдержка из YMFORMAT.TXT

---------------------------cut here-------------------

Offset  Size    Type            Comment

0       4       DWORD           ID of YM5 format. ('YM5!')

4       8       string[8]       Check String ('LeOnArD!')

12      4       DWORD           Nb of valid VBL of the file.

16      4       DWORD           Song attributes (see bellow)

20      2       WORD            Nb of digi-drum sample (can be 0)

22      4       DWORD           YM2149 External frequency in Hz

                                (ex:2000000 for ATARI-ST version,

                                    1000000 for AMSTRAD CPC)

26      2       WORD            Player frequency in Hz

                                (Ex: 50Hz for almost player)

28      4       DWORD           Vbl number to loop the song.

                                (0 is default)

32      2       WORD            Size (in bytes) of futur

                                additinal data.

                                (must be 0 for the moment)

For each digidrum sample:

{

..      4       DWORD           sample size

..      ?       BYTES           sample data (8bits per sample)

}

..      ?       NT-String       Name of the song.

..      ?       NT-String       Name of the author.

..      ?       NT-String       Comments (YM file converter ?!)

..      ?                       All YM2149 registers.

..      4       DWORD           End-File check. ('End!')

---------------------------cut here-------------------

Замечания.

1) VBL - Vertical Blank time (квант).

2) Все числовые данные (WORD и DWORD) представлены в порядке, принятом на процессорах MOTOROLA (от старшего байта к младшему).

3) Введены так называемые виртуальные регистры – 14-й и 15-й.

4) All YM2149 registers – такой же блок данных, как и в YM3 (но 16 регистров!), если установлен бит 0 в поле Song Attributes, если он сброшен, то блок данных представляет собой последовательность N блоков по 16 байт (для каждого из регистров YM, включая виртуальные).

Более подробную информацию можно получить из официального архива ST-Sound.

VTX

Данный формат был разработан Романом Щербаковым (V_Soft). На сегодняшний день это наиболее гибкий формат для хранения квантованной музыки и для AY, и для YM.

Выдержка из README.RU.

---------------------------cut here-------------------

Смещение	Размер	Тип	Описание

 00 deс	2 байта	Word	Идентификатор VTX файла   (ay or ym)

является типом чипа по умолчанию:

что есть 7961h или 31073 dec    (ay)

что есть 6D79h или 28025 dec    (ym)

02	1	Byte bit	Режимы проигрывания по умолчанию :

Биты 0-2 отвечают за стерео режим:

0 - MONO, 1 - ABC, 2 - ACB, 3 - BAC,

4 - BCA,  5 - CAB, 6 - CBA     (dec)

03	2	Word	Номер кванта цикла (начиная с нуля =

начала мелодии). Отключаемо в плеере

05	4	Dword	Частота чипа  AY  для данной мелодии

( введена для совместимости мелодий,

перенесенных, например с Atari     )

Стандартные значения:

ZX_Spectrum: 1773400 (или 001B0F58h)

Atari      : 2000000 (или 001E8480h)

Amstrad CPC: 1000000 (или 000F4240h)

09	1	Byte	Частота плеера. Т.е. число квантов в

секунду.  Стандартное значение, 50 =

1/50 секунды (20ms).

10	2 байта	Word	Год написания композиции

12	4	Dword	Размер  неупакованных данных.  Нужен

для разархивации.

14	1-255	NTString	Строка,  содержащая название мелодии

(1-254 символов), должна обязательно

заканчиваться нулем даже если запись

отсутствует !

??	1-255	NTString	Cтрока, содержащая имя автора (cм.^)

??	1-255	NTString	Программа, откуда мелодия     (cм.^)

??	1-255	NTString	Название муз. редактора       (cм.^)

??	1-255	NTString	Cтрока комментария            (cм.^)

??	??	Array	Сжатый пакет данных...

---------------------------cut here-------------------

Замечания.

1) Данные упакованы методом LHA типа 5. Можно паковать тем же LHA.EXE, что и YM файлы, только необходимо отрезать заголовок и последний нулевой байт полученного архива. Заголовок LHA-архива находится в самом начале, его длина равна значению первого байта заголовка плюс 2.

2) В распакованном виде пакет данных аналогичен блоку данных YM3 файла.

Встречаются старые версии VTX файлов (поддерживаемые Vortex плаг-ином версий младше 2.00). Если в данном Эмуляторе попытаться открыть старый VTX файл, то будет предложено конвертировать его в новый формат. Автор не видит смысла отказываться от данного предложения. После конвертирования новый VTX файл откроется как обычно.

PSG

Данные файлы создаются эмулятором Speccy ‘x128’ by James McKey, а также эмулятором fMSX, которым пользоваться не приходилось.

Ниже предложено всё, что удалось найти за пару бессонных ночей в Интернете.

Смещение относительно начала файла	Число байт	Описание
+0	3	Идентификатор ‘PSG’
+3	1	Маркер, равный “1Ah”
+4	1	Номер версии
+5	1	Частота прерываний (для версий 10+).
+6	10	Неизвестно
Далее следуют строки байтов, начинающиеся с 0FFh или 0FEh. Байт 0FFh – маркёр начала прерывания. Если вслед за ним идёт байт от 0 до 15, то это номер регистра АY, в который произошёл вывод значения, следующего за этим байтом. Далее идёт следующая двойка байт, первый байт которой – номер регистра, а второй – значение. И так пока не встретится маркер следующего прерывания, конец файла или байт 0FEh. Байт, следующий за 0FEh, помноженный на 4 даст количество прерываний, в течении которых не было вывода на сопроцессор. Если в PSG-файле встретится номер регистра от 16 до 253 – не расстраивайтесь. Этот и следующий за ним байт можно просто проигнорировать (это вывод на другие устройства MSX).

STP, FTC, FLS, PSC, PT1, PT2, PT3

Форматы этих модулей никогда не будут описаны ввиду малого интереса людей к данному Эмулятору, в связи с чем автор не видит особого смысла в написании подробных файлов помощи.


Руководство для вытаскивающих музыку

из программ для Speccy.

1 Создающим OUT-файлы

Необходимый SOFT

-	Эмулятор ZX Spectrum ‘Z80’ v3.02 или v.3.03 Г.А.Лунтера (G.A.Lunter)

-	Собственно программа со Speccy

Дополнительно рекомендуемый SOFT

-	Эмулятор ZX Spectrum ‘Z80TRDOS’ v2.01 В.А. Мочалина

-	Эмулятор ZX Spectrum ‘UKV Spectrum Debugger’ v1.0 или v1.2 К. Углекова

a) Непрофессиональный подход

Запустите программу со Speccy под эмулятором ‘Z80’ или ‘Z80TRDOS’ и на слух отследите тот момент, с которого необходимо начать запись музыки. Нажмите в этот момент клавишу F10 выберите Extra functions->Log OUTs->Name OUT log file и введите имя OUT-файла. Затем Delete OUT port и ‘1’ чтоб отключить отслеживание порта #FE. Затем Add OUT port и введите: #FD. После этого несколько раз нажмите ESC, чтоб вернуться в режим эмуляции. На слух определите конец мелодии и нажмите F10. Выберите Quit, вы окажитесь в DOS. Где-то там сохранён ваш OUT-file (расширение OUT).

b) «Профессиональный» подход

Запустите ‘UKV Spectrum Debugger’, загрузите спектрумовскую программу. Когда услышите нужную мелодию, нажмите ESC. Найдите с помощью дебаггера проигрыватель данной мелодии. Напишите небольшую программку в свободном месте памяти, которая вызывает подпрограмму инициализации песни, а затем – собственно проигрыватель. Настройте регистр PC на начало Вашей программки. Сохраните SnapShot файл (в формате Z80). Убедитесь, что Ваша программка работает (нажмите F9). Выйдите из этого эмулятора и запустите ‘Z80’. Настройте эмулятор на отслеживание порта #FD. Загрузите и запустите ранее сделанный SnapShot. Дождавшись конца мелодии, нажмите F10 и выйдите в DOS.

После операций a) или b) Вы имеете OUT-файл, который можно непосредственно прослушать, переработать или конвертировать  в Эмуляторе сопроцессора.

Внимание! Эмуляторы ‘Z80xxxxx’, перечисленные выше, имеют досадную ошибку. При выводе в порт командой OUTD или OUTI данные, как известно, выводятся в порт BC, после чего регистр B уменьшается на единицу (а значит ВС – на 256). В этих случаях при создании OUT-файла ‘Z80’ фиксирует вывод в порт, адрес которого на 256 меньше требуемого. Если проигрыватель использует стандартные значения адресов сопроцессора (#BFFD и #FFFD), то эта ошибка не так и страшна, поскольку новые значения схемотехнически эквивалентны стандартным. В Эмуляторе сопроцессора параметр Маска портов по умолчанию учитывает схемотехнические особенности адресообразования в Speccy.

2 Создающим STC-файлы

Необходимый SOFT

-	SnapShot или файлы программы со Спектрума

-	Редактор, имеющий функцию поиска и умеющий редактировать бинарные файлы (Volkov Commander)

Дополнительно рекомендуемый SOFT

-	Эмулятор ZX Spectrum ‘UKV Spectrum Debugger’ v1.0 или v1.2 К. Углекова

-	Музыкальный редактор Sound Tracker v1.2 для ZX Spectrum

a) Непрофессиональный подход

Создайте копию SnapShot (SNA или другой неупакованный формат) файла или файла исследуемой программы, дав ей расширение STC, и откройте её в редакторе VC клавишей F4 (этот редактор не портит данные при редактировании двоичных файлов). Нажмите F7 (поиск) и введите строку для поиска: SONG BY ST COMPILE. Если редактор найдёт эту строку, то это скорей всего модуль ST. Нажмите 25 раз клавишу ‘Курсор влево’, после чего курсор окажется на первом байте модуля. После этого, нажимая клавишу ‘Back Space’ (‘Забой’), удалите все символы до начала файла. Нажмите F2 и ESC.

b) «Профессиональный» подход

Запустите программу в ‘UKV Spectrum Debugger’ и дождитесь нужной песни. Нажмите ESC. Найдите проигрываемый модуль и убедитесь, что это модуль Sound Tracker. Это можно сделать: 1) по наличию строки ‘SONG BY ST COMPILE’ или ‘SOUND TRACKER v1.3’; 2) исследуя проигрыватель – структура большинства проигрывателей ST одинакова, причём на входе в подпрограмму Init в регистр HL загружается адрес первого байта искомого модуля (ADDR).  ADDR также равен адресу первого байта указанной выше строки минус семь. Длина модуля (LNG) равна значению следующих за этой строкой двух байт (их адрес ADDR+25), т.е. LNG = word[ADDR+25]. Теперь, когда известны адрес и длина модуля, можно сохранить его на диске. Нажмите ALT+D и в появившемся диалоге наберите: FileName.STC,ADDR,LNG. Где ADDR и LNG – известные уже значения в шестнадцатеричном счислении.

с) Профессиональный подход

Запустите редактор Sound Tracker v1.2. Напишите свою мелодию и сохраните её на диске. Нажмите RESET и запустите Sound Tracker Song Compiler v1.2. Загрузите свою мелодию, откомпилируйте её и сохраните полученный модуль на диске. Скопируйте этот модуль на IBM и дайте ему расширение STC.

Полученный в результате этих действий модуль без изменений можно прослушивать в Эмуляторе сопроцессора.

Замечание. Если STC-файл удалось получить способом a), то его можно было прослушать и не вытаскивая из SnapShot’a. Для этого убедитесь, что SnapShot имеет расширение, отличное от тех, которые поддерживает данный Эмулятор сопроцессора (не OUT, не ASC и т.д.) и откройте его в Эмуляторе сопроцессора, используя маску ‘Все файлы’ диалога ‘Открытие файла’. Эмулятор отыщет в файле строку SONG BY ST COMPILE и начнёт проигрывание.

3 Создающим ASC-файлы

Вытащить ASC-файл несколько сложнее, чем STC. Во первых, как видно из описания формата ASC, существует по крайней мере два вида формата данных этого модуля. Во вторых – бесчисленное множество проигрывателей. Общее для всех проигрывателей, которые встречал автор Эмулятора сопроцессора: 1) по смещению +11 от начала проигрывателя находится инструкция перехода (JP или JR) на подпрограмму инициализации песни; 2) по смещению +14 - инструкция JP на подпрограмму проигрывания песни; 3) по смещению +17 – ещё один JP; 4) по смещению +20 находится строка ‘ASM COMPILATION OF’, далее следует название песни и информация об авторе. В подпрограмме инициализации можно увидеть что-то в этом духе:

…

LD	DE,ADDR

LD	B,D

LD	C,E

LD	A,(DE)

INC	DE

LD	(LABEL1),A

*	LD	A,(DE)

*	INC	DE

*	LD	(LABEL2),A

CALL	LABEL3

…

То есть, по некоторому адресу ADDR считывается один байт и помещается в локальную переменную LABEL1, затем по адресу ADDR+1 считывается ещё один байт и помещается в локальную переменную LABEL2. Зная структуру модуля ASC, можно предположить, что это считывались значения DELAY и LOOP POSITION, то есть это ASC-модуль типа 1. Если команды, отмеченные ‘*’ отсутствуют, то это ASC-модуль типа 2 (см. описание формата файла). Итак адрес ADDR модуля известен, осталось узнать его длину LNG.

Это делается так. Зная тип файла и ADDR находим значение OrnamentPointers Pointer (OPP). Вычисляем абсолютный адрес таблицы OrnamentPointers: AOPP=ADDR+OPP. Находим по полученному адресу слово, которое является смещением на первый орнамент: FSTORN=word[AOPP]. Обычно FSTORN=0040h. Находим абсолютный адрес первого орнамента: AFSTORN=AOPP+FSTORN. Предыдущие два байта являются смещением на последний орнамент: LSTORN=word[AFSTORN-2]. Находим абсолютный адрес последнего орнамента: ALSTORN=AOPP+LSTORN. Начиная с этого адреса (ALSTORN) идут последовательности двухбайтных слов. Слово, у которого Bit 6 установлен в 1 является последним словом ASC-модуля. Зная адрес этого слова (LASTWORD) получим искомую длину: LNG=(LASTWORD+2)-ADDR. После этого необходимо сохранить блок на диске. В ‘UKV Spectrum Debugger’ нажмите ALT+D (это команда Write block) и в диалоге введите:

FileName.ASC,ADDR,LNG.

К сожалению, пользователям музыкального редактора ASM автор Эмулятора сопроцессора дополнительно ничем помочь не может, так как сам этим редактором практически не пользовался.

4 Создающим PSG-файлы

Необходимый SOFT

-	Эмулятор Speccy “x128” v0.92 by James McKey

Дополнительно рекомендуемый SOFT

-	Эмулятор ZX Spectrum ‘UKV Spectrum Debugger’ v1.0 или v1.2 К. Углекова

a) Непрофессиональный подход

Запустите программу под эмулятором “x128” и в момент с которого необходимо записать песню нажмите F11, в появившемся меню выберите Create/Close PSG File.

b) «Профессиональный» подход

С помощью ‘UKV’ напишите свою программку, настраивающую на начало мелодии и вызывающую проигрыватель. Сохраните SnapShot и загрузите в ‘x128’.

Остальные форматы.

Данная тема закрыта из-за нулевого интереса людей, а также в связи с потрясающими возможностями встроенного поиска файлов, в связи с чем ручной поиск файлов больше не имеет смысла.


Маска портов

Как известно, для вывода данных на музыкальный сопроцессор документацией по ZX Spectrum определены два порта #FFFD и #BFFD. Однако, если взглянуть на принципиальную схему включения AY-3-8910/12, можно увидеть, что применена упрощённая дешифрация этих адресов – проверяются лишь 15-й, 14-й и 1-й биты шестнадцатибитного адреса (автор встречал схему, в которой проверяется ещё и 13-й бит). Такая дешифрация порождает множество дополнительных портов, через которые можно общаться с сопроцессором. Некоторые программы используют эту особенность. Зачем они это делают? А вот зачем. Во-первых, одновременно можно вывести данные и на сопроцессор и ещё на какое-нибудь устройство. Во-вторых, можно сократить время загрузки адресов портов в регистры. В-третьих, можно писать элегантные проигрыватели цифровой музыки (как в Satisfaction Mega Demo). В-четвёртых, чтобы просто озадачить новичков и непосвящённых.

Теперь собственно о маске портов. Учитывая всё вышесказанное, можно видеть, что в OUT-файле нельзя просто выискивать обращения к стандартным портам, так как можно и потерять часть вывода. Нужно выискивать адреса, у которых определённым образом установлены лишь часть битов. Маска портов как раз и показывает, значения каких битов следует проверять, а каких нет. В Эмуляторе сопроцессора маской портов по умолчанию проверяются 15-й, 14-й и 1-й биты. Если переработать OUT-файл командой Переработать… меню Файл, то из него удалятся обращения ко всем портам, не удовлетворяющих маске портов.


В версии 1.5 планируются следующие вещи.

-	переключатель типа микросхемы (AY-3-8910/12 и YM2149)

-	выбор распределения каналов (все режимы СТЕРЕО, а также режим МОНО)

-	навороченный Play List

-	бегунок для позиционирования по проигрываемой песне

-	переход на кнопочный интерфейс (скорее всего полный отказ от меню)

В будущем планируются

-	проигрывание файлов различных музыкальных редакторов Speccy, с которыми автор пока лично не сталкивался

-	поддержка SQ-Tracker

-	проигрывание файлов упакованных ZIP, LHA, RAR

-	проигрывание YM6-файлов (убедительная просьба прислать автору Эмулятора описание этого формата, поскольку Arnaud Carre не хочет этого делать…)

Отдельные проекты, которые возможно будут осуществлены в будущем.

-	Vortex Tracker, с пожеланиями обращайтесь ко мне (vorobey@eol.ru)  или к Роману Щербакову (v_soft@chat.ru)


Автор благодарен Роману Щербакову – первому человеку, отреагировавшему на выход в свет Эмулятора сопроцессора.

Отдельное спасибо Ивану Решетникову, он поддерживает меня с первой версии. В следующей версии, благодаря ему, Вы увидите совершенно новый интерфейс. От него так же зависят сроки появления в свет интернет-страницы, посвящённой Эмулятору. Автор Эмулятора в состоянии сделать (и уже сделал) только текстовый вариант этой страницы.

Благодарю Ли Цзянхуа за неподдельный интерес к Эмулятору и за тестирование настоящего сопроцессора по моей просьбе.

Благодарю всех разместивших мой Эмулятор на своих страницах в Internet, а особенно Александра Шалина, который ещё и попытался популяризировать Эмулятор в ZX.SPECTRUM.

Меня вообще потрясает, как несколько человек пользующихся моим Эмулятором, пытаются меня убедить, что их на самом деле гораздо больше. По моим расчётом, к моему Эмулятору проявили интерес не больше 10 человек (из них 3 – из стран Европы).

Честно говоря, спектрумовская общественность начинает меня раздражать. Работать на благо Спектрума невыгодно не только материально, но и морально.

Ещё раз спасибо всем откликнувшимся по поводу Эмулятора. И до свидания…


Архивы музыки.

Автором Эмулятора подготовлен архив музыки в формате различных редакторов с ZX Spectrum. На сегодняшний день существует версия 1.1 данного архива. В архиве находится более 1020 музыкальных файлов в формате STC, ZXS, ASC, STP, FLS, FTC, PSC, PT1, PT2, PT3 и несколько файлов VTX. В разделе Songs – музыка, которую автор Эмулятора самостоятельно вытащил из различных программ Спектрума. В папке Hacker KAY – музыка, которую прислал Hacker KAY из Ижевска. Остальное было найдено автором с начала апреля по сегодняшний день в Internet. Название архива Tr_Songs.rar.

В 94-95 годах автор Эмулятора сам писал музыку, на основе результатов этого творчества подготовлен архив My_Songs.rar.

Оба архива могут быть найдены на официальной WWW-странице Эмулятора.

Также, автор располагает более 2000 различных мелодий в формате YM и VTX. Большинство из них доступны по адресам, указанных в разделе Что нового в этой версии?. Но автор не исключает создания своих архивов для размещения на официальной WWW-странице Эмулятора. Приветствуются Ваши пожелания.

Официальная страница в Internet.

Официальная страница Эмулятора расположена по адресу http://vorobey.jumptunes.com. На ней можно всегда найти свежие версии Эмулятора, архивов музыки, ссылок на AY/YM ориентированные серверы и страницы, а также там будет появляться техническая информация по микросхемам AY-3-8910/12 и YM2149 и по проблемам их эмуляции. Если указанный выше адрес станет недоступен, можно попытаться поискать информацию по адресу http://members.xoom.com/vorob.

Где ещё можно найти Эмулятор?

1) “Russian ZX Spectrum Page” (www.zx.ru/echo). Спасибо Александру Шалину за поддержку!

2) “World Of Spectrum” (www.void.demon.nl/utilities.html#ay). Спасибо to Evgeny Barsky.