PSG

Поддержаны как обычные PSG-файлы, так и расширенные EPSG-файлы.

Кроме того, существуют PSG2-файлы (их описание можно найти на сайте RDOSPLAY), аналогичные ZX50-файлам, но поддерживать их в Ay_Emul не планируется.

В интернете встречаются PSG-файлы эмулятора БК, но они не поддержаны в Ay_Emul.

PSG

Данные файлы создаются эмулятором Speccy 'x128' by James McKay, а также эмулятором fMSX. Что касается первого, то он при создании PSG-файлов допускает ошибки.

Поэтому лучше пользоваться хорошо зарекомендовавшим себя эмулятором ZX Spectrum "Z80 Stealth" Кирилла Колпакова (Mr.Kirill). Кирилл в своё время охотно внедрил в свой эмулятор некоторые предложенные мной функции, упрощающие процесс создания PSG-файлов. Кроме того, Z80 Stealth позволяет создавать PSG-файлы, используя возможности встроенного отладчика.

Структура заголовка

СмещениеЧисло байтОписание
+03Идентификатор 'PSG'.
+31Маркёр, равный "1Ah".
+41Номер версии.
+51Частота прерываний (для версий 10+).
+610Неизвестно.

Далее следуют либо пары байт, либо однобайтовые маркёры.

Байт 0FFh – маркёр начала прерывания.

Байт, следующий за 0FEh, помноженный на 4, даст количество прерываний, в течении которых не было вывода на музыкальный сопроцессор. Например, последовательность "FE 01 FF" эквивалентна "FF FF FF FF FF".

Если в паре первый байт от 0 до 15, то это номер регистра АY, а второй байт – выведенное в него значение.

Согласно документации RDOSPLAY, байт 253 является маркёром конца музыки (не поддержан в Ay_Emul).

Пары байт, начинающиеся с байта от 16 до 252 – вывод на другие устройства MSX (игнорируется в Ay_Emul).

Ещё о заголовке

Как удалось узнать, некоторые эмуляторы сохраняют более простой заголовок – только первые четыре байта, то есть вывод на AY начинает сохраняться уже со смещения +4.

Ay_Emul не приспособлен для загрузки PSG с таким заголовком, но в большинстве случаев такие PSG играются (конечно, теряются первые несколько выводов).

Но если вы занимаетесь конвертированием модулей PSG, созданных с таким заголовком, в другие форматы (VTX или YM6) с помощью Ay_Emul, вам нужно вручную подкорректировать заголовки этих PSG и привести их к описанному выше виду.

EPSG

Данные файлы создаются эмулятором Speccy "Z80 Stealth" Кирилла Колпакова (Mr.Kirill).

В отличие от обычных PSG, EPSG хранит информацию не только о выводе в конкретные регистры, но и о времени вывода, в связи с чем EPSG, также как OUT и ZXAY, может хранить вывод на AY с точностью до такта Z80.

Далее слегка отредактированный текст из z80s.faq.

-------Начало----------

Q: What is it – this EPSG format?
A: It's PSG format improved just a bit to handle output of digitized samples 

Here's the description:

Offset	Length	Value
============================
Header
============================
0	4	'EPSG'
4	1	0x1A marker
5	1	Machine type: 0x00 – ZX Spectrum 128 0x01 – Pentagon
		0xFF – Other machines
6	4	Zero for machine type 0x00 and 0x01 or
		Number of Z80 tacts between interrupt markers
		for other machines
10	6	zeroes
============================
AY(YM) log during 1 frame
============================
16	1	AY(YM) register number
17	1	value written to this register
18	3	T-state
.....
??	5	0xFFFFFFFFFF – interrupt marker

-------Конец----------