Это компилированные модули ASC Sound Master (Advanced Sound Master, ASM) версии 0.12, проект Андрея Сендетского (ASC). Несколько слов об этом проекте можно найти в описании формата ASC. Рекомендую предварительно с ним ознакомиться, так как формат AS0, как предшественник, имеет всего одно незначительное отличие, и следующее описание посвящено только ему.
Чтобы немного сгладить ваше разочарование, в конце приведено описание формата, сходного с AS0, три файла этого формата в виде плеер+модуль можно найти на дисках TR-DOS в сети (имена файлов AT, CHIP'DAL, TENNIS). Структура настолько близка, что приводит к ложному срабатыванию некоторых риперов музыки, которые принимают их за обычный AS0.
В версии 0.12 зацикливание всегда производится на начало, то есть отсутствует понятие "Позиция для зацикливания" в списке позиций. Модули AS0 как по общей структуре, так и по структуре паттернов, сэмплов и орнаментов, ничем не отличается от ASC, за исключением однобайтового поля LoopPos, которое было добавлено в ASC по смещению +2.
Из-за столь незначительной разницы в Ay_Emul не было назначено формату ASM 0.12 отдельного расширения для имени файла, вместо этого он конвертируется на лету в ASC (хотя и помечается в плейлисте как ASC0).
Однако, в последние годы в сети стали часто попадаться модули ASM 0.12 с расширением файла ".as0", в некоторые вставлена авторская строчка из плеера, и многие из них обрезаны с конца (на звук обычно не влияет, так как под обрезку попадают в основном неиспользуемые орнаменты). Чтобы Ay_Emul их "увидел" (явно повреждённые модули поиск в Ay_Emul игнорирует), решено было добавить расширение ".as0" в список поддерживаемых им типов файлов.
Для того, чтобы превратить модуль AS0 в ASC достаточно переместить данные, начиная со смещения +2, на 1 байт вперёд и в образовавший промежуток вставить байт 0 (зацикливание на позицию 0, т.е. на начало) и увеличить на 1 значение трёх указателей на паттерны, сэмплы и орнаменты.
В своё время мне попались странные модули ASM, по структуре напоминающие AS0, но они не проигрывались стандартным плеером ASM v0.12. Добавив их в Tr_Songs вместе с плеерами в формате AY (AT.ay, CHIP'DAL.ay, TENNIS.ay), я "временно" решил проблему и потому вплотную занялся ими только в 2022 году.
Как оказалось, это действительно модули той же структуры, что и AS0, совпали и сэмплы, и орнаменты, разница была лишь в описателях канала паттерна. Причём анализ показал, что в паттерне нет ничего такого, что не вписывается в формат AS0 и ASC.
В результате был написан конвертер "as02as0", и теперь все три модуля находятся в Tr_Songs в виде ASC. В виду малого количества имеющихся модулей, данный конвертер не стал встраиваться в поиск модулей Ay_Emul, т.к. сделать детект надёжным при такой незначительной для отладки выборке сложно.
Байты | Описание |
---|---|
0x00..0x55, [Env] | Нота. Env – младший байт периода огибающей (если включена). Выйти. |
0x56..0x7d | Выйти. |
0x7e | Прервать цикл сэмпла. Выйти. |
0x7f | Выключить звук. Выйти. |
0x80..0x9f | Сэмпл 0..31. |
0xa0..0xbf | Орнамент 0..31. |
0xc0 | Включить огибающую. Период Env сразу после ноты. |
0xc1..0xcf | Громкость канала 1..15. Выключить огибающую. |
0xd0..0xef | Шум 0..31. |
0xf0, Skip | Skip – пропуск строк 1..64. По умолчанию 1. |
0xf8 | Тип огибающей 8. |
0xfa | Тип огибающей 10. |
0xfс | Тип огибающей 12. |
0xfe | Тип огибающей 14. |
0xff | Конец паттерна. |