Формат файла .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:

  • извлекает из файла MFM бинарный образ диска
  • создаёт MFM-файл по бинарному образу диска
  • анализирует и выдаёт подробную информацию об MFM-файле
  • работает с дисками форматов IBM PC 720k и 800k, БК-0010 800k, Amiga 880k

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

Ссылки

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

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

  • ff.bkd — 800 килобайт байтов FF
  • ff-pc.mfm — образ MFM в формате IBM PC, созданный командой “mfmdisk -c -s10 ff-pc.mfm ff.bkd”
  • ff-bk.mfm — образ MFM в формате БК-0010/0011, созданный командой “mfmdisk -c -b ff-bk.mfm ff.bkd”
  • fmt-linux.mfm — MFM-образ дискеты, отформатированной под Линуксом командой “fdformat /dev/fd0u800”
  • fmt-andos.mfm — MFM-образ дискеты, отформатированной на БК-0011 под ANDOS 3.30
  • fmt-bkunix.mfm — MFM-образ дискеты, отформатированной на БК-0011 под BKUNIX
  • andos330.bkd — ANDOS 3.30 для БК-0010/0011
  • andos330.mfm — образ MFM, созданный из andos330.bkd с помощью megadrive версии 1.05i (на БК не читается)
  • bkunix10.bkd — юникс для БК-0010
  • bkunix10.mfm — образ MFM, созданный командой “mfmdisk -c -b bkunix10.mfm bkunix10.bkd”
  • bkunix11.bkd — юникс для БК-0011М
  • bkunix11.mfm — образ MFM, созданный командой “mfmdisk -c -b bkunix11.mfm bkunix11.bkd”

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

  • amiga.mfm — образ MFM
  • amiga.img — данные, восстановленные утилитой mfmdisk (880 кбайт)
 
proj/megadrive/mfm.txt · Последние изменения: 2015/08/26 12:36
 
Copyright (C) 1996-2013 Serge Vakulenko
serge@vak.ru