PSG
Существуют как обычные PSG, так и расширенные EPSG. Кроме того, существуют PSG2-файлы, аналогичные ZX50-файлам (их описание можно найти на сайте RDOSPLAY), но поддерживать их в данном Эмуляторе автор не видит смысла. В интернете немало PSG файлов эмулятора БК, но они пока не поддержаны в Ay_Emul.
PSG
Данные файлы создаются эмулятором Speccy 'x128' by James McKay, а также эмулятором fMSX, которым пользоваться не приходилось. Что касается первого, то он при создании PSG файлов допускает ошибки. Поэтому лучше всего пользоваться эмулятором Speccy “Z80 Stealth” Кирилла Колпакова (Mr.Kirill). Кирилл в своё время охотно внедрил в свой эмулятор некоторые предложенные мной функции, сильно упрощающие процесс создания PSG файлов. Кроме того, последние версии Z80 Stealth позволяют с легкостью создавать PSG-файлы, используя возможности встроенного отладчика. Скачать эмулятор можно с http://z80.da.ru/.
Ниже предложено всё, что удалось найти в Интернете.
Смещение Число байт Описание +0 3 Идентификатор 'PSG' +3 1 Маркер, равный "1Ah" +4 1 Номер версии +5 1 Частота прерываний (для версий 10+). +6 10 Неизвестно
Далее следуют строки байтов, начинающиеся с 0FFh или 0FEh. Байт 0FFh – маркёр начала прерывания. Если вслед за ним идёт байт от 0 до 15, то это номер регистра АY, в который произошёл вывод значения, следующего за этим байтом. Далее идёт следующая двойка байт, первый байт которой – номер регистра, а второй – значение. И так пока не встретится маркер следующего прерывания, конец файла или байт 0FEh. Байт, следующий за 0FEh, помноженный на 4 даст количество прерываний, в течении которых не было вывода на сопроцессор. Если в PSG-файле встретится номер регистра от 16 до 252 – не расстраивайтесь. Этот и следующий за ним байт можно просто проигнорировать (это вывод на другие устройства MSX).
Согласно документации RDOSPLAY, байт 253 является маркером конца музыки, но данный маркер не поддержан в данном Эмуляторе.
Немного дополнительной информации. Как удалось узнать, некоторые эмуляторы сохраняют более простой заголовок – только первые четыре байта, то есть вывод на AY начинает сохраняться уже со смещения +4. Данный же Эмулятор не приспособлен для загрузки PSG с таким заголовком, но в большинстве случаев такие PSG играются (конечно, теряются первые несколько выводов). Поэтому, если вы занимаетесь конвертированием модулей PSG, созданных с таким заголовком, в другие форматы (VTX или YM6) с помощью данного Эмулятора, вам нужно вручную подкорректировать заголовки этих 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