Gaps

2026-01-13 09:30
vak: (Знайка)
[personal profile] vak
Доделываю в утилите floppy поддержку формата файлов IMG. Утилита уже умеет писать IMG на флопик и читать IMG с флопика. Но дьявол в деталях: разные форматы флопиков имеют разные "gaps", то есть зазоры, пустые места на дорожке.

В общих чертах, дорожка флопика состоит из нескольких секторов и промежутков между ними. Каждый сектор подразделяется на блок заголовка сектора и блок данных сектора.



Критичные зазоры здесь: gap2 и gap3. От их величины зависит стабильность обмена с флопиком на разных флоповодах. Gap4a и gap1 всегда одинаковые, а gap4b просто дополняет дорожку до нужного размера (до следующего индекса).

Вот зазоры gap3 для стандартных форматов, в строке Gap Length (Format). Это из описания чипа флопового контроллера FDC37C65C. Там же указано, что gap2 для всех форматов должен быть 22, а для 2.88M увеличенный до 41.



Зазоры для нестандартных форматов придётся смотреть в линуксном драйвере floppy.c. Полезно и в FreeBSD заглянуть, sys/fdcio.h.

Date: 2026-01-16 09:44 (UTC)
From: [personal profile] chabapok
На х86 есть немаскируемые прерывания. Плюс - работа кеша плохо прогнозируется. То есть, одни и те же инструкции могут "как бы" исполнятся разное количество тактов, из за прерываний и кэша. Не говоря про желание ОС свопить (старое железо вроде так не делало?). А сигналом с головки надо управлять в риалтайме, с определенной погрешностью. Вылезет ли за пределы погрешности программа - я без понятия, но ни разу не слышал, чтобы прямо с компа управляли прямым сигналом с головки. Может на х86 это норма? Не знаю.

На спектрумах так нельзя было. Там вся работа шла через микросхему, и прямого сигнала с головы не было.

Но вообще, хоть и понятно, что так сделать технически получится на каком-то железе, мне не ясно, зачем может понадобиться так делать. Если только не делаешь специальное железо для работы с флоповодами.
Программа работы с картинками должна все, что не касается работы с картинками, делать через драйвера. Тем более на х86 в msdos. Возможно, бывает железо, на котором по-другому просто не выйдет. Там такие финты - понятны.