Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11642
Последний выпуск: 19.06.2015

Функции BIOS - INT 13H: дисковый ввод-вывод

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

подфункции: 00H сброс контроллера 08H дать парам диска  10H проверить готовность
            01H дать статус       09H иниц табл парам   11H рекалибрация
            02H читать секторы    0aH длинное чтение    14H диагностика
            03H писать секторы    0bH длинная запись    15H дать тип диска
            04H верификация       0cH искать цилиндр    16H изменить статус
            05H форматир дорожку  0dH альтерн сброс     17H уст тип диска
AH  сервис
--- ----------------------------------------------------------------------------
00H Сброс устройства. вызывает рекалибрацию контроллера.
    если DL равен 80H или 81H, выполнен сброс контр тверд диска, иначе FDC.
--- ----------------------------------------------------------------------------
01H дать статус ошибки последней операции.
    вход: DL = диск.  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 устройстве

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 

Комментарии

1.
86K
28 февраля
ASMcoders
9 / / 28.02.2017
Мне нравитсяМне не нравится
2 июня 2017, 21:24:57
Очень полезно и хорошо описано спасибо автору!
2.
93K
19 июля 2014 года
Дмитрий Неволин
0 / / 19.07.2014
+0 / -1
Мне нравитсяМне не нравится
19 июля 2014, 19:05:42
На практике похоже обновляются не только операционные системы, но и оборудование(железо).
На старых компьютерах зачастую выполнив сброс контроллера ( в AH 00 )
геометрия диска изменится на : Сектор=512 байт, головка= 63 сектора, цилиндр=255 головок.
На новых компьютерах зачастую выполнив сброс контроллера ( в AH 00 )
геометрия диска изменится на : Сектор=512 байт, головка= 32 сектора, цилиндр=64 головок.
3.
56K
19 декабря 2009 года
ДиМко
0 / / 19.12.2009
+1 / -0
Мне нравитсяМне не нравится
19 декабря 2009, 20:55:02
Клааассс!!! Спасибо ограмное!
4.
12K
16 апреля 2009 года
ASoftware
87 / / 16.04.2009
+2 / -0
Мне нравитсяМне не нравится
16 апреля 2009, 00:16:01
Кому надо коды ошибок?
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 твердого диска)

Кстати, не уверен, но 06H - должно быть отсутствует дискета.
5.
29K
02 октября 2008 года
Robotex
47 / / 02.10.2008
Мне нравитсяМне не нравится
23 октября 2008, 00:41:38
А где взять расшифровку кодов ошибок?
6.
Аноним
Мне нравитсяМне не нравится
21 января 2006, 04:02:13
Статейка руль!!! Афтару + балл за изложенное :))
7.
Аноним
Мне нравитсяМне не нравится
7 января 2006, 15:35:55
2snowk@t:

Из BIOSа, без использования расширенных ф-ий не возможно адресовать более 8 ГБ.
8.
Аноним
Мне нравитсяМне не нравится
28 октября 2005, 22:54:39
Полезная публикация.
Но я нашел в и-нет чуть более подробную информацию по данным функциям: http://www.clipx.net/ng/progref/ng5580e.php
Правда она на ангийском.
9.
Аноним
Мне нравитсяМне не нравится
2 сентября 2005, 23:44:32
смотря где искать=))
10.
Аноним
Мне нравитсяМне не нравится
15 апреля 2005, 17:50:50
на счет функции 08Н....получается что если у меня винт на 40Гб, максимум что она определит, так это ~8,5 Гб?
11.
Аноним
Мне нравитсяМне не нравится
1 апреля 2005, 16:32:18
7H ¦AT¦ установить тип дискеты (используется перед операцией форматирования)
вход: DL = номер устройства диска (0 или 1)
AL = тип носителя диска:
0 = не используется
1 = 360K дискета в 360K устройстве
2 = 360K дискета в 1.2M устройстве
3 = 1.2M дискета в 1.2M устройстве
12.
Аноним
Мне нравитсяМне не нравится
28 марта 2005, 21:55:20
Улет!Спасибо автору....долго искал...
13.
Аноним
Мне нравитсяМне не нравится
8 декабря 2004, 19:06:45
Народ, я такой тупой, что даже с этим не могу написать прогу для форматирования дискеты на асме. У кого есть, киньте плз на zyzop@mail.ru
14.
Аноним
Мне нравитсяМне не нравится
6 июля 2004, 00:29:05
Суууупер!!!То, что нужно!Месяц уже вишу в NET'е в поисках этой инфы.Спосибо автору
15.
Аноним
Мне нравитсяМне не нравится
30 мая 2004, 11:17:26
Thank you -- that's what I was looking for!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог