Мои познания JS не настолько велики, но попробую разобраться. Без учёта кодировки функцией fmbyte() получается так:
Код:
1. Заголовок:
- 256 байт 0FFh
- синхробайт 0E6h
- 4 байта, 'FM9'5 (046h 04Dh 039h 005h)
- 11 байт -- имя файла (8 байт, дополняется пробелами)+(3 байта расширение)
- 1 байт -- номер начального блока
- 1 байт -- количество блоков
- 256 байт 0FFh
2. Блоки данных:
- 1 байт 0FFh
- 1 байт 0E6h
- 256 байт из файла поXORенные с неким флипом???, с подсчётом контрольной суммы
3. Завершение:
- 1 байт -- контрольная сумма данных
- 1 байт -- флип??? (полагаю, для раскодировки данных)
Не совсем понятно, как работает этот флип, полагаю это нечто для лучшего утрамбовывания данных. А дальше, при кодировании, вообще происходит какая-то магия... И единственное, что я понял из рисунка, это то, что единица передаётся за полтора цикла несущей частоты, а ноль -- за половину цикла.
В общем, по-быстрому добавить FM9 не получится, надо углублённо изучить инфу, но уже этих сведений достаточно, чтобы прикинуть, что в ардуине не хватит места сразу для всех форматов, надо будет чем-то жертвовать.