РефератыИнформатикаПрПрерывание BIOS

Прерывание BIOS

INT 13H: Дисковый ввод-вывод


Этот сервис предоставляет прямой доступ к адаптерам дискеты и твердого диска.


Рекомендуется там, где это возможно, использовать INT 25H
и INT 26H
(INT 25H/26H
– прямая дисковая операция чтения/записи:


INT 25H
читает секторы


INT 26H
записывает секторы), чтобы предоставить драйверам устройств DOS выполнять всю низкоуровневую обработку. Разумеется, для таких операций, как форматирование диска или установка защиты от копирования, прерывание INT 13H может оказаться единственной альтернативой.


Подфункции:


(Подфункции > 8 - только для твердых дисков)


00H
сброс контроллера 0aH
длинное чтение


01H
дать статус 0bH
длинная запись


02H
читать секторы 0cH
искать цилиндр


03H
писать секторы 0dH
альтернативный сброс


04H
верификация


05H
форматировать дорожку


08H
дать параметры диска


09H
инициализировать параметры диска


10H
проверить готовность


11H
рекалибрация


14H
диагностика


15H
дать тип диска


16H
изменить статус


17H
установить тип диска


AH
Сервис


___ ____________________________________________________________________________


00H
Сброс устройства. Вызывает рекалибрацию контроллера.


Если DL равен 80H или 81H, выполнен сброс контроллера твердого диска.


___ ____________________________________________________________________________


01H
Дать статус ошибки последней операции.


Вход: DL = диск. DL < 80H = дискета; DL > 7FH = твердый диск


Выход: AL содержит код ошибки диска

(то же, что значение по адресу 0:0441)


___ ____________________________________________________________________________


02H
Читать секторы


Вход: DL = номер диска (0=диск A...;80H=твердый диск 0;81H=твердый диск 1)


DH = номер головки чтения/записи


CH = номер дорожки (цилиндра)(0-n) ◄╗


CL = номер сектора (1-n) ◄══════╩═ См. замечание ниже.


AL = число секторов (в сумме не больше чем один цилиндр)


ES:BX => адрес буфера вызывающей программы


0:0078 => Таблица параметров дискеты (для гибких дисков)


0:0104 => Таблица параметров твердого диска (для твердых дисков)


Выход: Carry-флаг=1 при ошибке и код ошибки диска в AH.


ES:BX буфер содержит данные, прочитанные с диска


Замечание:

на сектор и цилиндр отводится соответственно 6 и 10 бит:


1 1 1 1 1 1


╓5┬4┬3┬2┬1┬0┬9┬8╥7┬6┬5┬4┬3┬2┬1┬0╗


CX: ║c c c c c c c c C c S s s s s s║


╚-┴-┴-┴-┴-┴-┴-┴-╨-┴-┴-┴-┴-┴-┴-┴-╝


╚═╩═══► исп. как старшие биты номера цилиндра


___ ____________________________________________________________________________


03H
Писать секторы


Вход: (аналогично подфункции 02H)


ES:BX => данные, записываемые на диск.


Выход: Carry-флаг=1 при ошибке и код ошибки диска в AH.


___ ____________________________________________________________________________


04H
Проверить секторы. Проверяет CRC для указанных секторов на ошибки.


Вход: (аналогично подфункция 02H. ES:BX лучше также предоставить)


Выход: Carry-флаг=1 при ошибке и код ошибки диска в AH.


___ ____________________________________________________________________________


05H
Форматировать дорожку. Данные на дорожке, если есть, разрушаются.


Вход: DL,DH,CH = диск, головка, дорожка (см. подф. 02H)


ES:BX => дескрипторы секторов (требуется 512-байтовый буфер)


дискета: 1 4-байтовый 'CHNS' (Цилиндр, Головка, N сектора, Размер) для каждого сектора на дорожке (т.е. 36 байт для 9-секторных дорожек); номера секторов д.б. упорядочены.


'Z' - код размера сектора: 0=128; 1=256; 2=512; 3=1024


_AT_
Твердый диск: 1 2-байтовый 'FN' (Флаг, N сектора) для каждого сектора на дорожке. Последовательность полей 'N' определяет "коэффициент прослаивания" ("interleave factor").


_XT_
Твердый диск: ES:BX не используется. Вместо этого AL содержит значение "прослаивания" между 1 и 16 (10H).


Выход: Carry-флаг=1 при ошибке и код ошибки диска в AH.


(твердый диск: 'F'-поля установлены в 80H, чтобы пометить плохие секторы)


___ ____________________________________________________________________________


08H
_AT_ _XT_ Дать параметры диска. Возвращает информацию об устройстве.


Вход: DL = диск


Выход: DL = число тв. дисков на первом контроллере


DH = максимальный номер головки


CH = максимальный номер цилиндра (младшие 8 бит)


CL = максим. номер сектора (и старшие биты макс. номера цилиндра)


___ ____________________________________________________________________________


09H
_AT_ Инициализировать параметры диска. Сообщает BIOS о любом динамическом изменении таблиц параметров устройства.


Вход: Векторы для INT 41H и INT 46H а

дресуют Табл. параметров тв. диска соответственно для устройств 0 и 1.


Замечание:

_XT_ должен указывать обе таблицы через вектор INT 40H.


___ ____________________________________________________________________________


0aH
_AT_ _XT_ Чтение длинное: 512 байт + 4-байтоый ECC (код коррекции ошибок).


Вход: (как для подф. 02H)


Выход: Carry-флаг=1 при ошибке и код ошибки диска в AH.


ES:BX => в буфере (данные сектора + 4 байта) * число секторов (из AL)


___ ____________________________________________________________________________


0bH
_AT_ _XT_ Запись длинная. Пишет 512 байт + 4-байтовый ECC.


Вход: (как для подф. 02H)


ES:BX => буфер содержит данные сектора + 4 байта на каждый сектор


Выход: Carry-флаг=1 при ошибке и код ошибки диска в AH.


___ ____________________________________________________________________________


0cH
_AT_ _XT_ Искать цилиндр. Перемещает головку к нужной дорожке.


Вход: DL,DH,CH = диск, головка, дорожка (см. подф. 02H)


Выход: Carry-флаг=1 при ошибке и код ошибки диска в AH.


___ ____________________________________________________________________________


0dH
_AT_ _XT_ Альтернативный сброс устройства


Вход: DL = диск


___ ____________________________________________________________________________


0eH
_AT_ читать буфер секторов


Вход: (как для подф. 02H)


Выход: Carry-флаг=1 при ошибке и код ошибки диска в AH.


___ ____________________________________________________________________________


0fH
_AT_ писать буфер секторов


Вход: (как для подф. 02H)


Выход: Carry-флаг=1 при ошибке и код ошибки диска в AH.


___ ____________________________________________________________________________


10H
_AT_ _XT_ проверить готовность устройства


Вход: DL = диск


Выход: код ошибки диска (статус) в AH.


___ ____________________________________________________________________________


11H
_AT_ _XT_ Рекалибровать устройство


Вход: DL = диск


Выход: код ошибки диска (статус) в AH.


___ ____________________________________________________________________________


12H
_AT_ Диагностика RAM контроллера


Выход: код ошибки диска (статус) в AH.


___ ____________________________________________________________________________


13H
_AT_ Диагностика устройства


Выход: код ошибки диска (статус) в AH.


___ ____________________________________________________________________________


14H
_AT_ _XT_ Внутренняя диагностика контроллера


Выход: код ошибки диска (статус) в AH.


___ ____________________________________________________________________________


15H
_AT_ Читать тип диска (недоступна в XT BIOS)


Вход: DL = диск


Выход: AH = код устройства:


0 = устройство DL отсутствует


1 = дискета; логика замены диска отсутствует


2 = дискета; логика замены диска доступна (большинство случаев)


3 = твердый диск


___ ____________________________________________________________________________


16H
_AT_ Читать статус замены диска


Выход: AH = код статуса:


0 = диск не был заменен


6 = замена активна (открыта дисковая дверь);


DL = номер заменяемого диска


___ ____________________________________________________________________________


17H
_AT_ установить тип дискеты (используется перед операцией форматирования)


Вход: DL = номер устройства диска (0 или 1)


AL = тип носителя диска:


0 = не используется


1 = 360K дискета в 360K устройстве


2 = 360K дискета в 1.2M устройстве


3 = 1.2M дискета в 1.2M устройстве


КОДЫ ОШИБОК ДИСКА


INT 13H возвращает Carry-флаг (CF=1), если произошла ошибка. При этом в регистр


AH помещается один из приведенных ниже кодов ошибок. Эти же значения могут быть


возвращены при запросе состояния диска (подфункция 00H).


Замечание:

при ошибке рекомендуется сброс подфункцией 00H и повторить 3 раза.


#Ош
. Описание


____ __________________________________________________________________________


00H
последняя операция выполнена без ошибок


01H
плохая команда: неверный запрос к контроллеру


02H
плохая адресная марка


03H
защита записи: попытка записи на защищенную дискету


04H
ID сектора запорчен или не найден.


05H
ошибка сброса -- _AT_


08H
сбой DMA


09H
перекрытие DMA: попытка записи через 64K-байтовую границу.


0bH
встретился флаг плохой дорожки -- _AT_


10H
сбой CRC: несовпадение контрольной суммы данных.


11H
данные исправлены; исправимая ошибка; исправлено алгоритмом ECC -- _AT_


20H
сбой контроллера


40H
неудачный поиск. Запрошенная дорожка не найдена


80H
Таймаут. Устройство не ответило


0bbH
неопределенная ошибка -- _AT_


0ffH
сбой операции опроса (sense) -- _AT_


Примечание.


_AT_
...... обозначает IBM AT или совместимый; базируется на 80286 CPU


_XT_
...... обозначает XT (обычно ссылается на отличия в BIOS твердого диска)

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

Название реферата: Прерывание BIOS

Слов:1239
Символов:12638
Размер:24.68 Кб.