Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых

Операционная система MS-DOS

© Александр Фролов, Григорий Фролов
Том 1, книга 3, М.: Диалог-МИФИ, 1992.

[Назад] [Содеожание]

7.1. Управляющие блоки MS-DOS

7.1.1. Векторная таблица связи MS-DOS

(-2) 2 mcb_seg сегмент первого управляющего блока памяти (MCB)
(0) 4 dev_cb указатель на первый блок управления устройствами DOS (DOS Device Control Block)
(+4) 4 file_tab указатель на таблицу файлов DOS
(+8) 4 clock_dr указатель на драйвер CLOCK$, установленный или резидентный
(+12) 4 con_dr указатель на актуальный драйвер CON, установленный или резидентный
    ----------- DOS 2.x ----------------
(+16) 1 num_lgdr число логических драйверов в системе
(+17) 2 max_btbl максимальное число байтов/блоков любого блочного устройства
(+19) 4 disk_buf указатель на первый дисковый буфер
(+23) - null_dr начало драйвера NUL - первого драйвера в списке драйверов DOS
    ----------- DOS 3.x, 4.x , 5.0-----------
(+16) 2 max_btbl максимальное число байтов в блоке блочного устройства
(+18) 4 disk_buf указатель на первый дисковый буфер
(+22) 4 drv_info укзатель на массив информации об устройствах
(+26) 4 fcb_tabl указатель на таблицу FCB
(+30) 2 fcb_size размер таблицы FCB
(+32) 1 num_bdev число блочных устройств
(+33) 1 lastdriv значение LASTDRIVE в файле CONFIG.SYS (по умолчанию равно 5)
(+34) null_dr начало драйвера NUL - первого драйвера в списке драйверов DOS

7.1.2. Блок управления памятью MCB

(0) 1 type тип блока MCB (M или Z)
(+1) 2 owner параграф владельца блока (если 0, то блок описывает сам себя)
(+3) 2 size число параграфов в этом блоке (один параграф имеет размер 16 байт)
(+5) 11 reserve зарезервировано

7.1.3. Префикс программного сегмента PSP

(0) 2 int20h двоичный код команды int 20h (программы могут использовать эту команду для завершения своей работы)
(+2) 2 mem_top нижняя граница доступной памяти в системе в параграфах
(+4) 1 reserv1 зарезервировано
(+5) 5 call_dsp команда вызова FAR CALL диспетчера MS-DOS
(+10) 4 term_adr адрес завершения (Terminate Address)
(+14) 4 cbrk_adr адрес обработчика Ctrl-Break
(+18) 4 crit_err адрес обработчика критической ошибки
(+22) 2 parn_psp сегмент PSP программы, запустившей данную программу (программы-родителя)
(+24) 20 file_tab таблица открытых файлов, если здесь находятся байты 0FFH, то таблица не используется
(+44) 2 env_seg сегмент блока памяти, содержащего переменные среды
(+46) 4 ss_sp адрес стека SS:SP программы
(+50) 2 max_open максимальное число открытых файлов
(+52) 4 file_tba адрес таблицы открытых файлов
(+56) 24 reserv2 зарезервировано
(+80) 3 disp диспетчер функций DOS
(+83) 9 reserv3 зарезервировано
(+92) 16 fcb1 форматируется как стандартный FCB, если первый аргумент командной строки содержит правильное имя файла
(+108) 20 fcb2 заполняется для второго аргумента командной строки аналогично fcb1
(+128) 1 p_size число значащих символов в неформатированной области параметров, либо буфер обмена с диском DTA, назначенный по умолчанию
(+129) 127 parm неформатированная область параметров, заполняется при запуске программы из командной строки

7.1.4. Формат блока DDCB

для DOS версий 2.х и 3.х:

(0) 1 drv_num номер устройства (0 соответствует устройству А:, 1 - В: и т.д.)
(+1) 1 drv_numd дополнительный номер устройства внутри драйвера
(+2) 2 sec_size размер сектора в байтах
(+4) 1 clu_size число, на единицу меньшее количества секторов в кластере
(+5) 1 clu_base число, являющееся степенью 2 числа секторов в кластере
(+6) 2 boot_siz количество зарезервированных секторов (boot-сектора, начало корневого каталога)
(+8) 1 fat_num количество копий FAT
(+9) 2 max_dir максимальное число дескрипторов файлов в корневом каталоге (т.е. максимальное число файлов, которое может содержать корневой каталог на этом устройстве)
(+11) 2 data_sec номер первого сектора данных на диске (номер сектора, соответствующего кластеру номер 2)
(+13) 2 hi_clust максимальное количество кластеров (равно увеличенному на 1 количеству кластерова данных)
(+15) 1 fat_size количество секторов, занимаемых одной копией FAT
(+16) 2 root_sec номер первого сектора корневого каталога
(+18) 4 drv_addr FAR-адрес заголовка драйвера, обслуживающего данное устройство
(+22) 1 media байт описания среды носителя данных
(+23) 1 acc_flag флаг доступа, 0 означает, что к устройству был доступ
(+24) 4 next адрес следующего блока DDCB, для последнего блока в поле смещения находится число FFFF
    ----------- только для DOS 2.x --------------
(+28) 2 dir_clu номер начального кластера текущего каталога (0 для корневого каталога)
(+30) 64 dir_path строка в формате ASCIIZ, содержащая путь к текущему каталогу
    --------------- DOS 3.х -------------------------
(+28) 2 reserv1 зарезервировано, обычно равно 0
(+30) 2 built число FFFF в этом поле означает, что блок DDCB был построен

для DOS версии 4.х :

(0) 1 drv_num номер устройства (0 соответствует устройству А:, 1 - В: и т.д.)
(+1) 1 drv_numd дополнительный номер устройства внутри драйвера
(+2) 2 sec_size размер сектора в байтах
(+4) 1 clu_size число, на единицу меньшее количества секторов в кластере
(+5) 1 clu_base число, являющееся степенью 2 числа секторов в кластере
(+6) 2 boot_siz количество зарезервированных секторов (boot-сектора, начало корневого каталога)
(+8) 1 fat_num количество копий FAT
(+9) 2 max_dir максимальное число дескрипторов файлов в корневом каталоге (т.е. максимальное число файлов, которое может содержать корневой каталог на этом устройстве)
(+11) 2 data_sec номер первого сектора данных на диске (номер сектора, соответствующего кластеру номер 2)
(+13) 2 hi_clust максимальное количество кластеров (равно увеличенному на 1 количеству кластеров данных)
(+15) 1 fat_size количество секторов, занимаемых одной копией FAT
(+16) 1 reserv1 зарезервировано
(+17) 2 root_sec номер первого сектора корневого каталога
(+19) 4 drv_addr FAR-адрес заголовка драйвера, обслуживающего данное устройство
(+23) 1 media байт описания среды носителя данных
(+24) 1 acc_flag флаг доступа, 0 означает, что к устройству был доступ
(+25) 4 next адрес следующего блока DDCB, для последнего блока в поле смещения находится число FFFF
(+29) 2 reserv2 зарезервироано
(+31) 2 built число FFFF в этом поле означает, что блок DDCB был построен

7.1.5. Формат таблицы файлов DFT

для DOS 3.х:

(0) 4 next указатель на следущую таблицу файлов
(+4) 2 file_count количество файлов в этой таблице
    ----- Дальше идут блоки DFCB в количестве file_count штук -----
(0) 2 handl_num количество файловых чисел, связанных с данным файлом (file handle)
(+2) 1 access_mode режим доступа к файлу, заданный при открытии файла
(+3) 2 reserv1 зарезервировано
(+5) 2 dev_info информация IOCTL, полученная для устройства, на котором расположен этот файл (подробно формат и назначение этого поля будут расмотрены в главе, посвященной драйверам)
(+7) 4 driver указатель на драйвер, обслуживающий устройство, содержащее файл
(+11) 2 first_clu номер первого кластера, распределенного файлу
(+13) 2 time время последнего изменения файла в упакованном формате
(+15) 2 date дата последнего изменения файла в упакованном формате
(+17) 4 fl_size размер файла в байтах
(+21) 4 offset текущее смещение внутри файла в байтах
(+25) 2 reserv2 зарезервировано
(+27) 2 last_clu номер только что прочитанного кластера
(+29) 3 reserv3 зарезервировано
(+32) 11 filename имя файла в формате FCB (имя выравнено на левую границу поля, дополнено пробелами до 8 символов, справа к нему прилегает 3 символа расширения без точки)
(+43) 2 reserv4 зарезервировано
(+45) 2 ownr_psp PSP программы, открывшей файл
(+47) 2 reserv5 зарезервировано

для DOS 4.х:

(0) 4 next указатель на следущую таблицу файлов
(+4) 2 file_count количество файлов в этой таблице
    -------- Дальше идут блоки DFCB в количестве file_count штук ------
(0) 2 handl_num количество файловых чисел, связанных с данным файлом (file handle)
(+2) 1 access_mode режим доступа к файлу, заданный при открытии файла
(+3) 2 reserv1 зарезервировано
(+5) 2 dev_info информация IOCTL, полученная для устройства, на котором расположен этот файл (подробно формат и назначение этого поля будут расмотрены в главе, посвященной драйверам)
(+7) 4 driver указатель на драйвер, обслуживающий устройство, содержащее файл
(+11) 2 first_clu номер первого кластера, распределенного файлу
(+13) 2 time время последнего изменения файла в упакованном формате
(+15) 2 date дата последнего изменения файла в упакованном формате
(+17) 4 fl_size размер файла в байтах
(+21) 4 offset текущее смещение внутри файла в байтах
(+25) 2 reserv2 зарезервировано
(+27) 2 reserv7 зарезервировано
(+29) 3 reserv3 зарезервировано
(+32) 1 reserv4 зарезервировано
(+33) 11 filename имя файла в формате FCB (имя выравнено на левую границу поля, дополнено пробелами до 8 символов, справа к нему прилегает 3 символа расширения без точки)
(+44) 2 reserv5 зарезервировано
(+46) 2 ownr_psp PSP программы, открывшей файл
(+48) 2 reserv6 зарезервировано
(+50) 2 last_clu номер только что прочитанного кластера
(+52) 4 reserv8 зарезервировано

7.1.6. Заголовок драйвера

(0) 4 next указатель на заголовок следующего драйвера. Если смещение адреса следующего драйвера равно FFFF, это последний драйвер в цепочке
(+4) 2 attrib атрибуты драйвера
(+6) 2 strateg смещение программы стратегии драйвера
(+8) 2 interrupt смещение программы обработки прерывания для драйвера
(+10) 8 dev_name имя устройства для символьных устройств или количество обслуживаемых устройств для блочных устройств.

7.1.7. Формат элемента массива дисковой информации

(0) 64 path текущий путь доступа для диска
(+64) 2 reserv1 зарезервировано
(+66) 2 reserv2 зарезервировано
(+68) 1 reserv3 зарезервировано
(+69) 4 ddcb адрес соответствующего DDCB
(+73) 2 cdir_clu первый кластер текущего каталога на диске. 0 соответствует корневому каталогу, -1 - если к диску еще не обращались
(+75) 2 reserv4 зарезервировано
(+77) 2 reserv5 зарезервировано
(+79) 2 reserv6 зарезервировано
    ---------------- для DOS 4.х -----------------
(+81) 7 reserv7 зарезервировано

7.1.8. Заголовок EXE-файла

(0) 2 signature два байта 'MZ' (4Dh, 5Ah), индентифицирующие файл в формате EXE
(+2) 2 part_pag длина последней страницы программы в байтах (страница содержит 512 байт)
(+4) 2 file_size размер программы в страницах по 512 байт
(+6) 2 rel_item число элементов в таблице расположения сегментов
(+8) 2 hdr_size размер заголовка файла в параграфах (длина параграфа - 16 байт)
(+10) 2 min_mem минимальное количество памяти в параграфах, которое нужно зарезервировать в памяти за концом загруженной программы
(+12) 2 max_mem максимальное количество памяти в параграфах, которое нужно зарезервировать в памяти за концом загруженной программы
(+14) 2 ss_reg величина смещения от начала программы, которая используется для загрузки сегментного регистра стека SS
(+16) 2 sp_reg величина смещения от начала программы, которая используется для загрузки регистра SP
(+18) 2 chk_summ контрольная сумма всех слов в файле
(+20) 2 ip_reg значение для регистра IP, которое будет использовано при начальном запуске программы
(+22) 2 cs_reg смещение от начала программы для установки сегментного регистра кода CS
(+24) 2 relt_off смещение от начала файла таблицы расположения сегментов программы
(+26) 2 overlay номер оверлея, равен 0 для основного модуля

7.1.9. Атрибуты драйвера

Символьное устройство

Бит Назначение
0 1 - драйвер обслуживает стандартное устройство ввода;
0 - этот драйвер не обслуживает стандартное устройство ввода
1 1 - драйвер обслуживает стандартное устройство вывода;
0 - драйвер не обслуживает стандартное устройство вывода
2 1 - это драйвер стандартного устройства NUL;
0 - драйвер не обслуживает устройство NUL
3 1 - драйвер обслуживает часы
4 Зарезервировано, бит должен быть равен 0
5 Зарезервировано, бит должен быть равен 0
6 1 - разрешено использование драйвером функций GENERIC IOCTL (для версий DOS, более поздних, чем 3.2);
0 - функции GENERIC IOCTL не поддерживаются
7-10 Эти биты зарезервированы и должны быть равны 0
11 1 - поддерживаются функции открытия/закрытия устройства (OPEN/CLOSE) для символьных устройств;
0 - функции OPEN/CLOSE для символьных устройств не поддерживаются
12 Зарезервировано, бит должен быть равен 0
13 1 - для символьных устройств поддерживается функция вывода до получения состояния занятости устройства;
0 - функция вывода до состояния занятости не поддерживается
14 1 - поддерживаются функции IOCTL;
0 - функции IOCTL не поддерживаются
15 1 - символьное устройство;
0 - блочное устройство

Блочное устройство

Бит Назначение
0 Зарезервировано, бит должен быть равен 0
1 1 - драйвер поддерживает 32-битовую адресацию сектора (для версий DOS, начиная с 4.00 и более поздних); если установлен этот бит, поле номера сектора всех запросов является двойным словом, добавляемым в конец заголовка запроса, старое поле номера сектора должно содержать -1);
0 - используется 16-битовая адресация сектора
2-5 Эти биты зарезервированы и должны быть равны 0
6 1 - поддерживаются логические устройства (используется блочными драйверами для управления "виртуальными" флоппи-дисками, создаваемые драйвером DRIVER.SYS в DOS версии 3.2 и более поздних версиях);
0 - логические устройства для блочных драйверов не поддерживаются;
7-10 Эти биты зарезервированы и должны быть равны 0
11 1 - единица в этом бите означает, что драйвер поддерживает функцию проверки замены носителя данных в устройстве (например, замены дискеты), используется для DOS версий 3.00 и более поздних;
0 - для блочных устройств функция проверки замены носителя данных не поддерживается
12 Зарезервировано, бит должен быть равен 0
13 1 - драйвер не использует стандартное IBM-устройство, и необходимо выдать запрос на построение блока параметров BIOSBIOS BPB;
0 - используется IBM-устройство
14 1 - поддерживаются функции IOCTL;
0 - функции IOCTL не поддерживаются
15 1 - символьное устройство;
0 - блочное устройство

7.1.10. Заголовок запроса

(0) 1 size Длина запроса в байтах (длина заголовка запроса плюс длина переменной части запроса)
(+1) 1 unit Номер устройства (используется для блочных устройств, указывает, с каким именно устройством, обслуживаемым драйвером, будет работать операционная система)
(+2) 1 cmd Код команды, которую требуется выполнить (может иметь значение от 0 до 18h)
(+3) 2 status Слово состояния устройства, заполняется драйвером перед возвратом управления операционной системе
(+5) 8 reserved Зарезервировано

7.1.11. Слово состояния устройства

Бит Назначение
0-7 Код ошибки устройства (если команда выполнилась с ошибкой и драйвер установил признак ошибки (бит 15) в единицу, то в это поле он должен записать код ошибки).
8 Команда выполнена. Этот бит всегда устанавливается драйвером перед тем, как он возвращает управление операционной системе.
9 Занято. Этот бит устанавливается обработчиком команды, когда физическое устройство занято выполнением предыдущей операции и поэтому не может выполнить требуемую команду. Этот бит используется также для передачи такой информации, как "буфер клавиатуры не пуст", "среда носителя данных заменяемая" (в команде проверки возможности замены среды носителя данных).
10-14 Зарезервировано.
15 Признак ошибки. Устанавливается драйвером, когда он не может обработать запрос или произошла физическая либо логическая ошибка при обработке правильного запроса. Биты 0-7 при этом должны содержать код ошибки.

7.1.12. Коды ошибок

Код Описание
0 Нарушение защиты от записи. Была предпринята попытка записи информации на защищенное от записи устройство.
1 Неизвестное устройство.
2 Устройство не готово.
3 Неизвестная команда. Затребованная команда не поддерживается драйвером.
4 Ошибка CRC. При выполнении команды обнаружена ошибка циклического кода проверки.
5 Неправильная длина запроса. Поле длины в заголовке запроса содержит неверное значение.
6 Ошибка при поиске дорожки (дорожка не найдена).
7 Неизвестный носитель данных.
8 Сектор не найден.
9 Нет бумаги в принтере.
0Ah Ошибка записи.
0Bh Ошибка чтения.
0Ch Общая ошибка.
0Dh Зарезервировано.
0Eh Зарезервировано.
0Fh Неразрешенная замена диска (только для DOS версии 3.0 и более поздних версий).

7.1.13. Блок BPB

(0) 2 sect_siz Количество байтов в одном секторе диска.
(+2) 1 clustsiz Количество секторов в одном кластере.
(+3) 2 res_sect Количество зарезервированных секторов.
(+5) 1 fat_cnt Количество таблиц FAT.
(+6) 2 root_siz Максимальное количество файловых дескрипторов, содержащихся в корневом каталоге диска.
(+8) 2 tot_sect Общее количество секторов на носителе данных (в разделе DOS).
(+10) 1 media Байт-описатель среды носителя данных.
(+11) 2 fat_size Количество секторов, занимаемых одной копией FAT.

7.1.14. Форматы запросов для различных команд

  • 0 - Инициализация
(0) 13 header Заголовок запроса.
(+13) 1 n_units Количество устройств, обслуживаемых драйвером. Это поле заполняется только блочным драйвером.
(+14) 4 end_addr Конечный FAR-адрес резидентной части кода драйвера. В это поле драйвер записывает адрес байта памяти, следующего за той частью кода драйвера, которая должна стать резидентной.
(+18) 4 parm FAR-адрес строки параметров инициализации драйвера из файла CONFIG.SYS. Эта строка содержит все, что находится в строке файла после команды 'DEVICE=', она заканчивается символами перевода строки и возврата каретки 0Ah, 0Dh. При возврате драйвер блочного устройства должен записать в это поле адрес массива указателей на блоки параметров BIOSBIOS (BPB), по одному указателю на каждое устройство, обслуживаемое драйвером.
(+22) 1 drive Номер устройства. Для версии DOS 3.0 и более поздних версий в это поле при загрузке драйвера операционная система заносит номер, назначенный устройству, обслуживаемому драйвером. Например, для устройства А:это 0, для B: - 1 и т.д.
  • 1 - Проверка замены носителя
(0) 13 header Заголовок запроса.
(+13) 1 media В этом поле драйверу передается байт-описатель среды носителя данных, с которым DOS работала раньше.
(+14) 1 reply В это поле драйвер должен поместить ответ о факте замены среды:
1 - диск не заменялся;
0 - неизвестно;
-1 - диск был заменен.
(+15) 4 vol_id Указатель на предыдущую метку тома (если установлен бит 11 слова атрибута устройства и диск был заменен)
  • 2 - Построить блок BPB.
(0) 13 header Заголовок запроса.
(+13) 1 media В этом поле драйверу передается байт-описатель среды носителя данных, с которым DOS работала раньше.
(+14) 4 buf_adr Адрес буфера обмена. Содержимое этого буфера при вызове драйвера зависит от утановки бита 13 слова атрибутов устройства (IBM-формат). Если этот бит равен 0 (устройство формата IBM), буфер содержит первый сектор первой копии FAT. В противном случае указатель установлен на буфер свободного сектора.
(+18) 4 bpb_adr Указатель на новый BPB, записывается в это поле драйвером.
  • 3, 4, 8, 9, 0Ch - Чтение/Запись.
(0) 13 header Заголовок запроса.
(+13) 1 media В этом поле драйверу передается байт-описатель среды носителя данных.
(+14) 4 buf_adr Адрес буфера для передачи данных.
(+18) 2 count Количество передаваемых байтов для символьных устройств или секторов для блочных устройств.
(+20) 2 sector Номер начального сектора, если драйвер использует 16-битовую адресацию секторов или -1 для 32-битовой адресации. Это поле не используется символьными драйверами.
(+22) 4 vol_id Указатель на метку тома в формате ASCIIZ. Возвращается блочным драйвером, если он выставляет ошибку 15 (неправильная смена диска). Это поле должно содержать ссылку на метку требуемого диска.
(+26) 4 sect32 Номер начального сектора, если содержимое поля sector равно -1. Первым идет старшее слово номера сектора. Если обнаружена ошибка с номером 15, в это поле записывается указатель на метку тома.
  • 5 - Неразрушающий ввод.
(0) 13 header Заголовок запроса.
(+13) 1 byte В это поле драйвер записывает извлеченный из буфера байт, который будет считан по следующей команде ввода.
  • 6, 0Ah - Проверит состояние ввода/вывода.

Для команд проверки состояния запрос состоит только из заголовка, область переменного формата отсутствует.

  • 7 - Сброс буфера устройства ввода.
  • 11 - Сброс буфера устройства вывода.

Запрос состоит только из заголовка.

  • 0Dh, 0Eh - Открыть/Закрыть устройство.

Запрос для этих команд состоит только из заголовка.

  • 15 - Проверка сменяемости диска.

Запрос состоит только из заголовка.

  • 19 - Общее управление вводом/выводом (GENERIC_IOCTL).
(0) 13 header Заголовок запроса.
(+13) 1 funct Это поле содержит код функции команды общего IOCTL.
(+14) 1 subfunc Код подфункции для функции funct.
(+15) 2 si_reg Значение регистра SI при вызове функции 44h прерывания 21h. Эта функция DOS предназначена для управления вводом/выводом.
(+17) 2 di_reg Значение, передаваемое при вызове функции 44h прерывания 21h через регистр DI.
(+19) 4 buf Указатель на буфер данных, содержащий управляющую информацию для устройства или предназначенный для приема информации от устройства.
  • 23 - Получить активное логическое устройство.
  • 24 - Установить активное логическое устройство.
(0) 13 header Заголовок запроса.
(+13) 1 unit Код логического устройства, которое должно стать активным при использовании команды 24, или код активного устройства, помещаемый драйвером по команде 23.
(+14) 1 cmd Код команды.
(+15) 4 status Слово состояния.
(+19) 4 reserved Зарезервировано.

7.1.15. Команды драйвера

0 Инициализация
1 Проверка смены носителя данных
2 Построить блок BPB
3 Чтение IOCTL
4 Чтение
5 Неразрушающее чтение
6 Проверка состояния ввода
7 Сброс буферов ввода
8 Запись
9 Запись с проверкой
10 Проверка состояния вывода
11 Сброс буферов вывода
12 Запись IOCTL
13 Открыть устройство
14 Закрыть устройство
15 Проверка возможности смены носителя данных
16 Зарезервировано
17 Зарезервировано
18 Зарезервировано
19 Общее управление вводом/выводом (GENERIC IOCTL)
20 Получить текущее логическое устройство
21 Установить логическое устройство

7.1.16. Коды идентификации типа компьютера

FF оригинальный IBM PC
FE XT, Portable PC
FD PCjr
FC AT
FB XT с памятью 640 К на материнской плате
F9 Convertible PC

7.1.17. Таблица параметров для жестких дисков

+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
¦Тип ¦ Количество  ¦ Количество  ¦ Емкость диска  
¦    ¦ цилиндров   ¦ головок     ¦ в байтах       
+­­­­+­­­­­­­­­­­­­+­­­­­­­­­­­­­+­­­­­­­­­­­­­­­­
¦ 1  ¦ 306         ¦ 4           ¦ 10.653.696 
¦ 2  ¦ 615         ¦ 4           ¦ 21.411.840 
¦ 3  ¦ 615         ¦ 6           ¦ 32.117.760 
¦ 4  ¦ 940         ¦ 8           ¦ 65.454.080 
¦ 5  ¦ 940         ¦ 6           ¦ 49.090.560 
¦ 6  ¦ 615         ¦ 4           ¦ 21.411.840 
¦ 7  ¦ 462         ¦ 8           ¦ 32.169.984 
¦ 8  ¦ 733         ¦ 5           ¦ 31.900.160 
¦ 9  ¦ 900         ¦ 15          ¦ 117.504.000 
¦ 10 ¦ 820         ¦ 3           ¦ 21.411.840 
¦ 11 ¦ 855         ¦ 5           ¦ 37.209.600 
¦ 12 ¦ 855         ¦ 7           ¦ 52.093.440 
¦ 13 ¦ 306         ¦ 8           ¦ 21.307.392 
¦ 14 ¦ 733         ¦ 7           ¦ 44.660.224 
¦ 15 ¦ 0           ¦ 0           ¦ 0 
¦ 16 ¦ 612         ¦ 4           ¦ 21.307.392 
¦ 17 ¦ 977         ¦ 5           ¦ 42.519.040 
¦ 18 ¦ 977         ¦ 7           ¦ 59.526.656 
¦ 19 ¦ 1024        ¦ 7           ¦ 62.390.272 
¦ 20 ¦ 733         ¦ 5           ¦ 31.900.160 
¦ 21 ¦ 733         ¦ 7           ¦ 44.660.224 
¦ 22 ¦ 733         ¦ 5           ¦ 31.900.160 
¦ 23 ¦ 306         ¦ 4           ¦ 10.653.696 
¦ 24 ¦ 977         ¦ 5           ¦ 42.519.040 
¦ 25 ¦ 1024        ¦ 9           ¦ 80.216.064 
¦ 26 ¦ 1224        ¦ 7           ¦ 74.575.872 
¦ 27 ¦ 1224        ¦ 11          ¦ 117.190.656
¦ 28 ¦ 1224        ¦ 15          ¦ 159.805.440
¦ 29 ¦ 1024        ¦ 8           ¦ 71.303.168 
¦ 30 ¦ 1024        ¦ 11          ¦ 98.041.856 
¦ 31 ¦ 918         ¦ 11          ¦ 87.892.992 
¦ 32 ¦ 925         ¦ 9           ¦ 72.460.800 
¦ 33 ¦ 1024        ¦ 10          ¦ 89.128.960 
¦ 34 ¦ 1024        ¦ 12          ¦ 106.954.752
¦ 35 ¦ 1024        ¦ 13          ¦ 115.867.648
¦ 36 ¦ 1024        ¦ 14          ¦ 124.780.544
¦ 37 ¦ 1024        ¦ 2           ¦ 17.825.792 
¦ 38 ¦ 1024        ¦ 16          ¦ 142.606.336
¦ 39 ¦ 918         ¦ 15          ¦ 119.854.080
¦ 40 ¦ 820         ¦ 6           ¦ 42.823.680 
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­---- 


7.1.18. Параметры флоппи-дисков

+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
¦Тип¦Емкость,¦Диаметр,¦Количество секторов¦Количество¦
¦   ¦Кбайтов ¦дюймы   ¦на одну дорожку    ¦цилиндров ¦
+­­­+­­­­­­­­+­­­­­­­­+­­­­­­­­­­­­­­­­­­­+­­­­­­­­­­¦
¦ 1 ¦ 360    ¦  5     ¦        9          ¦     40   ¦
¦ 2 ¦ 1200   ¦  5     ¦        15         ¦     80   ¦
¦ 3 ¦ 720    ¦  3     ¦        9          ¦     40   ¦
¦ 4 ¦ 1440   ¦  3     ¦        18         ¦     80   ¦
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+


7.1.19. Таблица параметров дискеты

  1. 1 srt_hut
Биты 0...3 - SRT (Step Rate Time) - задержка 
для переключения головок, лежит в пределах 1-16 мс и задается 
с интервалом 1 мс (0Fh - 1mc, 0Eh - 2 mc, 0Dh - 3 mc, ...);
биты 4...7 - задержки разгрузки головки, лежит в пределах 16-240 мс 
и задается с интервалом 16 мс (1 - 16 mc, 2 - 32 mc, ..., 0Fh - 240 mc).

(+1)     1      dma_hlt
Бит 0 - значение этого бита, равное 1, говорит о том, что используется 
прямой доступ к памяти (DMA);
биты 2...7 - время загрузки головок HLT_- интервал между сигналом загрузки 
головок и началом операции чтение/запись, лежит в пределах 2-254 мс 
и задается с интервалом 2 мс (1 - 2 mc, 2 - 4 mc, ..., 0FFh - 254 mc).

(+2)     1      motor_w
Задержка перед выключением двигателя.

(+3)     1      sec_size
Код размера сектора в байтах (0 - 128 байтов, 1 - 256, 2 - 512, 3 - 1024).

(+4)     1      eot
Номер последнего сектора на дорожке

(+5)     1      gap_rw
Длина межсекторного промежутка для чтения/записи.

(+6)     1      dtl
Максимальная длина передаваемых данных, используется когда не задана длина сектора.

(+7)     1      gap_f
Длина межсекторного промежутка для опрации форматирования.

(+8)     1      fill_char
Байт-заполнитель для форматирования (обычно используется F6h).

(+9)     1      hst
Время установки головки в миллисекундах.

(+10) 1 mot_start
Время запуска двигателя в 1/8 долях секунды.


7.1.20. Таблица параметров жесткого диска

  1. 2 max_cyl
Максимальное количество цилиндров на диске.

(+2)     1      max_head        
Максимальное количество магнитных головок.

(+3)     2      srwcc   
Начальный цилиндр для предварительной записи (Starting reduced-write current cylinder).

(+5)     2      swpc            
Начальный цилиндр для предварительной компенсации при записи 
(Starting write precompensation cylinder).

(+7)     1      max_ecc 
Максимальная длина блока коррекции ошибок ECC (Maximum ECC data burst length).

(+8)     1      dstopt  
Опции устройства:
бит 7 - запрет восстановления;
бит 6 - запрет восстановления по блоку коррекции ошибок ECC (Error Correction Code);
биты 2-0 - опции устройства.

(+9)     1      st_del  
Стандартная величина задержки.

(+10) 1 fm_del  
Величина задержки для форматирования диска.

(+11) 1 chk_del 
Величина задержки для проверки диска.

(+12) 4 reserve 
Зарезервировано.


7.1.21. Команды контроллера НГМД

Команда Байты команды

Чтение  +­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
данных  ¦MT ¦MFM¦SK ¦ 0 ¦ 0 ¦ 1 ¦ 1 ¦ 0 ¦
        +­­­+­­­+­­­+­­­+­­­+­­­+­­­+­­­¦
        ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦HDS¦DS1¦DS0¦
        +­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+

Чтение удаленных    +­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
данных              ¦MT ¦MFM¦SK ¦ 0 ¦ 1 ¦ 1 ¦ 0 ¦ 0 ¦
                    +­­­+­­­+­­­+­­­+­­­+­­­+­­­+­­­¦
                    ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦HDS¦DS1¦DS0¦
                    +­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+

Запись  +­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
данных  ¦MT ¦MFM¦ 0 ¦ 0 ¦ 0 ¦ 1 ¦ 0 ¦ 0 ¦
        +­­­+­­­+­­­+­­­+­­­+­­­+­­­+­­­¦
        ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦HDS¦DS1¦DS0¦
        +­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+

Запись удаленных  +­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
данных            ¦MT ¦MFM¦ 0 ¦ 0 ¦ 1 ¦ 0 ¦ 0 ¦ 1 ¦
                  +­­­+­­­+­­­+­­­+­­­+­­­+­­­+­­­¦
                  ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦HDS¦DS1¦DS0¦
                  +­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+

Чтение данных     +­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
с дорожки         ¦MT ¦MFM¦SK ¦ 0 ¦ 0 ¦ 0 ¦ 1 ¦ 0 ¦
                  +­­­+­­­+­­­+­­­+­­­+­­­+­­­+­­­¦
                  ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦HDS¦DS1¦DS0¦
                  +­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+

Сканирование до  +­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
"равно"          ¦MT ¦MFM¦SK ¦ 1 ¦ 0 ¦ 0 ¦ 0 ¦ 1 ¦
                 +­­­+­­­+­­­+­­­+­­­+­­­+­­­+­­­¦
                 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦HDS¦DS1¦DS0¦
                 +­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+

Сканирование до  +­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
"меньше" или     ¦MT ¦MFM¦SK ¦ 1 ¦ 1 ¦ 0 ¦ 0 ¦ 1 ¦
"равно"          +­­­+­­­+­­­+­­­+­­­+­­­+­­­+­­­¦
                 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦HDS¦DS1¦DS0¦
                 +­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+

Сканирование до  +­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
"больше" или     ¦MT ¦MFM¦SK ¦ 1 ¦ 1 ¦ 1 ¦ 0 ¦ 1 ¦
"равно"          +­­­+­­­+­­­+­­­+­­­+­­­+­­­+­­­¦
                 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦HDS¦DS1¦DS0¦
                 +­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+

Форматирование   +­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
дорожки          ¦ 0 ¦MFM¦ 0 ¦ 0 ¦ 1 ¦ 1 ¦ 0 ¦ 1 ¦
                 +­­­+­­­+­­­+­­­+­­­+­­­+­­­+­­­¦
                 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦HDS¦DS1¦DS0¦
                 +­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+

Считывание       +­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
индексных        ¦ 0 ¦MFM¦ 0 ¦ 0 ¦ 1 ¦ 0 ¦ 1 ¦ 1 ¦
данных           +­­­+­­­+­­­+­­­+­­­+­­­+­­­+­­­¦
                 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦HDS¦DS1¦DS0¦
                 +­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+

Инициализация    +­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
                 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 1 ¦ 1 ¦ 1 ¦
                 +­­­+­­­+­­­+­­­+­­­+­­­+­­­+­­­¦
                 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 1 ¦ 0 ¦
                 +­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+

Чтение состояния +­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
прерывания       ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 1 ¦ 0 ¦ 0 ¦ 0 ¦
                 +­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+

Определить       +­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
параметры        ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 1 ¦ 1 ¦
                 +­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+

Чтение           +­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
состояния        ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 1 ¦ 0 ¦ 0 ¦
накопителя       +­­­+­­­+­­­+­­­+­­­+­­­+­­­+­­­¦
                 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦HDS¦DS1¦DS0¦
                 +­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+

Поиск            +­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
                 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 1 ¦ 1 ¦ 1 ¦ 1 ¦
                 +­­­+­­­+­­­+­­­+­­­+­­­+­­­+­­­¦
                 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦HDS¦DS1¦DS0¦
                 +­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+



Байты параметров, которые должны следовать за командами и байты результата, которые процессор должен считать после выполнения команды:

Команда               Байты                Байты
                      параметров           результата
Чтение данных         C, H, R, N, EOT,     ST0, ST1, ST2,
                      EOT, GPL, DTL        C, H, R, N
Чтение удаленных
данных

Запись данных

Запись удаленных
данных

Чтение данных
с дорожки

Сканирование до
"равно"

Сканирование до
"меньше" или
"равно"

Сканирование до
"больше" или
"равно"
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

Форматирование        N, SC, GPL, D        ST0, ST1, ST2,
дорожки               C, H, R, N


Чтение индексных      отсутствуют          ST0, ST1, ST2,
данных                C, H, R, N


Инициализация         отсутствуют          отсутствуют


Чтение состояния      отсутствуют          ST0, PCN
прерывания


Определить            1 байт:              отсутствуют
параметры              мл. тетрада - HUT
                       ст. тетрада - SRT
                      2 байт:
                       бит 0       - ND
                       биты 1-7    - HLT


Чтение состояния      отсутствуют          ST3
накопителя


Поиск                 C                    отсутствуют


7.1.22. Регистры состояния контроллера

Формат регистра ST0:

Биты    Название        Назначение
1, 0    US1, US2        Эти биты содержат код накопителя при
                        прерывании.

2       HD              Номер головки.

3       NC              Накопитель не готов, устанавливается,
                        если накопитель не готов выполнить
                        команду чтения или записи.

4       EC              Сбой оборудования

5       SE              Завершена команда "Поиск"

7, 6    I, C            Код прерывания:
                          00 - нормальное завершение;
                          01 - аварийное завершение;
                          10 - некорректная команда
                          11 - нет готовности дисковода.

Формат регистра ST1:

Биты    Название        Назначение
0       MA              Пропуск адресной метки. Этот бит
                        устанавливается в 1, если контроллер
                        не может найти адресную метку

1       NN              Защита записи, устанавливается , если
                        при выполнении операции контроллер
                        получает от дисковода сигнал защиты
                        записи.

2       ND              Не найден сектор.
 
3       -               Зарезервирован

4       OR              Переполнение, процессор не успевает
                        выполнять обмен данными с контроллером

5       DE              Ошибка в данных при проверке
                        контрольной суммы

6       -               Зарезервирован.

7       EN              Несуществующий сектор, устанавливается,
                        когда контроллер пытается прочесть
                        сектор с адресом, большим
                        существующего.

Формат регистра ST2:

Биты    Название        Назначение
0       MD              Пропущен адресный маркер в поле данных.

1       BC              Нечитающаяся дорожка.

2       SN              Ошибка сканирования. Устанавливается,
                        если при выполнении команды
                        сканирования контроллер не может
                        найти требуемую дорожку.

3       SH              Сканирование выполнено, дорожка
                        найдена.

4       WC              Ошибка адреса дорожки.

5       DD              Ошибка в поле данных.

6       CM              Во время операции чтения или 
                        сканирования не обнаружен сектор с
                        с маркером удаленных данных.

7       -               Зарезервирован.


Формат регистра ST3:

Биты    Название        Назначение
1, 0    US1, US2        Код выбранного дисковода.

2       HD              Номер выбранной головки.

3       TS              Используется режим двухсторонней
                        записи.

4       T0              Головка установлена на дорожку 0.

5       RDY             Дисковод готов к работе.

6       WP              Защита записи на диске.

7       FT              Неисправность дисковода.


В форматах команд и таблицах используются следующие обозначения:

MT двухсторонняя операция
MFM двойная/одинарная плотность записи
SK пропуск удаленных данных
HDS номер головки для двухстороннего накопителя
DS1, DS0 номер выбираемого накопителя
C номер цилиндра
H номер головки для двухстороннего накопителя
R номер сектора
N число байтов в секторе
EOT номер последнего сектора на дорожке
GPL размер промежутка
DTL число считываемых/записываемых байтов
SC число секторов в цилиндре
D данные
PCN номер цилиндра после выполнения команды
чтения состояния прерывания  
SRT время шага, мс
HUT время разгрузки головки
HLT время загрузки головки
ND режим прерывания
NCN номер цилиндра после поиска

7.1.23. Код ошибки при работе с диском на уровне BIOS

00h Успешное завершение операции
01h Неправильная команда
02h Не найдена адресная метка
03h Попытка записи на диск, защищенный от записи
04h Сектор не найден
05h Ошибка при сбросе (НМД)
06h Произошла замена дискеты
07h Неправильные параметры дисковода (НМД)
08h Переполнение канала ПДП (НГМД)
09h Переход за границу 64К при работе с ПДП
0Ah Обнаружен плохой сектор (НМД)
0Bh Обнаружена плохая дорожка (НМД)
0Ch Неправильный номер дорожки
0Dh Неправильный номер сектора при форматировании (НМД)
0Eh Обнаружена адресная метка управляющих данных (НМД)
0Fh Ошибка ПДП (НМД)
10h Обнаружена ошибка в CRC/ECC
11h Данные скорректированы с использованием ECC (НМД)
20h Сбой контроллера
40h Сбой при поиске дорожки
80h Таймаут - программа не успевает обрабатывать данные
AAh Дисковод не готов (НМД)
BBh Неизвестная ошибка (НМД)
CCh Сбой при записи (НМД)
E0h Ошибка регистра состояния (НМД)
FFh Ошибка операции считывания (НМД)

7.1.24. Формат первого сектора жесткого диска

Смещение        Размер  Содержимое
(+0)            1BEh    Загрузочная запись - программа,
                        которая загружается и выполняется
                        во время начальной загрузки
                        операционной системы
(+1BEh) 10H             Элемент таблицы разделов диска
(+1CEh) 10H             Элемент таблицы разделов диска
(+1DEh) 10H             Элемент таблицы разделов диска
(+1EEh) 10H             Элемент таблицы разделов диска
(+1FEh) 2               Признак таблицы разделов - 55AAh


7.1.25. Элементы таблицы разделов диска

Смещение        Размер  Содержимое
(+0)            1       Признак активного раздела:
                           0 - раздел не активный;
                           80h - раздел активный.
(+1)            1       Номер головки для начального сектора
                        раздела.
(+2)            2       Номер сектора и цилиндра для начального
                        сектора раздела в формате функции чтения
                        сектора INT_13h.
(+4)            1       Код системы:
                          0 - неизвестная система;
                          1, 4 - DOS;
                          5 - расширенный раздел DOS.
(+5)            1       Номер головки для последнего сектора
                        раздела.
(+6)            2       Номер сектора и цилиндра для последнего
                        сектора раздела в формате функции чтения
                        сектора INT_13h.
(+8)            4       Относительный номер сектора начала
                        раздела.
(+12)           4       Размер раздела в секторах.


7.1.26. Формат записи BOOT для DOS версий до 4.0

Смещение        Размер  Содержимое
(+0)            3       Команда JMP xxxx - переход типа NEAR на
                        программу начальной загрузки
(+3)            8       Название фирмы-производителя
                        операционной системы и версия,
                        например: "IBM  4.0"
(+11)   13              BPB - блок параметров BIOS
(+24)   2               Количество секторов на дорожке
(+26)   2               Количество головок (поверхностей диска)
(+28)   2               Количество скрытых секторов, эти сектора
                        могут использоваться для схемы 
                        разбиения физического диска на разделы

7.1.27. Формат BPB Для DOS версий до 4.0

(0)      2      sect_siz        Количество байтов в одном секторе диска.
(+2)     1      clustsiz        Количество секторов в одном кластере.
(+3)     2      res_sect        Количество зарезервированных секторов.
(+5)     1      fat_cnt         Количество таблиц FAT.
(+6)     2      root_siz        Максимальное количество дескрипторов файлов, 
                                содержащихся в корневом каталоге диска.
(+8)     2      tot_sect        Общее количество секторов на носителе данных 
                               (в разделе DOS).
(+10) 1 media                   Байт-описатель среды носителя данных.
(+11) 2 fat_size                Количество секторов, занимаемых одной 
                                копией FAT.

7.1.28. Формат BOOT-сектора для MS-DOS версии 4.0

Смещение        Размер  Содержимое
(+0)            3       Команда JMP xxxx - переход типа NEAR на
                        программу начальной загрузки
(+3)            8       Название фирмы-производителя
                        операционной системы и версия,
                        например: "IBM  4.0"
(+11)   25              Extended BPB - расширенный блок
                        параметров BIOS
(+36)   1               Физический номер дисковода (0 -флоппи,
                        80h - жесткий диск)
(+37)   1               Зарезервировано
(+38)   1               Символ ')' - признак расширенной
                        загрузочной записи DOS 4.0
(+39)   4               Серийный номер диска (Volume Serial
                        Number), создается во время
                        форматирования диска
(+43)   11              Метка диска (Volume Label)
(+54)   8               Зарезервировано, обычно содержит
                        запись типа 'FAT12   ', которая
                        идентифицирует формат таблицы размещения
                        файлов FAT

7.1.29. Расширенный блок параметров BIOS

  1. 2 sect_siz
Количество байтов в одном секторе диска.

(+2)     1      clustsiz        
Количество секторов в одном кластере.

(+3)     2      res_sect        
Количество зарезервированных секторов.

(+5)     1      fat_cnt 
Количество таблиц FAT.

(+6)     2      root_siz        
Максимальное количество дескрипторов файлов, содержащихся в корневом каталоге диска.

(+8)     2      tot_sect        
Общее количество секторов на носителе данных (в разделе DOS).

(+10) 1 media   
Байт-описатель среды носителя данных.

(+11) 2 fat_size        
Количество секторов, занимаемых одной копией FAT.

--------------- Расширение стандартного BPB --------------

(+13) 2 sectors 
Количество секторов на дорожке

(+15) 2 heads   
Количество магнитных головок

(+17) 2 hidden_l        
Количество скрытых секторов для раздела, который по размеру меньше 32 мегабайтов.

(+19) 2 hidden_h        
Количество скрытых секторов для раздела, превышающего 
по размеру 32 мегабайта. (Только для DOS 4.0).

(+21) 4 tot_secs        
Общее количество секторов на логическом диске для раздела, 
превышающего по размеру 32 мегабайта.

7.1.30. Байт-описатель среды media

FFh - 2 стороны, 8 секторов на дорожке;
FEh - 1 сторона, 8 секторов на дорожке;
FDh - 2 стороны, 9 секторов на дорожке;
FCh - 1 сторона, 9 секторов на дорожке;
F9h - 2 стороны, 15 секторов на дорожке;
F8h - жесткий диск.


7.1.31. Обозначение кластеров в FAT

FAT12           FAT16           Что означает
000h            0000h           Свободный кластер
ff0h - ff6h     fff0h - fff6h   Зарезервированный кластер
ff7h            fff7h           Плохой кластер
ff8h - fffh     fff8h - ffffh   Последний кластер в списке
002h - fefh     0002h - ffefh   Номер следующего кластера
                                в списке

7.1.32. Формат дескриптора файла

Смещение        Размер  Содержимое
(+0)            8       Имя файла или каталога, выравненное
                        на левую границу и дополненное пробелами.
(+8)            3       Расширение имени файла, выравненное 
                        на левую границу и дополненное пробелами.
(+11)   1               Атрибуты файла.
(+12)   10              Зарезервировано.
(+22)   2               Время создания файла или время 
                        его последней модификации.
(+24)   2               Дата создания файла или дата 
                        его последней модификации.
(+26)   2               Номер первого кластера, распределенного файлу.
(+28)   4               Размер файла в байтах.

7.1.33. Байт атрибутов файла

0 Файл предназначен только для чтения, в этот файл нельзя писать и его нельзя стирать.
1 Скрытый файл, этот файл не будет появляться в списке файлов, создаваемом командой операционной системы DIR.
2 Системный файл. Этот бит обычно установлен в файлах, являющихся составной частью операционной системы.
3 Данный дескриптор описывает метку диска. Для этого дескриптора поля имени файла и расширения имени файла должны рассматриваться как одно поле длиной 11 байт. Это поле содержит метку диска.
4 Дескриптор описывает файл, являющийся подкаталогом данного каталога.
5 Флаг архивации. Если этот бит установлен в 1, это означает, что данный файл не был выгружен утилитой архивации (например, программой BACKUP).
6-7 Зарезервированы.
   

7.1.34. Формат поля времени

15            11 10               5 4                   0
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
¦ Часы (0...23) ¦  Минуты (0...59) ¦  Секунды/2 (0...29) ¦
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+


7.1.35. Формат даты обновления файла

15             9 8               5 4              0
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
¦ Год (0...119) ¦  Месяц (1...12) ¦  День (1...31) ¦
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+


7.1.36. Формат блока DDCB для версий 2.х и 3.х

  1. 1 drv_num
номер устройства 
(0 соответствует устройству А, 1 - В и т.д.)

(+1)     1      drv_numd        
дополнительный номер устройства внутри драйвера

(+2)     2      sec_size        
размер сектора в байтах

(+4)     1      clu_size        
число, на единицу меньшее количества секторов в кластере

(+5)     1      clu_base        
если содержимое этого поля не равно нулю, то для получения общего числа 
секторов в кластере надо возвести 2 в степень clu_base и получившееся 
число прибавить к clu_size

(+6)     2      boot_siz        
количество зарезервированных секторов (boot-сектора, начало корневого каталога)

(+8)     1      fat_num 
количество копий FAT

(+9)     2      max_dir 
максимальное число дескрипторов файлов в корневом каталоге (т.е. максимальное 
число файлов, которое может содержать корневой каталог на этом устройстве)

(+11) 2 data_sec        
номер первого сектора данных на диске (номер сектора, соответствующего 
кластеру номер 2)

(+13) 2 hi_clust        
максимальное количество кластеров (равно увеличенному на 1 количеству 
кластеров данных)

(+15) 1 fat_size        
количество секторов, занимаемых одной копией FAT

(+16) 2 root_sec        
номер первого сектора корневого каталога

(+18) 4 drv_addr        
FAR-адрес заголовка драйвера, обслуживающего данное устройство

(+22) 1 media   
байт описания среды носителя данных

(+23) 1 acc_flag        
флаг доступа, 0 означает, что к устройству был доступ

(+24) 4 next            
адрес следующего блока DDCB, для последнего блока в поле смещения 
находится число FFFF

--------------- только для DOS 2.x -----------------

(+28) 2 dir_clu 
номер начального кластера текущего каталога (0 для корневого каталога)

(+30) 64        dir_path        
строка в формате ASCIIZ, содержащая путь к текущему каталогу

--------------- DOS 3.х ----------------------------

(+28) 2 reserv1 
зарезервироано, обычно равно 0

(+30) 2 built   
число FFFF в этом поле означает, что блок DDCB был построен


7.1.37. Формат блока DDCB для DOS версии 4.х

  1. 1 drv_num
номер устройства 
(0 соответствует устройству А, 1 - В и т.д.)

(+1)     1      drv_numd        
дополнительный номер устройства внутри драйвера

(+2)     2      sec_size        
размер сектора в байтах

(+4)     1      clu_size        
число, на единицу меньшее количества секторов в кластере

(+5)     1      clu_base        
если содержимое этого поля не равно нулю, то для получения общего числа 
секторов в кластере надо возвести 2 в степень clu_base и получившееся 
число прибавить к clu_size

(+6)     2      boot_siz        
количество зарезервированных секторов (boot-сектора, начало корневого каталога)

(+8)     1      fat_num 
количество копий FAT

(+9)     2      max_dir 
максимальное число дескрипторов файлов в корневом каталоге (т.е. максимальное 
число файлов, которое может содержать корневой каталог на этом устройстве)

(+11) 2 data_sec        
номер первого сектора данных на диске (номер сектора, соответствующего 
кластеру номер 2)

(+13) 2 hi_clust        
максимальное количество кластеров (равно увеличенному на 1 количеству 
кластеров данных)

(+15) 1 fat_size        
количество секторов, занимаемых одной копией FAT

(+16) 1 reserv1 
зарезервировано

(+17) 2 root_sec        
номер первого сектора корневого каталога

(+19) 4 drv_addr        
FAR-адрес заголовка драйвера, обслуживающего данное устройство

(+23) 1 media   
байт описания среды носителя данных

(+24) 1 acc_flag        
флаг доступа, 0 означает, что к устройству был доступ

(+25) 4 next            
адрес следующего блока DDCB, для последнего блока в поле смещения 
находится число FFFF

(+29) 2 reserv2 
зарезервироано

(+31) 2 built   
число FFFF в этом поле означает, что блок DDCB был построен


7.1.38. Идентификатор BIOS

F000:FFF5 (8)   - дата изготовления BIOS;
F000:FFFC (2)   - не используется;
F000:FFFE (1)   - код типа компьютера.


[Назад] [Содеожание]