Физика там простая - обычный манчестер. А логика еще проще: серия 0, потом все как описано тут. Так как свойство манчестера с самосинхронизацией позволяет получить как прямой так и инверсный код, то при приеме синхробайта если он был 0E6H, то все байты принимаются как есть, если он был 19H, то все байты перед сохранением инвертируются. Способ приема (подпрограмма загрузки вышеуказанных компов) следующий: ждем перепада, ждем константу загрузки, считываем бит. Повторяем. отличие режима поиска синхробайта от загрузки байта в следующем: при поиске синхробайта (счетчик бит 0FFH) подпрограмма после каждого принятого бита сравнивает с синхробайтом, а при загрузке байта (счетчик бит 08H) просто загружает 8 бит подряд. Из-за того, что при загрузке блока кодов между вызовами выгрузки байта есть несколько команд (увеличение указателей, сравнение на конец) то второй полупериод последнего бита в байте несколько удлинен. Поэтому звук раккорда (серия байтов 00H) слышится "рванной". Однако, при правильной синхронизации эти задержки попадают на аналогичные при загрузке файла и не влияют в реальном железе.
---------- Post added at 11:23 ---------- Previous post was at 09:25 ----------
Отрезал чисто игру Adventures и собрал статистику по длительностям полупериодов:
Код:
Загружено 8639781 сэмплов (34559124 байт).
Value: 9 Position: 26,895 Count: 1
Value: 10 Position: 26,519 Count: 2
Value: 11 Position: 41,316 Count: 2
Value: 12 Position: 26,819 Count: 3
Value: 13 Position: 5,684 Count: 519
Value: 14 Position: 0,000 Count: 17059
Value: 15 Position: 0,001 Count: 154455
Value: 16 Position: 0,001 Count: 144395
Value: 17 Position: 0,478 Count: 20661
Value: 18 Position: 0,026 Count: 9768
Value: 19 Position: 0,004 Count: 10190
Value: 20 Position: 1,373 Count: 4492
Value: 21 Position: 5,716 Count: 1798
Value: 22 Position: 5,789 Count: 518
Value: 23 Position: 29,255 Count: 3
Value: 28 Position: 56,909 Count: 1
Value: 29 Position: 1,399 Count: 243
Value: 30 Position: 1,375 Count: 11584
Value: 31 Position: 1,359 Count: 15509
Value: 32 Position: 1,360 Count: 24446
Value: 33 Position: 1,357 Count: 8902
Value: 34 Position: 1,362 Count: 1651
Value: 35 Position: 1,401 Count: 2915
Value: 36 Position: 1,379 Count: 5813
Value: 37 Position: 5,896 Count: 5037
Value: 38 Position: 59,742 Count: 51
Отчетливо видно, что граница между коротким и длинным у нас 23<LoadConst<28. Т.е., надежное число будет 25 или 26. Так же видны выпадающие из общей картины единичные полупериоды, попробую их проанализировать.
---------- Post added at 11:58 ---------- Previous post was at 11:23 ----------
Подправил и вот что получил:
Код:
Загружено 8639781 сэмплов (34559124 байт).
Value: 12 Position: 41,326 Count: 2
Value: 13 Position: 5,684 Count: 520
Value: 14 Position: 0,000 Count: 17061
Value: 15 Position: 0,001 Count: 154457
Value: 16 Position: 0,001 Count: 144398
Value: 17 Position: 0,478 Count: 20663
Value: 18 Position: 0,026 Count: 9770
Value: 19 Position: 0,004 Count: 10189
Value: 20 Position: 1,373 Count: 4490
Value: 21 Position: 5,716 Count: 1797
Value: 22 Position: 5,789 Count: 518
Value: 23 Position: 21,480 Count: 1
Value: 29 Position: 1,399 Count: 243
Value: 30 Position: 1,375 Count: 11584
Value: 31 Position: 1,359 Count: 15510
Value: 32 Position: 1,360 Count: 24448
Value: 33 Position: 1,357 Count: 8901
Value: 34 Position: 1,362 Count: 1650
Value: 35 Position: 1,401 Count: 2915
Value: 36 Position: 1,379 Count: 5813
Value: 37 Position: 5,896 Count: 5037
Value: 38 Position: 59,742 Count: 51
19L: 0000..79FF = 7712 : 766C
19R: FFFF..79FF = 0000 : 79FF
20L: 0000..79FF = 9BC1 : 766C
20R: 0000..79FF = 6FD2 : 766C
21L: 0000..79FF = C9AF : 766C
21R: 0000..79FF = C8D7 : EDD8
22L: 0000..79FF = 7E74 : 766C
22R: 0000..79FF = 4A58 : EDD8
23L: 0000..79FF = 4A58 : EDD8
23R: 0000..79FF = 4A58 : EDD8
24L: 0000..79FF = 4A58 : EDD8
24R: 0000..79FF = 4A58 : EDD8
25L: 0000..79FF = 4A58 : EDD8
25R: 0000..79FF = 4A58 : EDD8
26L: 0000..79FF = 4A58 : EDD8
26R: 0000..79FF = 4A58 : EDD8
27L: 0000..79FF = 4A58 : EDD8
27R: 0000..79FF = 4A58 : EDD8
Поведение на константах от 23 до 27 вполне предсказуемо. Ниже 19 и выше 27 файл не распознаваем.