Формат RSF

Формат RSF занимает меньше места, чем PSG, содержит текстовую информацию о файле и его достаточно просто транслировать в эмулятор на Atmega 8 в виде потока и т.д.

RSF (расшифровывается как Registers Stream Flow/поток регистров)

Заголовок версии 1


Описание формата:
Заголовок:

Смещение | Размер | Тип и/или описание
---------+--------+---------------------------------------------------------
00       |      3 | Сигнатура "RSF" (текст)
03       |      1 | Версия (текущая 1)
04       |      1 | Частота смены кадров (частота прерываний) обычно 50(Hz)
05       |      4 | UInt32, frameCount (общее число кадров в мелодии)
09       |      4 | UInt32, loopFrame (номер кадра для зацикливания)
13       |      X | Строка завершающаяся нулем содержащая название мелодии
XX       |      X | Строка завершающаяся нулем содержащая имя автора
XX       |      X | Строка завершающаяся нулем содержащая комментарий

 

Заголовок версии 2


Описание формата:
Заголовок:

Смещение | Размер | Тип и/или описание
---------+--------+---------------------------------------------------------
00       |      3 | Сигнатура "RSF" (текст)
03       |      1 | Версия (текущая 2)
04       |      2 | UInt16, Частота смены кадров (частота прерываний) обычно 50(Hz)
06       |      4 | UInt32, frameCount (общее число кадров в мелодии)
10       |      4 | UInt32, loopFrame (номер кадра для зацикливания)
14       |      4 | UInt32, chipFrequency (частота чипа AY)
18       |      X | Строка завершающаяся нулем содержащая название мелодии
XX       |      X | Строка завершающаяся нулем содержащая имя автора
XX       |      X | Строка завершающаяся нулем содержащая комментарий

 

Заголовок версии 3


Описание формата:
Заголовок:

Смещение | Размер | Тип и/или описание
---------+--------+---------------------------------------------------------
00       |      3 | Сигнатура "RSF" (текст)
03       |      1 | Версия (текущая 3)
04       |      2 | UInt16, Частота смены кадров (частота прерываний) обычно 50(Hz)
06       |      2 | UInt16, Смещение до начала данных мелодии
08       |      4 | UInt32, frameCount (общее число кадров в мелодии)
12       |      4 | UInt32, loopFrame (номер кадра для зацикливания)
16       |      4 | UInt32, chipFrequency (частота чипа AY)
20       |      X | Строка завершающаяся нулем содержащая название мелодии
XX       |      X | Строка завершающаяся нулем содержащая имя автора
XX       |      X | Строка завершающаяся нулем содержащая комментарий

 


ДАННЫЕ МЕЛОДИИ:

(версии 1, 2)————————————-

в начале (при чтении байта) проверьте 3 специальных значения
0xFF — прерывание, ничего не отправлять в эмулятор (просто проигнорируйте одно прерывание)
0xFE,XX — кол-во игнорируемых прерываний XX * 16 без изменения регистров (пропустите XX*16 прерываний)
0xFD,XX — кол-во игнорируемых прерываний XX * 2 без изменения регистров (пропустите XX*2 прерываний)

(версия 3)————————————-

в начале (при чтении байта) проверьте 2 специальных значения
0xFF — прерывание, ничего не отправлять в эмулятор (просто проигнорируйте одно прерывание)
0xFE,XX — кол-во игнорируемых прерываний XX без изменения регистров (пропустите XX прерываний)
—————————————————

если не встретились эти значения получаем данные регистров:

значения регистров 0-13 (регистры 14,15 в данном формате игнорируются) которые изменились с предыдущего прерывания
XX1, XX2,REG0,REG5,REG7 (зависит от регистровой маски)

Регистровая маска
XX1 — старшее значение регистровой маски
XX2 — младшее значение регистровой маски

если бит регистровой маски содержит 1, то значение регистра должно следовать за маской

Примеры

0x00,0x03,REG0,REG1 (XX1=00000000 XX2=00000011)
0x03,0x02,REG1,REG8,REG9 (XX1=00000011 XX2=00000010)

REG0, REG1 и т.д. — значения регистров 0, 1, и т.д.

ВНИМАНИЕ! в файлах версий 1, 2 генерируемых проигрывателем могут встречаться значения 255 в 13 регистре! Версия 3 формата поддерживается проигрывателем начиная с версии 11.3

[ad name=»HTML»]

Формат RSF: 3 комментария

  1. Почему нельзя в следующей, 4-й версии формата, сделать служебными значения не только 0xFF и 0xFE, а целый диапазон [0x40:0xFF]? Тем самым можно одним байтом кодировать количество пропускаемых прерываний в подавляющем большинстве ситуаций. Байт 0xFF — это ‘-1’ (пропуск одного прерывания), 0xFE — ‘-2’ (пропуск двух), … 0x40 — ‘-192’ (пропуск 192-х прерываний!). На мой взгляд и этого более чем достаточно. Но можно предусмотреть 0x40 в качестве спецбайта, когда следующий байт будет дополняющим положительным. Например, 0x40 0x10 говорит о пропуске 0x00 — 0x40 + 0x10 = 0xD0 (208) байт.

  2. В параметре
    08 | 4 | UInt32, frameCount (общее число кадров в мелодии)
    неправильное значение кадров. Подставляется из оригинального чиптьюна. Реальное надо получать проверкой всего фала на наличии изменение регистров.

Добавить комментарий для Григорий Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *