====== Формат файла .MFM ====== Контроллер [[megadrive | Мегадрайв]] хранит образы флоппи-дисков в виде файлов с расширением .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 Скачать исходный текст [[https://github.com/sergev/mfmdisk/wiki | можно здесь]]. ===== Ссылки ===== * [[ftp://download.intel.com/design/archives/periphrl/docs/29047403.pdf | Intel 82078 floppy disk controller]] * {{floppy-ug.pdf | The floppy user guide}} * [[http://lclevy.free.fr/adflib/adf_info.html | Amiga disk FAQ]] * [[http://www.hansotten.com/msxwd1793.html | 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: * {{amiga.mfm}} --- образ MFM * {{amiga.img}} --- данные, восстановленные утилитой mfmdisk (880 кбайт)