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-битных слов с перегруппировкой чётных и нечётных битов. Если перенумеровать биты слова:
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
то на дискету они будут записаны в следующем порядке (слева направо):
31 | 29 | 27 | 25 | 23 | 21 | 19 | 17 | 15 | 13 | 11 | 9 | 7 | 5 | 3 | 1 | 30 | 28 | 26 | 24 | 22 | 20 | 18 | 16 | 14 | 12 | 10 | 8 | 6 | 4 | 2 | 0 |
Контрольная сумма представляет собой XOR (исключающее или) всех 16-битных полуслов соответствующих данных.
Утилита mfmdisk
Утилита mfmdisk:
- извлекает из файла MFM бинарный образ диска
- создаёт MFM-файл по бинарному образу диска
- анализирует и выдаёт подробную информацию об MFM-файле
- работает с дисками форматов IBM PC 720k и 800k, БК-0010 800k, Amiga 880k
Скачать исходный текст можно здесь.
Ссылки
- Western Digital FD1793 - контроллер флоппи-диска для MSX.
- “Дисковая подсистема IBM-совместимых персональных компьютеров”, Л. В. Букчин, Ю. Л. Безрукий. М., 1993
Файлы для экспериментов
Дискеты 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: