Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Да, с чтением появились проблемы, пока не нашел причину. Скорее всего дело в нестабильности выдачи импульсов чтения.
Desync ищу так: каждые прочитанные 16 бит (данных записи) запускаю цикл, в котором добавляю по одному биту справа к буферной переменной и делаю XOR с 0x89245555, если результат 0, то все последующие биты пишу как информацию из поля данных соответствующего сектора (минус пролог и эпилог с КС). Потом это нужно будет преобразовать из MFM в нормальный вид и записать в соответствующее место образа DSK.
Ясно, спасибо.
1. Где-то на форуме Владимир говорил, что в паре синхросбоя вторым байтом может быть и не $FF. (0x89245555)
2. Синхросбой не только перед полем данных, но и перед адресным полем.
3. Предкомпенсацию записи как-то обрабатываешь?
Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).
Да, тут либо проверять все возможные варианты, если их конечное кол-во либо писать как есть а уже потом анализировать на компьютере или на контроллере в offline.
Да, но все команды записи бейсика, которые я пробовал, пишут только кусок данных размером 269-270 MFM слов попадающий между GAP2 (почти полностью) и GAP3 (пару байт):2. Синхросбой не только перед полем данных, но и перед адресным полем.
Поля адреса записываются только по команде INIT или при копировании дискет копировщиком ИКП например.Код:2.3 GAP2 5x 0xAA bytes 2.4 Desync: 0xA4, 2 ms zero level interval, 0xFF 2.5 Data field: 0x6A, 0x95 (2 byte, data field prologue), 256 Data Bytes, CRC (1 byte), 0x5A (1 byte, data field epilogue) 2.7 GAP3 22x 0xAA bytes
Т.к. временные промежутки между импульсами довольно легко дифференцируются, а предкомпенсация добавляет доли микросекунды, то думаю нет смысла както явно ее учитывать.3. Предкомпенсацию записи как-то обрабатываешь?
Вот пример записи в условных единицах длительности паузы между импульсами, в скобках длина паузы в тиках процессора, после стрелки кол-во импульсов с такой длиной:
Поэтому, мы можем легко задать довольно широкие диапазоны для декодирования, например: 0-450 код 10, 450-650 код 100, 650-... код 1000.Код:[317] => 4 [343] => 41 [349] => 1 [369] => 796 [371] => 1 [395] => 2 [550] => 3 [551] => 527 [575] => 1 [577] => 164 [733] => 44 [734] => 1 [759] => 69 [783] => 1 [785] => 21 [811] => 1
Также никто не мешает анализировать эти интервалы после получения данных и подстраивать окна автоматически на основе максимального расстояния между группами значений.
Мне кажется, что писать \ читать сырой поток здравая идея. Легче требования к железу, проще программа, упрощается работа с дисками с защитами от копирования и нестандартными программами. А конвертер в \ из DSK можно и на компе сделать если очень надо - никаких требований к производительности в реальном времени и ограничений по функциональности.
Все детали проектов ЮТ-88 на ПЛИС, АГАТ-7 на ПЛИС и прочее в моем блоге на http://electronicsfun.net
Это так, но основной предпосылкой для создания эмулятора с моей стороны, была поддержка уже существующих форматов, без необходимости их конвертации в промежуточный специфический формат.
С чтением проблем нет, с записью сложнее, но я уверен, что те программы которые поставляются в dsk образах не используют нестандартные desync и прочее, поэтому с ними и с записью проблем не будет.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)