Формат 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: 2 комментария

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

Добавить комментарий

Ваш адрес email не будет опубликован.