│Cмещение│ Название │байт│ Описание │
├────────┼─────────────────┼────┼─────────────────────────────────┤
│ 00 │ Команда JMP │ 3 │ Длинный или короткий переход │
│ │ │ │ на программу загрузчика │
│ 03 │ Идентификатор │ 8 │ Идентификатор версии DOS, │
│ │ │ │ с помощью которой отформа- │
│ │ │ │ тирован диск │
│ 0B │ Байт/Сектор │ 2 │ Размер сектора в байтах │
│ 0D │ Сектор/Кластер │ 1 │ Число секторов в кластере │
│ 0E (*)│ Резерв │ 2 │ Количество резервных секторов │
│ 10 │ Число FAT │ 1 │ Число копий FAT на диске │
│ 11 │ Число корневых │ 2 │ Max количество записей в │
│ │ записей │ │ корневом каталоге диска │
│ 13(**)│ Всего секторов │ 2 │ Общее число секторов на диске │
│ 15 │ Носитель │ 1 │ Тип магнитного носителя │
│ 16 │ Сектор/FAT │ 2 │ Число секторов в каждой из FAT │
│ 18 │ Сектор/дорожка │ 2 │ Число секторов на одну дорожку │
│ 1A │ Число головок │ 2 │ Число головок на диске │
│ 1С │ Скрытых секторов│ 4 │ Число скрытых секторов на диске│
│ 20 │ Боьших секторов │ 4 │ Общее число секторов │
│ 22 │ Номер накопителя│ 1 │ Номер накопителя по BIOS'у │
│ 23 │ │ 1 │ Резерв │
│ 24 │ Сигнатура │ 1 │ Содержит число 29 │
│ 25 │ ID тома │ 4 │ Идентификатор тома диска │
│ 29 │ Метка тома │ 11 │ Копия метки тома │
│ 34 │ ID типа FAT │ 8 │ FAT12 или FAT16 -байт │
└────────┴─────────────────┴────┴─────────────────────────────────┘
(*) - _^^&для формата IBM PC длина зарезервированной области всегда
__составляет 1 сектор ( сектор загрузчика )
(**)- _^^&если более 65535 то 0
_"Таблица размещения файлов ( FAT )
Содержит информацию о месторасположении записанных на дискету
файлов. Системa MS-DOS выделяет для хранения файла, в зависимос-
ти от его длины, один или более кластеров ( кластер - единица
хранения данных на диске, обычно один кластер равен нескольким
секторам ), однако MS-DOS не заботится, чтобы запись файла проис-
ходила последовательно ( скорее наоборот : логика работы MS-DOS
такова, что она всячески способствует фрагментации файлов ), поэ-
тому необходимо хранить информацию, по каким именно кластерам
раскидан данный файл. В силу особой важности этой информации FAT
существует на диске в двух копиях. FAT дискеты состоит из 12-би-
товых элементов. Структура таблицы размещения файлов - следующая:
┌─────────────┬───────────────────────────────────────────┐
│ Элемент FAT │ Выполняемая функция │
├─────────────┼───────────────────────────────────────────┤
│ 0 │ Идентификатор формата │
│ 1 │ Зарезервирован ( должен быть FFF ) │
│ 2 │ Статус кластера 2 │
│ 3 │ Статус кластера 3 │
│ ... │ ... │
└─────────────┴───────────────────────────────────────────┘
Идентификатор формата может принимать
следующие значения :
F0 - 3'5/2/18 ( дискета 3'5, 2 стороны, 18 секторов )
F8 - жесткий диск
F9 - 5'25/2/15 или 3'5/2/9
FC - 5'25/1/9
FD - 5'25/2/9
FE - 5'25/1/8
FF - 5'25/2/8
Статус кластера может быть следующим :
000 - кластер свободен
FF0..FF6 - зарезервирован
FF7 - испорчен
FF8...FFF - последний кластер
иначе - номер следующего кластера файла
Интересно заметить, что, по-видимому, значение статуса 001 яв-
ляется запрещенной комбинацей.
_"Корневой каталог
Следует непосредственно за FAT. Содержит информацию об основ-
ных параметрах файлов ( длине, дате создания,...). Каждая запись
в каталоге, соответствуeт тому или иному файлу ( кроме, разумеет-
ся, метки диска ), включает номер первого кластера, назначенного
MS-DOS этому файлу, который используется как точка входа в FAT.
Начиная с этой точки, каждая запись в FAT содержит номер следую-
щего кластера, распеределенного под этот файл, или метку послед-
него кластера. Структура записи в корневом каталоге следующая :
┌─────────┬───────────┬───────────────────────────────────┐
│Cмещение │ Название │ Описание │
├─────────┼───────────┼───────────────────────────────────┤
│ 00 │ Имя │ Имя файла │
│ │ │ 0 если запись свободна │
│ │ │ E5 если файл удален │
│ │ │ 2E запись родительского каталога │
│ 08 │ Расширение│ │
│ 0B │ Атрибуты │ Системный атрибут файла │
│ 0C │ │ Резерв │
│ 16 │ Время │ Время последней перезаписи файла │
│ 18 │ Дата │ Дата последней перезаписи файла │
│ 1A │ Кластер │ Номер первого отведенного кластера│
│ 1C │ Размер │ Размер файла ( 4 байта ) │
└─────────┴───────────┴───────────────────────────────────┘
_"Область данных
Именно то место, ради которого и используется дискета - здесь
храниться информация пользователя. MS-DOS рассматривает эту об-
ласть как совокупность кластеров, каждый из которых содержит один
или несколько секторов. Из-за того что первые два поля FAT заре-
зервированы, первому кластеру в области данных присвоен номер 2.
Все каталоги, кроме корневого, также раасматриваются MS-DOS как
файлы особого вида, и поэтому помещаются в область данных.
_@Работа BIOS с НГМД
Програмное управление дискетой ( точнее говоря, адаптером НГМД)
осуществляется с помощью драйвера BIOS, вызов которого осущес-
твляется через прерывание int 13. Методика вызова конкретных фун-
кций стандартна, то есть номер функции загружается в ah, ос-
тальные параметры в другие регистры общего назначения, для адре-
совки буферов так же используется регистровая пара es:bx.
Всего стандартный драйвер поддерживает 6 функций работы с НГМД
с номерами от 0 до 5. Перечислим их в порядке возрастания :
_ 0__ _ -__ _ Сброс системы НГМД __ __ _ 3__ _ -__ _ Записать сектор
_ 1__ _ -__ _ Прочитать состояние __ __ _ 4__ _ -__ _ Проверить сектор
_ 2__ _ -__ _ Прочитать сектор __ __ _ 5__ _ -__ _ Разметка дорожки
Все функции выполняются, согласовываясь с базовой дисковой
таблицей, на которую указывает вектор 1e. Разумеется пользова-
тель может модифицировать этот вектор и создать свою таблицу. При
загрузке ОС BIOS инициализирует ее, а DOS модифицирует, чтобы
улучшить производительность дискет. Структура этой таблицы сле-
дующая ( везде, где не сказано иное, время указывается в квантах
системного таймера ).
┌────┬───────────────────────────────────────────────────────────┐
│Смещ│ Содержимое │
├────┼───────────────────────────────────────────────────────────┤
│ 0 │ биты 4-7: время перехода с дорожки на дорожку ( в млс ) │
│ │ биты 0-3: время под'ема головки после чтения/записи │
│ 1 │ бит 0: 1= исп.DMA , 0= DMA не используется │
│ │ биты 2-7: время опускания головок │
│ 2 │ время не остановки двигателя после окончания чтения/записи│
│ 3 │ размер сектора (0=128, 1=256, 2=512, 3=1024) │
│ 4 │ номер последнего сектора на дорожке │
│ 5 │ длина межсекторного промежутка для операций чтения/записи │
│ 6 │ Максимальная длина передаваемых данных │
│ 7 │ длина межсекторного промежутка для операции форматирования│
│ 8 │ символ-заполнитель для форматирования ( обычно f6 ) │
│ 9 │ время позиционирования головок │
│ a │ время разгона мотора (в 1/8-секундных интервалах) │
└────┴───────────────────────────────────────────────────────────┘
Также в BIOS Data Segment содержатся следующие параметры НГМД:
_ 0:043e__ требуется рекалибрация флоппи-дисковода
_ __ (бит 0=A, бит 1=B, etc.)