Информация о трекере поступила ко мне от Евгения Барского в виде архива мелодий и исходника плеера. Из-за наличия исходника формат немедленно был добавлен в Ay_Emul с расширением имени файла ".fls".
Главная особенность формата – привязка всех указателей к адресу компиляции. В этом же и его главная проблема: для того, чтобы проиграть FLS-модуль, нужно определить этот адрес компиляции. Внутри модуля он нигде не хранится, таких же простых методов, как с большинством других привязанных к адресу форматов, не применить. Ay_Emul применяет перебор вариантов в наиболее вероятном диапазоне с глубоким тестированием валидности каждого варианта. Громоздко, но работает достаточно быстро, так как неверные варианты отпадают почти сразу.
Второй момент, на котором бы хотелось заострить внимание: структура сэмплов, орнаментов и каналов паттерна полностью идентична STC. Единственная не совпадающая с STC структура – список позиций: в нём отсутствует информация о транспозиции.
Таким образом, любой FLS можно без потерь конвертировать в STC. Однако конвертировать в FLS можно только те STC, в которых не используется транспонирование паттернов.
Поскольку редактор для AY с названием "Flash Tracker" публике представлен так и не был, можно предположить, что все встречающиеся в архивах и в различных программах модули FLS получены конвертированием из STC.
Смещение | Размер | Обозначение | Описание |
---|---|---|---|
+0 | 2 | PossPtr | Указатель на список позиций. |
+2 | 2 | OrnsPtr | Указатель на орнаменты. |
+4 | 2 | SamsPtr | Указатель на сэмплы. |
+6 | ? | PatPtrs | По три указателя (описатели каналов A, B, C, итого 6 байт) на каждый паттерн (нумерация с 1). |
+OrnsPtr | ? | OrnPtrs | Указатели на орнаменты (до 15 штук, нумерация с 1). |
+SamsPtr | ? | SamPtrs | Для каждого сэмпла (до 16 штук, нумерация с 0) по четыре байта: +0 – 0 – сэмпл не зациклен, 1..32 – тик для зацикливания, увеличенный на 1; +1 – 1..32 – количество тиков в зацикленной части для зацикленных сэмплов (для незацикленных сэмплов не используется, но обычно 1); +2 – указатель на тело сэмпла. |
+PossPtr | ? | PosList | Список паттернов в порядке проигрывания, 0 – маркёр конца списка. |
? | PatChns | Список описателей каналов паттернов, у каждого такая же структура, как в обычном STC. Когда анализатор канала в плеере FLS встречает орнамент 0, происходит простое выключение орнамента (в STC играется пустой нулевой орнамент). Также этот анализатор по-другому интерпретирует избыточный код 0x82: в оригинальном STC устанавливается 0-й орнамент, в FLS – тип огибающей 2 и извлекается один байт для периода огибающей (похоже в плеере FLS просто ошибка). | |
? | Orns | Орнаменты (по 32 байта в каждом), такие же, как в STC. | |
? | Sams | Сэмплы (по 3 байта на тик, 32 тика на сэмпл), такие же, как в STC. |