Dos7book
.pdf
Глава 8: Вызовы обработчиков прерываний
Сброс флага CF означает успешное завершение, и тогда AL – число записанных секторов
Примечание 1: все, что сказано в примечаниях 1 – 4 к 8.01-46, действительно также и для INT 13\AH=03h.
Примечание 2: после записи сигналограмму можно сверить с данными в буфере с помощью INT 13\AH=04h (прочие спецификации вызова такие же).
Примечание 3: запись секторов вместе с кодом коррекции ошибок осуществляется с помощью INT 13\AH=0Bh (прочие спецификации вызова такие же).
8.01-48 INT 13\AH=05h – низкоуровневое форматирование дорожки
Низкоуровневому форматированию можно подвергать только такие диски, которые не имеют постоянной разметки дорожек. Поэтому INT 13\AH=05h можно применять по отношению к гибким магнитным дискам, но нельзя применять по отношению к современным жестким магнитным дискам: их заводская разметка может быть необратимо повреждена.
Перед проведением низкоуровневого форматирования необходимо подготовить в памяти компьютера таблицы дополнительных данных с помощью INT 10\AH=18h (8.01-54), а для дисководов устаревших типов – с помощью INT 10\AH=17h. В частности, параметры форматирования дискет считываются из таблицы, адрес которой записан в ячейку 0000:0078h (A.08-2).
При вызове: |
|
AH |
= 05h |
AL |
– число секторов, которые надлежит форматировать |
CH |
– номер дорожки |
DH |
– номер головки |
DL |
– номер дисковода (примечание 1 к 8.01-44) |
ES:BX – указатель на буфер, содержащий по 4 байта данных на каждый форматируемый сектор: 1-й байт – номер дорожки, 2-й байт – номер головки, 3-й байт – номер сектора, 4-й байт – размер сектора (значения (00h, 01h, 02h, 03h соответствуют размерам сектора 128, 256, 512, 1024 байт)
При неудачном завершении флаг CF установлен, в AH – код завершения (A.06-1). Сброс флага CF означает успешное завершение.
Примечание 1: в блоке данных, на который указывает ES:DX, счет дорожек и головок начинается с нуля, а счет секторов – с единицы.
Примечание 2: конечные значения номеров секторов, головок и дорожек следует определять посредством INT 13\AH=08h (8.01-49). Эти значения могут отличаться от реальных, но они всегда соответствуют тем
– 359 –
|
|
Глава 8: |
Вызовы обработчиков прерываний |
|
|
преобразованиям (A.13-1), которые выполняет над ними система |
|
|
|
BIOS данного компьютера. |
|
8.01-49 |
INT 13\AH=08h – определение параметров дисковода |
||
При вызове: |
|
|
|
|
AH |
= 08h |
|
|
DL |
– номер дисковода (примечание 1 к 8.01-44) |
|
При неудачном завершении флаг CF установлен, в AH – код завершения (A.06-1). |
|||
Сброс флага CF означает успешное завершение, и тогда |
|||
|
BL |
– тип дисковода, только для дисководов на сменных дисках: |
|
|
|
= 01h – дисковод для дискет емкостью 360 кбайт, |
|
|
|
= 02h – дисковод для дискет емкостью 1.2 Мбайт, |
|
|
|
= 03h – дисковод для дискет емкостью 720 кбайт, |
|
|
|
= 04h – дисковод для дискет емкостью 1.44 Мбайт, |
|
|
|
= 06h – дисковод для дискет емкостью 2.88 Мбайт, |
|
|
|
= 10h – какой-либо иной дисковод. |
|
|
CH |
– младшие 8 бит максимального номера цилиндра (дорожки) |
|
|
CL |
– биты 0-5: номер последнего сектора на дорожке, |
|
|
|
– биты 6-7: старшие 2 бита от максимального номера цилиндра |
|
|
DH |
– максимальный номер головки |
|
|
DL |
– число подобных дисководов в компьютере (примечание 2) |
|
|
ES:DI – адрес таблицы параметров (A.08-2), выдаваемый только для |
||
|
|
дисководов на гибких магнитных дисках. |
|
Примечание 1: статус успешного завершения AH=00h может быть возвращен даже если запрошенный дисковод не существует. Чтобы убедиться в достоверности полученных данных, необходимо сначала проверить флаг CF или число, возвращенное в регистре DL.
Примечание 2: некоторые системы BIOS не возвращают в регистре DL число больше чем два. Подозрение на наличие большего числа дисководов следует проверять отдельно с помощью INT 13\AH=15h (8.01-52).
Примечание 3: сигнатура A0h в байте со смещением 03h таблицы A.13-1 означает,
что для накопителей на жестких магнитных дисках обработчик прерывания INT 13\AH=08h выдает не реальные, а преобразованные значения параметров CHS. В таком случае при вызовах всех старых функций прерывания INT 13 (8.01-46 – 8.01-54) следует руководствоваться именно преобразованными, а не реальными значениями параметров CHS.
– 360 –
Глава 8: Вызовы обработчиков прерываний
8.01-50 INT 13\AH=0Ch – смещение головки дисковода на заданную дорожку
При вызове:
AH = 0Ch
CH, CL, DH, DL – то же, что для INT 13\AH=02h (8.01-46)
При неудачном завершении флаг CF установлен, в AH – код завершения (A.06-1). Сброс флага CF означает успешное завершение.
8.01-51 INT 13\AH=10h – проверка готовности жесткого магнитного диска
Байт статуса, возвращаемый после вызова INT 13\AH=10h, показывает,
существует ли запрошенный дисковод и готов ли он принять к исполнению очередное задание.
При вызове: |
|
AH |
= 10h |
DL |
– номер дисковода на жестких магнитных дисках |
|
(80h – первый дисковод, 81h – второй, и так далее) |
При возврате:
AH – байт статуса, расшифровываемый по таблице A.06-1. Сброс флага CF означает успешное завершение.
8.01-52 |
INT 13\AH=15h – проверка типа дисковода |
|
При вызове: |
|
|
|
AH |
= 15h |
|
DL |
– номер дисковода (примечание 1 к 8.01-44) |
При неудачном завершении флаг CF установлен, в AH – код завершения (A.06-1). Если флаг CF сброшен, то AH – код типа дисковода:
=00h – запрошенный дисковод не существует
=01h – флоппи-дисковод без датчика смены диска
=02h – любой дисковод с датчиком смены диска
=03h – дисковод на жестких магнитных дисках
Если код дисковода AH=03h, то в регистрах CX:DX возвращается четырехбайтовое число 512-байтовых секторов на этом диске.
Примечание 1: дисководы на сменных жестких магнитных дисках могут быть причислены к типу 01h или 02h.
Примечание 2: обработчик прерывания INT 13\AH=15h не полагается на хранящиеся в памяти сведения, он запрашивает контроллер дисковода заново.
– 361 –
Глава 8: Вызовы обработчиков прерываний
8.01-53 |
INT 13\AH=16h – обнаружение смены диска |
|
При вызове: |
|
|
|
AH |
= 16h |
|
DL |
– номер дисковода (примечание 1 к 8.01-44) |
При возврате:
если диск не был сменен, то флаг CF сброшен и AH = 00h если флаг CF установлен и AH = 06h, то диск был сменен
если флаг CF установлен, но значение в AH другое, то это значение – код завершения из таблицы A.06-1.
Примечание 1: перед первой засылкой запроса INT 13\AH=16h на дисковод неизвестного типа нужно заранее с помощью INT 13\AH=15h убедиться в том, что этот дисковод имеет датчик смены дисков.
Примечание 2: датчик смены дисков обычно реагирует на открывание или закрывание заслонки слота в дисководе, так что может сообщать о смене диска, которая в самом деле не произошла.
Примечание 3: о каждом факте смены диска датчик "докладывает" только один раз,
потому что он сбрасывается в исходное состояние после каждого вызова INT 13\AH=16h.
Примечание 4: современные системы BIOS позволяют регистрировать смену дисков посредством INT 13\AH=49h с теми же (кроме AH) спецификациями, но с более широким кругом опрашиваемых дисководов, включающим любые дисководы с номерами 80h и выше. В том, что эта функция в Вашем компьютере поддерживается, нужно заранее убедиться с помощью
INT 13\AH=41h (8.01-55).
8.01-54 |
INT 13\AH=18h – задание параметров форматирования для дискет |
||
При вызове: |
|
|
|
|
AH |
= 18h |
|
|
CH, CL, DH, DL – то же, что для INT 13\AH=02h (8.01-46) |
||
При возврате: |
|
|
|
|
AH |
= 00h |
– форматирование с заданными параметрами возможно |
|
|
= 01h |
– функция недоступна |
|
|
= 0Ch – тип диска не поддерживается или неизвестен |
|
|
|
= 80h |
– сменный диск в дисководе отсутствует |
|
ES:DI – указатель на таблицу параметров A.08-2 |
||
Примечание 1: обработчик прерывания INT 13\AH=18h не записывает возвращаемый указатель на таблицу параметров в адрес 0000:0078h (вектор INT 1E, A.12-1), эту операцию надо делать в вызывающей программе.
– 362 –
Глава 8: Вызовы обработчиков прерываний
Примечание 2: при попыткax задавать параметры форматирования для
накопителей на жестких магнитных дисках обработчик прерывания INT 13\AH=18h устанавливает флаг CF и выдает код статуса AH=01h. Параметры форматирования для устаревших 5.25" дискет и для дискет емкостью 720 кб следует задавать посредством
INT 13\AH=17h.
8.01-55 INT 13\AH=41h – проверка поддержки дополнительных функций
Поддержка дополнительных функций прерывания INT 13 получила широкое распространение с 1997 года. Благодаря этой поддержке реализованы свойства, которые уже стали привычными в современных компьютерах, в частности, возможность загрузки с оптических дисков и адресация LBA (примечание 4 к A.13-6) для доступа к дискам большой емкости.
При вызове: |
|
|
AH |
= 41h |
|
BX |
= 55AAh |
|
DL |
– номер дисковода (примечание 1 к 8.01-44) |
|
При неудаче флаг CF установлен, в AH – код завершения (A.06-1), причем |
||
AH |
= 01h означает, что функция не поддерживается. |
|
При успешном завершении флаг CF сброшен, и тогда |
||
AH |
= 01h |
– версии 1.x дополнительных функций INT 13; |
|
= 20h |
– версия 2.0 дополнительных функций INT 13; |
|
= 21h |
– версия 2.1 дополнительных функций INT 13. |
BX |
= AA55h означает, что BIOS включает расширения INT 13 |
|
CX |
– признаки поддержки следующих функций: |
|
|
бит 0 |
– INT 13\AH=42h-44h,47h,48h; |
|
бит 1 |
– INT 13\AH=45h,46h,48h,49h, INT 15\AH=52h; |
|
бит 2 |
– INT 13\AH=48h,4Eh; |
|
бит 3 |
– поддержка расширенного пакета (примечание 2). |
Примечание 1: при возврате данные в регистрах AL и DH могут быть утрачены. Примечание 2: все расширения INT 13 поддерживают запросы с 10-байтовыми
пакетами дисковой адресации (с 4-байтовыми адресами для дисков емкостью до 127 Гбайт), а поддержка расширенного пакета означает возможность пользования 20-байтовыми пакетами с 8-байтовыми адресами для дисков емкостью свыше 127 Гбайт. Структура пакетов показана в приложении A.13-4.
– 363 –
Глава 8: Вызовы обработчиков прерываний
8.01-56 |
INT 13\AH=42h – расширенная функция чтения с диска |
|
При вызове: |
|
|
|
AH |
= 42h |
|
DL |
– номер дисковода (примечание 1 к 8.01-44) |
|
DS:SI – указатель на пакет дисковой адресации (A.13-4) |
|
При неудачном завершении флаг CF установлен, в AH – код завершения (A.06-1). Сброс флага CF означает успешное завершение.
Примечание 1: при возврате в адрес 02h в пакете дисковой адресации вписывается количество считанных блоков данных.
Примечание 2: указатель на считанный массив данных представлен 4-байтовым (двойным) словом по адресу 04h в пакете дисковой адресации.
Примечание 3: вызов INT 13\AH=47h с теми же (кроме AH) спецификациями
заставляет дисковод начать перемещение головки к заданной дорожке. Процессор успеет многое сделать за 2 – 3 миллисекунды, пока головка движется к цели. Если вызывать INT 13\AH=47h заблаговременно, то считывание не будет сопряжено с ожиданием
|
|
установления головки, и программа будет выполняться быстрее. |
|
8.01-57 |
INT 13\AH=43h – расширенная функция записи на диск |
||
При вызове: |
|
|
|
|
AH |
= 43h |
|
|
AL |
= 00h |
– не исполнять сверку сигналограммы, |
|
|
= 02h |
– проводить сверку после записи. |
|
DL |
– номер дисковода (примечание 1 к 8.01-44) |
|
DS:SI – указатель на пакет дисковой адресации (A.13-4)
При неудачном завершении флаг CF установлен, в AH – код завершения (A.06-1). Сброс флага CF означает успешное завершение
Примечание 1: указатель на массив подлежащих записи данных должен быть представлен по адресу 04h в пакете дисковой адресации.
Примечание 2: при возврате в пакет дисковой адресации вписывается слово со смещением 02h, означающее количество успешно записанных или успешно сверенных блоков данных.
Примечание 3: версии до 2.0 расширений INT 13 использовали флаг AL = 01h для проведения сверки после записи. Если сверка запрошена, но не поддерживается, то BIOS устанавливает флаг CF и возвращает AH = 01h (= неверная функция).
Примечание 4: сверку сигналограммы можно провести отдельно посредством вызова INT 13\AH=44h с теми же спецификациями, за исключением AH и того, что значение в AL будет проигнорировано.
– 364 –
Глава 8: Вызовы обработчиков прерываний
8.01-58 INT 13\AH=45h – блокировка и разблокировка дисковода
В программах встречаются такие последовательности обращений дисководу, которые нельзя прерывать во избежание потери данных. Типичный пример такой процедуры – дефрагментация. На время выполнения таких процедур дисковод следует блокировать. Пока дисковод блокирован, из него нельзя извлечь сменный диск. В многозадачных операционных системах блокировка исключает обращения к диску со стороны других программ. Допустимы до 255 уровней вложенности вызовов процедур, требующих монопольного "владения" диском. Каждая такая процедура должна завершаться операцией разблокирования. Разблокированному состоянию диска соответствует уровень вложенности 00h.
При вызове:
AX = 4500h – блокировать дисковод: увеличить уровень на 1
=4501h – разблокировать дисковод: уменьшить уровень на 1
=4502h – выяснить уровень вложенности блокирования
DL – номер дисковода (примечание 1 к 8.01-44)
При неудачном завершении флаг CF установлен, в AH – код завершения (A.06-1) При успешном завершении флаг CF сброшен, и тогда
|
AL |
– уровень вложенности блокирования. |
8.01-59 |
INT 13\AH=46h – выталкивание сменного диска из дисковода |
|
При вызове: |
|
|
|
AX |
= 4600h |
|
DL |
– номер дисковода (примечание 1 к 8.01-44) |
При неудачном завершении флаг CF установлен, в AH – код завершения (A.06-1). Если флаг CF сброшен, то миссия завершена успешно
Примечание 1: обработчик прерывания INT 13\AH=46h использует INT 15\AH=52h чтобы проверить, не занят ли данный диск операциями обмена данными с кэш-буфером или обслуживанием других программ.
8.01-60 |
INT 13\AH=48h – запрос параметров дисковода |
|
При вызове: |
|
|
|
AH |
= 48h |
|
DL |
– номер дисковода (примечание 1 к 8.01-44) |
DS:SI – указатель на буфер для данных (примечание 1)
При неудачном завершении флаг CF установлен, в AH – код завершения (A.06-1). Если флаг CF сброшен, то миссия завершена успешно, и тогда
DS:SI – указатель на буфер с таблицей данных (A.13-2)
– 365 –
Глава 8: Вызовы обработчиков прерываний
Примечание 1: первое слово в буфере должно объявлять его длину: 001Ah – для расширений INT 13 версий 1.x, 001Eh – для версий 2.x, 0049h – для версий 3.x. Если указана длина буфера для более старой версии, то новые версии расширений "обрежут" возвращаемую таблицу по формату для старой версии.
8.01-61 INT 13\AX=4A00h – эмулировать диск по данным с оптического диска
Эта функция создает виртуальный диск на основании образа реального диска, записанного на оптический диск.
При вызове:
AX = 4A00h
DS:SI – указатель на пакет спецификаций загрузки A.15-1
При неудачном завершении флаг CF установлен, в AH – код завершения (A.06-1). Если флаг CF сброшен, то миссия завершена успешно
Примечание 1: обработчик прерывания INT 13\AX=4C00h принимает такие же спецификации (кроме AX) и делает то же самое, но сверх того
инициирует процесс загрузки операционной системы с созданного виртуального диска.
8.01-62 |
INT 13\AH=4Bh – подфункции эмуляции дисковода |
||
При вызове: |
|
|
|
|
AH |
= 4Bh |
|
|
AL |
= 00h |
– прекратить эмуляцию дисковода |
|
|
= 01h |
– выдать статус эмуляции дисковода |
|
DL |
– номер эмулируемого дисковода (примечание 1 к 8.01-44) |
|
|
DS:SI – указатель на место для пакета данных длиной 13h байт. |
||
При неудачном завершении флаг CF установлен, в AH – код завершения (A.06-1). Если флаг CF сброшен, то миссия завершена успешно, и тогда
DS:SI – указатель на запрошенный пакет данных (A.15-1)
Примечание 1: подфункция AL = 00h при указании номера дисковода DL = 7Fh прекращает эмуляцию всех виртуальных дисков.
Примечание 2: если эмуляция не осуществляется, то флаг CF сброшен.
8.01-63 INT 13\AH=4Dh – считывание секторов оптического диска
При вызове:
AX = 4D00h
DS:SI – указатель на командный пакет (A.15-2)
При неудачном завершении флаг CF установлен, в AH – код завершения (A.06-1).
– 366 –
Глава 8: Вызовы обработчиков прерываний
Если флаг CF сброшен, то миссия завершена успешно
Примечание 1: возвращаемые данные записываются в подготовленный буфер,
адрес которого должен быть указан в командном пакете в двойном слове со смещением 02h (A.15-2).
Примечание 2: обычно с помощью INT 13\AH=4Dh считывают загрузочный каталог, структура которого показана в таблице A.15-3.
8.01-64 |
INT 13\AH=4Eh – конфигурирование дисковода |
|
При вызове: |
|
|
|
AH |
= 4Eh |
|
AL |
= 00h – вести упреждающее считывание в буфер дисковода |
|
|
= 01h – запретить упреждающее считывание в буфер |
|
|
= 02h – задать режим PIO с максимальной скоростью передачи |
|
|
= 03h – задать нулевой режим PIO |
|
|
= 04h – задать режим PIO, принимаемый по умолчанию |
|
|
= 05h – разрешить режим DMA с максимальным номером |
|
|
= 06h – запретить использование режима DMA |
|
DL |
– номер дисковода (примечание 1 к 8.01-44) |
При неудачном завершении флаг CF установлен, в AH – код завершения (A.06-1). |
||
Если флаг CF сброшен, то миссия завершена успешно, и тогда |
||
|
AL |
= 00h – команда изменила режим только указанного дисковода |
|
|
= 01h – команда повлияла на режим работы других устройств, |
|
|
подключенных к тому же контроллеру. |
Примечание 1: передача данных с прямым доступом в память (DMA) и режим программного управления вводом-выводом (PIO) взаимно несовместимы. Задание режима DMA означает отказ от программного управления PIO, выбор PIO означает отказ от DMA.
8.01-65 |
INT 14\AH=00h – параметры последовательного порта |
|
При вызове: |
|
|
|
AH |
= 00h |
|
AL |
– биты 7-5: значения от 000 до 111 задают скорости передачи |
|
|
110, 150, 300, 600, 1200, 2400, 4800, 9600 бит/с. |
–биты 4-3: значения 00 или 10 – проверка не производится, 01 – проверка по нечетности, 11 – проверка по четности.
–бит 2: если сброшен – 1 стоповый бит, установлен – 2 бита.
–биты 1-0: 00 означает 5 битов в слове, 01 – 6 битов в слове,
10 – 7 битов в слове, 11 – 8 битов в слове. DX – номер последовательного порта (0000h – 0003h)
– 367 –
Глава 8: Вызовы обработчиков прерываний
При возврате: |
|
|
|
AH |
– статус линии (A.14-2) |
|
AL |
– статус модема, если он подключен к запрошенному порту. |
8.01-66 |
INT 14\AH=01h – посылка байта в последовательный порт |
|
При вызове: |
|
|
|
AH |
= 01h |
|
AL |
– посылаемый байт |
|
DX |
– номер последовательного порта (0000h – 0003h) |
При возврате: |
|
|
|
AH |
– статус линии (A.14-2) |
Примечание 1: ошибка передачи обнаруживается по установленному биту 7 в байте статуса (превышение времени ожидания отклика).
8.01-67 |
INT 14\AH=02h – прием байта данных через последовательный порт |
|
При вызове: |
|
|
|
AX |
= 0200h |
|
DX |
– номер последовательного порта (0000h – 0003h) |
При возврате: |
|
|
|
AH |
– статус линии (A.14-2) |
|
AL |
– принятый байт, если сброшен бит 7 в регистре AH |
8.01-68 |
INT 14\AH=03h – выяснение статуса последовательного порта |
|
При вызове: |
|
|
|
AX |
= 0300h |
|
DX |
– номер последовательного порта (0000h – 0003h) |
При возврате: |
|
|
|
AH |
– статус линии (A.14-2) |
|
AL |
– статус модема, если он подключен к запрошенному порту. |
8.01-69 INT 15\AH=52h – выяснение занятости дисковода
Функция INT 15\AH=52h показывает, занят ли дисковод в данный момент обменом данными или нет. Ее вызывает, в частности, обработчик прерывания INT 13\AH=46h, чтобы определить, можно ли вытолкнуть сменный диск.
При вызове: |
|
AH |
= 52h |
DL |
– номер дисковода (примечание 1 к 8.01-44) |
– 368 –
