Программирование и комп-ры

Прерывание 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 твердого
диска)



смотреть на рефераты похожие на "Прерывание BIOS"