Table of Contents

Формат файла .MFM

Контроллер Мегадрайв хранит образы флоппи-дисков в виде файлов с расширением .MFM. Файл имеет размер 2048000 байт и состоит из 160-ти дорожек: сперва цилиндр 0 (сторона 0, потом сторона 1), затем цилиндр 1 (сторона 0, потом 1) и так далее. Байты выдаются старшим битом вперёд.

Каждая дорожка содержит 6400 байт информации, закодированной в формате MFM и занимающей в файле объем 12800 байт.

Кодирование MFM:

Исходный бит На магнитной дорожке Условие
1 01
0 10 если в предыдущем бите был ноль
0 00 если в предыдущем бите была единица

Информация с текущей дорожки поступает в компьютер со скоростью 250 кбит/сек, что соответствует скорости вращения флоппи-диска, равной 250000/6400/8*60 = 293 об/мин. Это примерно на 2% меньше номинальной скорости 300 об/мин.

Ниже описываются форматы записи дискет Double Density для IBM PC и Amiga.

Дискеты IBM PC

Структура дорожки:

Маркер индекса 96 байтов: 80 байтов 4E, 12 байтов 00, 3 байта C2, 1 байт FC
Зазор индекса 42 (примерно) байта 4E
Первый сектор 574 байта
Зазор сектора 80 или 46 байтов 4E
… … … … … …
Последний сектор 574 байта
Зазор сектора 80 или 46 байтов 4E
Зазор дорожки несколько сот байтов 4E

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

Маркер индекса не является обязательным и для некоторых типов контроллеров дисководов может отсутствовать. Размер зазоров может отличаться для разных форматов диска.

Формат К-во секторов Зазор сектора
720 кбайт 9 80
800 кбайт 10 46

Каждый сектор содержит 574 байта:

Маркер идентификатора 16 байтов: 12 байтов 00, 3 байта A1, 1 байт FE
Идентификатор адреса 4 байта: адрес дорожки, сторона дискеты, номер сектора, длина сектора
Контрольная сумма идентификатора 2 байта полинома x16+x12+x5+1 (CCITT)
Зазор идентификатора 22 байта 4E
Маркер данных 16 байтов: 12 байтов 00, 3 байта A1, 1 байт FB (данные верны) или F8 (данные стёрты)
Поле данных 512 байтов данных
Контрольная сумма данных 2 байта полинома x16+x12+x5+1 (CCITT)

Контрольная сумма включает байты маркера A1-A1-A1-Fx. Начальное значение FFFF.

При записи маркеров байты C2 и A1 кодируются специальным образом, с нарушением обычных правил MFM:

C 2 A 1
Биты _1 _1 _0 _0 _0 _0 _1 _0 _1 _0 _1 _0 _0 _0 _0 _1
MFM с нарушением 01 01 00 10 10 00 01 00 01 00 01 00 10 00 10 01

Дискеты Amiga

Структура дорожки:

Начальный зазор 150 байтов 00
Первый сектор 544 байта
… … … … … …
Последний сектор 544 байта
Конечный зазор 266 байтов 00

На каждой дорожке размещается 11 секторов. Общая ёмкость дискеты равна 880 кбайт.

Каждый сектор содержит 544 байта:

Маркер 4 байта: 00 00 A1 A1
Идентификатор 4 байта: FF, номер дорожки, номер сектора, смещение сектора
Метка сектора 16 байтов: все нули
Контрольная сумма заголовка 4 байта
Контрольная сумма данных 4 байта
Поле данных 512 байтов: сначала 128 полуслов нечётных битов, затем 128 полуслов чётных битов

Поля идентификатора и метки закодированы в виде 32-битных слов с перегруппировкой чётных и нечётных битов. Если перенумеровать биты слова:

313029282726252423222120191817161514131211109876543210

то на дискету они будут записаны в следующем порядке (слева направо):

312927252321191715131197531302826242220181614121086420

Контрольная сумма представляет собой XOR (исключающее или) всех 16-битных полуслов соответствующих данных.

Утилита mfmdisk

Утилита mfmdisk:

Скачать исходный текст можно здесь.

Ссылки

Файлы для экспериментов

Дискеты 800k IBM PC:

Дискета в формате Amiga: