AY-3-8910/12 ZX Spectrum Sound Chip Emulator

ASC

Данные файлы производятся музыкальным редактором ASM для Speccy. Насколько известно автору эмулятора, при компиляции, в отличие от Sound Tracker, к блоку данных всегда приписываются коды проигрывателя, которые для проигрывания в эмуляторе не нужны. Кроме того, есть ещё один неприятный момент – информация о названии и авторе песни в блоке ASM располагается как раз в кодах проигрывателя, поэтому при отрезании проигрывателя от данных данная информация теряется. Автор эмулятора рассматривал несколько вариантов сохранения названия ASM модуля. Но вариант, предложенный автором спектрумовского риппера и проигрывателя музыки Pusher Ильёй Кудрявцевым из Ижевска (Himik's ZXZ), оказался наиболее оптимальным.

Упрощённая структура 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. Чтобы проиграть их в Эмуляторе, достаточно добавить это поле, записав туда ноль, и увеличить на единицу значения следующих трёх указателей, либо присвоить файлу любое из неиспользуемых расширений, тогда он будет автоматически распознан и проигран.

Упрощённая структура 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                      Position's
                        Number          Positions List           Список позиций
+9+Position's Number    19              ID                       Строка ‘ASM COMPILATION OF ‘
+28+Position's Number   20              Title                    Название мелодии
+48+Position's Number   4               ID2                      Строка ‘ BY ‘
+52+Position's Number   20              Author                   Имя автора модуля
+72+Position's Number   ???             Data                     Прочие данные

Для того чтобы вставить авторскую строку из плеера в тело модуля, нужно вручную вытащить текст 'ASM COMPILATION OF <NAME> BY <AUTHOR>' и воспользоваться утилитой ASCCONV с официального сайта эмулятора.

Версия 2.8 Ay_Emul дает также возможность немного автоматизировать этот процесс: если ASM-файл в виде блока «плеер+модуль» хранится в TRD, SCL или Hobeta форматах, то достаточно загрузить его в Ay_Emul, а затем сохранить из плейлиста. При этом для ASC и STP модулей тело модуля автоматически будет модифицировано строкой из плеера и отделено от него.