User Tools

Site Tools


megadrive:mfm

Формат файла .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 кбайт)
megadrive/mfm.txt · Last modified: 2015/08/26 12:36 by 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki