Для вариантов №1 и №8, Лабораторной работы №2 – «Определить наличие и тип установленного в системе накопителя на жестких магнитных дисках (НЖМД)» и «Определить количество и тип установленных накопителей на гибких магнитных дисках (НГМД)» соответственно.
(слайд №16)
Данное прерывание может быть использовано в указанных вариантах лабораторных работ в качестве демонстрации дополнительных возможностей работы с дисками.
Int 13h используется для работы с дисковыми устройствами ПЭВМ. Многочисленные функции прерывания INT 13h выполняют все операции по вводу/выводу на диски.
Отметим, что:
1. код функции всегда заносится в регистр AH;
2. для функций, требующих в качестве параметра номер устройства, нумерация дисководов для гибких дисков начинается с 0, нумерация жестких дисков начинается с 80h;
3. номер цилиндра жесткого диска кодируется в 10-битном виде (в регистре CН - младшая часть, в регистре CL - 2 старших бита номера цилиндра в битах 6 и 7);
4. результаты выполнения последней команды контроллера после вызова любой функции данного прерывания, обращающейся к диску, вы можете найти в буфере по адресу 0:442h. Длина буфера - 7 байт;
5. коды возврата последней выполнявшейся функции с жесткими дисками, возвращаемые обычно в регистре AH, записываются так же в байты по адресу 0:474 и могут быть после этого возвращены вызовом функции 01h.
6. стандартный BIOS XT выполняет только функции с 0 по 5 и предназначен для работы с накопителями на гибких дисках; для обслуживания запросов к жестким дискам на плате контроллера жестких дисков имеется расширенный BIOS (BIOS XT), который при выполнении процедуры инициализации, вызываемой в процессе сканирования ПЗУ, переписывает адрес стандартного обработчика INT 13h по адресу 0:100h и вызывает его при необходимости выполнения запроса к НГМД командой INT 40h;
7. расширенный BIOS XT выполняет функции с 0 по 14h;
8. при выполнении функций, требующих обмена с диском, следует разместить буфер для обмена в памяти таким образом, чтобы он не пересекал границу 64-Кбайтной страницы ПДП, иначе попытка обмена будет безуспешной;
9. для AT, XT-286, PC Convertible и PS/2 перед выполнением любой операции с диском BIOS выполняет вызов INT 15h, функция 90h ("устройство занято") с типом устройства 00h для жестких дисков. После завершения операции с диском BIOS выполняет вызов INT 15h, функция 91h - "обработка прерывания завершена".
10. для определения конкретных параметров накопителей BIOS берет информацию о них из таблиц параметров; на таблицу параметров первого жесткого диска вектор 41h, на таблицу параметров второго жесткого диска вектор 46h; конкретное содержание таблиц параметров жестких дисков зависит от типа диска.
Функции прерывания INT 13h:
00h
| Сброс дисковой подсистемы
| Эта функция выполняет установку в исходное состояние всей дисковой системы или выбранного дискового устройства. Используется обычно перед началом работы с устройством.
|
01h
| Получить состояние дисковой подсистемы
| Эта функция позволяет проверить результат выполнения предыдущей операции. Если операция завершилась аварийно, при помощи этой функции можно определить код ошибки.
|
02h
| Чтение сектора
| Выполняется чтение секторов в оперативную память компьютера или запись информации из памяти в сектора диска.
Сектор задается для выбранных устройства, дорожки и головки. Программа должна также задать количество читаемых/записываемых секторов.
|
03h
| Запись сектора
|
04h
| Проверка сектора
| Функция проверяет сектора на правильность циклической контрольной суммы, CRC (Cyclic Redundancy Check); записи содержимого секторов в память не происходит.
|
05h
| Форматирование дорожки
| Функция форматирования предназначена для начального формирования структуры дорожки диска, она разрушает все имеющиеся на дорожке данные. С помощью функции 05 вы можете за один раз отформатировать только одну дорожку с указанным номером.
Для этой функции необходимо задать два параметра - фактор чередования и буфер формата.
|
06h
| Форматирование дорожки (НМД)
| Функция форматирования дорожки с кодом 6 предназначена только для НМД и устанавливает флаг плохого сектора. Буфер формата подготавливается аналогично функции 5.
|
07h
| Форматирование диска (НМД)
| Функция форматирования с кодом 7 предназначена для форматирования целого диска начиная с определенной дорожки. Буфер формата подготавливается аналогично функции 5.
|
08h
| Получить текущие параметры дисковода (НМД)
| С помощью этой функции программа может определить тип дисковода, количество дисководов, обслуживаемых первым дисковым контроллером и другие параметры дисковода, которые нужны программе для организации доступа к диску на физическом уровне. Тип дисковода, возвращаемый в регистре BL, может принимать следующие значения:
|
09h
| Инициализация таблиц параметров жесткого диска
| Функцию инициализации контроллера НМД применяют после модификации таблиц параметров жесткого диска. BIOS BIOS узнает о внесенных в таблицы изменениях и инициализирует соответствующим образом контроллер НМД.
|
0Ah
| Чтение длинное (НМД)
| Функция "Чтение секторов длинное" отличается от обычной функции чтения (код 02h) тем, что она дополнительно считывает в буфер данных 4 байта кода коррекции ошибки (ECC).
|
0Bh
| Запись длинная (НМД)
| Функция "Запись секторов длинная" отличается от обычной функции записи (код 03h) тем, что она дополнительно записывает на диск из буфера данных 4 байта кода коррекции ошибки (ECC).
|
0Ch
| Поиск цилиндра (НМД)
| С помощью функции 0Ch программа может подвести головки к дорожке с заданным номером. Функции чтения/записи секторов не требуют предварительного поиска дорожки, они выполняют поиск сами.
|
0Dh
| Альтернативный сброс дисковода (НМД)
| Вы можете использовать эту функцию для сброса контроллера вместо функции с кодом 00h. В отличие от функции сброса дисковой подсистемы с кодом 00h эта функция не влияет на контроллер НГМД, она сбрасывает только контроллер накопителя на жестком магнитном диске.
|
0Eh
| Чтение буфера сектора (НМД)
| Контроллеры НМД в компьютерах PC и XT содержат внутренний буфер данных. С помощью функции 0Eh программа может прочитать содержимое этого буфера в оперативную память. Чтения данных с диска при этом не происходит. В основном функция чтения буфера используется для диагностики дискового контроллера.
|
0Fh
| Запись буфера сектора (НМД)
| Функция полностью аналогична предыдущей, за исключением того, что происходит не чтение, а запись данных из оперативной памяти в буфер контроллера. Она может быть использована для инициализации содержимого буфера сектора перед форматированием диска функцией 05h прерывания INT 13h.
|
10h
| Проверка готовности дисковода (НМД)
| О готовности дисковода можно судить по байту состояния, передаваемому функцией в регистре AH. Этот байт аналогичен возвращаемому в регистре AH функцией 01h.
|
11h
| Рекалибровка дисковода (НМД)
| Вызов функции приводит к позиционированию головок выбранного дисковода на нулевую дорожку. Дополнительно в регистре AH возвращается байт состояния дисковода.
|
12h
| Проверка памяти контроллера (НМД)
| Эта функция предназначена для запуска встроенной диагностики дискового контроллера, она проверяет внутренний буфер сектора и возвращает байт состояния.
|
13h
| Проверка дисковода (НМД)
| Функция используется для запуска внутренней диагностики контроллера.
|
14h
| Проверка контроллера (НМД)
| Функция запускает внутреннюю диагностику контроллера.
|
15h
| Получить тип дисковода
| Возвращаемый этой функцией тип дисковода может принимать значения от 0 до 3. С помощью этой функции программа может определить тип диска и возможность обнаружения замены магнитного носителя (дискеты).
|
16h
| Проверка замены диска
| В некоторых случаях замена дискеты нежелательна до выполнения определенных действий (мы говорили об этом при обсуждении драйверов дисковых устройств). С помощью этой функции программа может убедиться в том, что в дисководе установлена все та же дискета, что и в начале цикла операций. Если дискета была по ошибке заменена раньше времени, программа может потребовать установить старую дискету для завершения работы с ней.
|
17h
| Установка типа дискеты
| Функцию установки типа дискеты необходимо использовать перед началом работы с дискетой. Устанавливаемый тип может принимать значения от 0 до 4. Если перед вызовом этой функции был установлен флаг замены дискеты, то он сбрасывается. Дополнительно BIOS устанавливает скорость передачи данных через контроллер НГМД в зависимости от типа дискеты.
|
18h
| Установка среды носителя данных для форматирования
| Эта функция должна быть вызвана перед использованием функции 05h форматирования диска для установки правильной скорости передачи данных через дисковый контроллер. Дополнительно функция сбрасывает флаг замены дискеты (если этот флаг установлен).
|
19h
| Парковка головок (НМД)
| Парковка головок - это их установка в нерабочую область, т.е. на нерабочую дорожку. Эту операцию обычно выполняют перед транспортировкой компьютера для исключения повреждения дисковода.
|
1Ah
| Форматирование диска (ESDI НМД)
| Эта функция форматирования жесткого диска предназначена для НМД, используемого совместно с контроллером ESDI. Она поддерживает таблицу дефектных дорожек и имеет несколько режимов форматирования в зависимости от содержимого регистра CL при вызове.
|
Рассмотрим некоторые функции более подробно:
(слайд №17)