Вызов прерывания BIOS 13 (шестнадцатеричный)
INT 13h - это сокращение для вызова прерывания BIOS 13 в шестнадцатеричном формате , 20-го вектора прерывания в компьютерной системе на базе x86 (потомки IBM PC). BIOS , как правило , устанавливает реальный режим прерывания обработчика в этом векторе , который обеспечивает посекторное жесткий диск и флоппи - диск сервисы чтения и записи с помощью головки блока цилиндров-сектор (CHS) адресацию. BIOS современных ПК также включает функции расширения INT 13h, разработанные IBM и Microsoft в 1992 году, которые предоставляют те же самые услуги доступа к диску с использованием 64-битной адресации LBA ; с небольшими дополнениями они были квазистандартизированы Phoenix Technologies и другими как расширения BIOS EDD ( Enhanced Disk Drive ).
INT - это инструкция x86, которая запускает программное прерывание , а 13 hex - это номер вызываемого прерывания (в виде шестнадцатеричного значения).
Современные компьютеры поставляются с функциями BIOS INT 13h и UEFI, которые предоставляют те же услуги и многое другое, за исключением UEFI Class 3, который полностью удаляет CSM, поэтому в нем отсутствуют INT 13h и другие прерывания. Обычно драйверы UEFI используют LBA- адресацию вместо CHS-адресации.
Обзор
В операционных системах реального режима , таких как DOS , вызов INT 13h будет переходить в код ROM-BIOS компьютера для низкоуровневых дисковых служб , которые будут выполнять операции чтения или записи диска на основе физических секторов для программы. В DOS он служит низкоуровневым интерфейсом для встроенных драйверов блочных устройств для жестких дисков и гибких дисков . Это позволяет INT 25h и INT 26h предоставлять функции абсолютного чтения / записи на диск для логических секторов драйверу файловой системы FAT в ядре DOS, который обрабатывает связанные с файлами запросы через функции DOS API ( INT 21h ).
В операционных системах с защищенным режимом , таких как производные от Microsoft Windows NT (например, NT4, 2000, XP и Server 2003) и Linux с функцией dosmu , ОС перехватывает вызов и передает его встроенному механизму дискового ввода-вывода операционной системы. Windows 9x и Windows для рабочих групп 3.11 также обходят процедуры BIOS при использовании 32-разрядного доступа к диску . Помимо выполнения низкоуровневого доступа к диску, вызовы INT 13h и соответствующие структуры данных BIOS также предоставляют информацию о типах и емкости дисков (или других устройств DASD ), подключенных к системе; при загрузке ОС в защищенном режиме она может использовать эту информацию из BIOS для перечисления дискового оборудования, чтобы оно (ОС) могло загружать и настраивать соответствующие драйверы дискового ввода-вывода.
Исходный интерфейс BIOS INT 13h в реальном режиме поддерживает диски размером до 8 ГБ с использованием того, что обычно называется физической адресацией CHS . Это ограничение связано с аппаратным интерфейсом дискового оборудования IBM PC / XT . BIOS использовал адрес сектора головки блока цилиндров (CHS), указанный в вызове INT 13h, и передавал его непосредственно на аппаратный интерфейс. Меньший предел, около 504 МБ, был наложен комбинацией ограничений адресации CHS, используемых BIOS, и жестких дисков ATA, которые не похожи друг на друга. Когда пределы адресации CHS как BIOS, так и ATA объединяются (т. Е. Когда они применяются одновременно), количество 512-байтовых секторов, которые могут быть адресованы, составляет в общей сложности около 504 МБ.
Ограничение в 504 МБ было преодолено с помощью трансляции CHS - метода, с помощью которого BIOS имитировал фиктивную геометрию CHS на интерфейсе INT 13h, при этом взаимодействуя с диском ATA, используя собственную логическую геометрию CHS. (К тому времени, когда приблизился барьер в 504 МБ, диски ATA задолго до этого перестали представлять свои реальные параметры физической геометрии на внешнем интерфейсе ATA.) Трансляция позволяет BIOS, все еще использующей адресацию CHS, эффективно адресовать диски ATA большего размера. ровно до 8064 МБ, что является естественной емкостью только интерфейса BIOS CHS. (Интерфейс ATA имеет гораздо большую емкость адресации CHS, поэтому, как только "вмешательство" ограничений CHS BIOS и ATA было устранено путем адресации, значительным было только меньшее ограничение BIOS.) Трансляция CHS иногда упоминается как логическая адресация CHS , но на самом деле это неправильное название, поскольку ко времени разработки этой BIOS адреса ATA CHS уже были логическими, а не физическими. Предел 8064 МБ возникает из-за комбинации соглашения о вызовах на основе значения регистра, используемого в интерфейсе INT 13h, и цели поддержания обратной совместимости - диктуя, что формат или размер адресов CHS, передаваемых в INT 13h, не может быть изменен для добавления дополнительных битов. в одно из полей, например, в поле Номер цилиндра. Этот предел использует 1024 цилиндра, 256 головок, 63 сектора и 512 байтовых блоков, что позволяет адресовать ровно 7,875 ГиБ (1024 * 256 * 63 * 512 байтов). Вкратце было несколько BIOS, которые предлагали несовместимые версии этого интерфейса - например, AWARD AT BIOS и AMI 386sx BIOS были расширены для обработки до 4096 цилиндров, помещая биты 10 и 11 номера цилиндра в биты 6 и 7 зарегистрировать DH.
Во всех версиях MS-DOS (включая MS-DOS 7 и Windows 95 ) есть ошибка, препятствующая загрузке дисков с 256 головками (значение регистра 0xFF), поэтому многие современные BIOS предоставляют сопоставления трансляции CHS с максимум 255 (0xFE) головками. , таким образом уменьшая общее адресное пространство ровно до 8032,5 МБ (примерно 7,844 ГБ).
Для поддержки адресации даже больших дисков IBM и Microsoft представили интерфейс, известный как INT 13h Extensions , который позже был переиздан и немного расширен Phoenix Technologies как часть BIOS Enhanced Disk Drive Services (EDD). Он определяет новые функции в службе INT 13h, все из которых имеют номера функций больше 40h, которые используют 64-битную адресацию логических блоков (LBA), что позволяет адресовать до 8 ZiB . (Диск ATA также может поддерживать 28-битный или 48-битный LBA, что позволяет использовать до 128 ГиБ или 128 ПиБ соответственно, при условии, что размер сектора / блока составляет 512 байт). Это «пакетный» интерфейс, потому что он использует указатель на пакет информации, а не регистровое соглашение о вызовах исходного интерфейса INT 13h. Этот пакет представляет собой очень простую структуру данных, которая содержит версию интерфейса, размер данных и LBA. Для обеспечения обратной совместимости программного обеспечения расширенные функции реализованы вместе с исходными функциями CHS, и вызовы функций из обоих наборов могут быть смешаны, даже для одного и того же накопителя, с оговоркой, что функции CHS не могут достичь более первых 8064 МБ диск.
Некоторые драйверы кеширования сбрасывают свои буферы при обнаружении обхода DOS путем прямого ввода INT 13h из приложений. Фиктивное чтение через INT 13h может использоваться как один из нескольких методов для принудительной очистки кеша для неизвестных кешей (например, перед перезагрузкой).
AMI BIOS примерно 1990–1991 гг. Уничтожают невыровненные буферы слов. Некоторые программы DOS и TSR блокируют включение прерывания и регистрируют, поэтому PC DOS и MS-DOS устанавливают свои собственные фильтры для предотвращения этого.
Список сервисов
INT 13h
Приводной стол
DL = 00ч |
1-я дискета ("дисковод A:")
|
DL = 01ч |
2-я дискета ("дисковод B:")
|
DL = 02ч |
3-я дискета ("дисковод B:")
|
. . .
|
DL = 7Fh |
128-я дискета
|
DL = 80ч |
1-й жесткий диск
|
DL = 81 ч |
2-й жесткий диск
|
DL = 82 ч |
3-й жесткий диск
|
. . .
|
DL = E0h |
CD / DVD или 97-й жесткий диск
|
. . .
|
DL = FFh |
128-й жесткий диск
|
Таблица функций
AH = 00ч |
|
Сбросить дисковую систему
|
AH = 01ч |
|
Получить статус последней операции с диском
|
AH = 02ч |
|
Чтение секторов с диска
|
AH = 03ч |
|
Запись секторов на диск
|
AH = 04ч |
|
Проверить секторы
|
AH = 05ч |
|
Форматировать трек
|
AH = 06ч |
|
Форматировать дорожку Установить флаги плохого сектора
|
AH = 07ч |
|
Форматировать диск, начиная с дорожки
|
AH = 08ч |
|
Чтение параметров привода
|
AH = 09ч |
HD |
Инициализировать дисковый контроллер
|
AH = 0Ah |
HD |
Чтение длинных секторов с диска
|
AH = 0Bh |
HD |
Запись длинных секторов на диск
|
AH = 0Ch |
HD |
Переместить приводную головку к цилиндру
|
AH = 0Dh |
HD |
Сбросить дисковые накопители
|
AH = 0Eh |
PS / 2 |
Проверка чтения контроллера
|
AH = 0Fh |
PS / 2 |
Тест записи контроллера
|
AH = 10ч |
HD |
Проверьте, готов ли диск
|
AH = 11ч |
HD |
Перекалибровать привод
|
AH = 12 часов |
PS / 2 |
Тест ОЗУ контроллера
|
AH = 13ч |
PS / 2 |
Тест драйв
|
AH = 14ч |
HD |
Диагностика контроллера
|
AH = 15 часов |
|
Чтение типа привода
|
AH = 16ч |
FD |
Обнаружение смены носителя
|
AH = 17ч |
FD
|
Установить тип носителя для формата (используется в версиях DOS <= 3.1)
|
AH = 18ч |
FD
|
Установить тип носителя для формата (используется версиями DOS> = 3.2)
|
AH = 19ч |
|
Park Heads
|
AH = 41ч |
EXT
|
Проверьте, доступны ли расширения
|
AH = 42ч |
EXT |
Чтение секторов с диска
|
AH = 43ч |
EXT |
Запись секторов на диск
|
AH = 44ч |
EXT |
Проверить секторы
|
AH = 45 часов |
EXT |
Заблокировать / разблокировать диск
|
AH = 46ч |
EXT |
Извлечь диск
|
AH = 47ч |
EXT |
Переместить привод в сектор
|
AH = 48ч |
EXT |
Чтение параметров привода
|
AH = 49ч |
EXT |
Обнаружение смены носителя
|
AH = 4Bh
|
EXT
|
Получить тип эмуляции диска
|
Если второй столбец пуст, то функцию можно использовать как для гибкого, так и для жесткого диска.
- FD: только для гибких дисков.
- HD: только для жесткого диска.
- PS / 2: только для жесткого диска в системе PS / 2.
- EXT: часть расширений INT 13h, которые были написаны в 1990-х годах для поддержки жестких дисков с объемом более 8 ГБ .
INT 13h AH = 00h : сбросить дисковую систему
Параметры
AH
|
00ч
|
DL
|
Диск (установленный бит 7 означает сброс как жесткого, так и гибкого диска)
|
Полученные результаты
CF
|
Установить при ошибке
|
AH
|
Код возврата
|
INT 13h AH = 01h : получить статус последней операции привода
Параметры
AH
|
01ч
|
DL
|
Водить машину
|
Бит 7 = 0 для дисковода гибких дисков, бит 7 = 1 для фиксированного дисковода
Полученные результаты
AH
|
Код возврата
00ч
|
Успех
|
01ч
|
Неверная команда
|
02ч
|
Не удается найти адресную метку
|
03ч
|
Попытка записи на защищенный от записи диск
|
04ч
|
Сектор не найден
|
05ч
|
Сбросить сбой
|
06ч
|
Строка смены диска 'активна'
|
07ч
|
Не удалось выполнить действие параметра диска
|
08ч
|
DMA переполнение
|
09ч
|
Попытка DMA через границу 64 КБ
|
0Ач
|
Обнаружен плохой сектор
|
0Bh
|
Обнаружен неисправный цилиндр (гусеница)
|
0Ч
|
Тип носителя не найден
|
0Dh
|
Неверное количество секторов
|
0Eh
|
Обнаружена адресная метка управляющих данных
|
0Fh
|
DMA вне диапазона
|
10ч
|
Ошибка данных CRC / ECC
|
11ч
|
Ошибка данных, скорректированная с помощью ECC
|
20ч
|
Сбой контроллера
|
40ч
|
Ищите неудачу
|
80ч
|
Время ожидания диска истекло, предполагается, что он не готов
|
AAh
|
Диск не готов
|
BBh
|
Неопределенная ошибка
|
CCh
|
Ошибка записи
|
E0h
|
Ошибка статуса
|
FFh
|
Ошибка операции Sense
|
|
CF
|
Установить при ошибке, очистить, если ошибок нет
|
INT 13h AH = 02h : чтение секторов с диска
Параметры
AH
|
02ч
|
AL
|
Секторы для считывания подсчета
|
CH
|
Цилиндр
|
CL
|
Сектор
|
DH
|
Голова
|
DL
|
Водить машину
|
ES: BX
|
Указатель адреса буфера
|
Полученные результаты
CF
|
Установить при ошибке, очистить, если ошибок нет
|
AH
|
Код возврата
|
AL
|
Фактическое количество прочитанных секторов
|
Регистр CX содержит номер цилиндра (10 битов , возможные значения от 0 до 1023) и номер сектора (6 битов, возможные значения от 1 до 63). Биты цилиндра и сектора пронумерованы ниже:
CX = ---CH--- ---CL---
cylinder : 76543210 98
sector : 543210
Примеры перевода:
CX := ( ( cylinder and 255 ) shl 8 ) or ( ( cylinder and 768 ) shr 2 ) or sector;
cylinder := ( (CX and 0xFF00) shr 8 ) or ( (CX and 0xC0) shl 2)
sector := CX and 63;
Адресация буфера должно гарантировать , что полный буфер находится внутри данного сегмента , то есть ( BX + size_of_buffer ) <= 10000h
. В противном случае прерывание может завершиться ошибкой с некоторыми версиями BIOS или оборудования.
Пример
Предположим, вы хотите прочитать 16 секторов (= 2000h байтов ), а ваш буфер начинается с адреса памяти 4FF00h. Используя сегментацию памяти , есть разные способы вычисления значений регистров, например:
ES = segment = 4F00h
BX = offset = 0F00h
sum = memory address = 4FF00h
would be a good choice because 0F00h + 2000h = 2F00h <= 10000h
ES = segment = 4000h
BX = offset = FF00h
sum = memory address = 4FF00h
would not be a good choice because FF00h + 2000h = 11F00h > 10000h
Функция 02h прерывания 13h может читать только секторы первых 16 450 560 секторов вашего жесткого диска, для чтения секторов, превышающих предел в 8 ГБ, вы должны использовать функцию 42h из INT 13h Extensions. Другой альтернативой может быть прерывание DOS 25h, которое считывает сектора
внутри раздела.
Пример кода
[ORG 7c00h] ; code starts at 7c00h
xor ax, ax ; make sure ds is set to 0
mov ds, ax
cld
; start putting in values:
mov ah, 2h ; int13h function 2
mov al, 63 ; we want to read 63 sectors
mov ch, 0 ; from cylinder number 0
mov cl, 2 ; the sector number 2 - second sector (starts from 1, not 0)
mov dh, 0 ; head number 0
xor bx, bx
mov es, bx ; es should be 0
mov bx, 7e00h ; 512bytes from origin address 7c00h
int 13h
jmp 7e00h ; jump to the next sector
; to fill this sector and make it bootable:
times 510-($-$$) db 0
dw 0AA55h
после этого раздела кода (с которого должен начинаться файл asm) вы можете написать код, и он будет загружен в память и выполнен.
обратите внимание, как мы не изменили dl (диск). Это связано с тем, что при первой загрузке компьютера dl устанавливается равным номеру диска, который был загружен, поэтому, предполагая, что мы хотим читать с диска, с которого мы загрузились, нет необходимости изменять dl.
INT 13h AH = 03h : запись секторов на диск
Параметры
AH
|
03ч
|
AL
|
Секторы для записи подсчета
|
CH
|
Отслеживать
|
CL
|
Сектор
|
DH
|
Голова
|
DL
|
Водить машину
|
ES: BX
|
Указатель адреса буфера
|
Полученные результаты
CF
|
Установить при ошибке, очистить, если ошибок нет
|
AH
|
Код возврата
|
AL
|
Фактический письменный подсчет секторов
|
INT 13h AH = 04h : Проверить сектора с диска
Параметры
AH
|
04ч
|
AL
|
Секторы для проверки подсчета
|
CH
|
Отслеживать
|
CL
|
Сектор
|
DH
|
Голова
|
DL
|
Водить машину
|
ES: BX
|
Указатель адреса буфера
|
Полученные результаты
CF
|
Установить при ошибке, очистить, если ошибок нет
|
AH
|
Код возврата
|
AL
|
Фактическое количество проверенных секторов
|
INT 13h AH = 05h : Форматировать дорожку
Параметры
AH
|
05ч
|
AL
|
Секторы для форматирования счетчика
|
CH
|
Отслеживать
|
CL
|
Сектор
|
DH
|
Голова
|
DL
|
Водить машину
|
ES: BX
|
Указатель адреса буфера
|
4-байтовое поле адреса
(применимо к PC / XT 286, AT, PS / 1 и PS / 2)
Байт
|
Имея в виду
|
Допустимые значения
|
1
|
Отслеживать
|
|
2
|
Голова
|
|
3
|
Сектор
|
|
4
|
Байт / сектор
|
0 = 128, 1-256, 2-512, 3-1024
|
Полученные результаты
CF
|
Установить при ошибке, очистить, если ошибок нет
|
AH
|
Код возврата
|
INT 13h AH = 06h : Форматирование дорожки устанавливает флаги плохого сектора
Параметры
AH
|
06ч
|
AL
|
Чередование
|
CH
|
Отслеживать
|
CL
|
Сектор
|
DH
|
Голова
|
DL
|
Водить машину
|
Полученные результаты
CF
|
Установить при ошибке, очистить, если ошибок нет
|
AH
|
Код возврата
|
INT 13h AH = 07h : Форматирование диска, начиная с дорожки
Параметры
AH
|
07ч
|
AL
|
Чередование
|
CH
|
Отслеживать
|
CL
|
Сектор
|
DH
|
Голова
|
DL
|
Водить машину
|
Полученные результаты
CF
|
Установить при ошибке, очистить, если ошибок нет
|
AH
|
Код возврата
|
INT 13h AH = 08h : чтение параметров привода
Параметры
Регистры
|
AH
|
08h = номер функции для read_drive_parameters
|
DL
|
индекс диска (например, 1-й жесткий диск = 80h)
|
ES: DI
|
установите значение 0000h: 0000h, чтобы обойти некоторые ошибки в BIOS
|
Полученные результаты
CF
|
Установить при ошибке, очистить, если ошибок нет
|
AH |
Код возврата
|
DL
|
количество жестких дисков
|
DH
|
логический последний индекс голов = number_of - 1 (потому что индекс начинается с 0)
|
CX
|
[7: 6] [15: 8] логический последний индекс цилиндров = number_of - 1 (поскольку индекс начинается с 0 )
[5: 0] логический последний индекс секторов на дорожке = number_of (поскольку индекс начинается с 1)
|
BL
|
тип привода (только дискеты AT / PS2)
|
ES: DI
|
указатель на таблицу параметров привода (только для дискет)
|
- Логические значения функции 08h могут / должны отличаться от физических значений CHS функции 48h.
- Регистр результатов CX содержит значения как для цилиндров, так и для секторов / дорожек, см. Примечание к функции 02h.
INT 13h AH = 09h : Инициализация характеристик пары приводов
Параметры
AH
|
09ч
|
DL
|
Водить машину
|
Полученные результаты
CF
|
Установить при ошибке, очистить, если ошибок нет
|
AH
|
Код возврата
|
INT 13h AH = 0Ah: чтение длинных секторов с диска
Единственное различие между этой функцией и функцией 02h (см. Выше) состоит в том, что функция 0Ah считывает 516 байт на сектор вместо 512. Последние 4 байта содержат код коррекции ошибок (ECC), контрольную сумму данных сектора.
INT 13h AH = 41h : Проверить наличие расширений
Параметры
Регистры
|
Описание
|
AH
|
41h = номер функции для проверки расширений
|
DL
|
индекс диска (например, 1-й жесткий диск = 80h)
|
BX |
55ААч
|
Полученные результаты
Регистры
|
Описание
|
CF
|
Установить на "Нет", очистить, если есть
|
AH
|
Код ошибки или основной номер версии
|
BX |
AA55h
|
CX
|
Битовая маска поддержки интерфейса:
- 1 - Доступ к устройству с использованием структуры пакета
- 2 - Блокировка и извлечение диска
- 4 - Расширенная поддержка дисковых накопителей (EDD)
|
INT 13h AH = 42h : расширенное чтение секторов с диска
Параметры
Регистры
|
Описание
|
AH
|
42h = номер функции для расширенного чтения
|
DL
|
индекс диска (например, 1-й жесткий диск = 80h)
|
DS: SI
|
сегмент: смещение указателя на DAP, см. ниже
DAP: пакет адреса диска
диапазон смещения |
размер
|
описание
|
00ч |
1 байт |
размер DAP (установите значение 10h)
|
01ч |
1 байт |
неиспользованный, должен быть нулевым
|
02ч..03ч |
2 байта
|
количество секторов для чтения (некоторые BIOS Phoenix ограничены до 127 секторов)
|
04ч..07ч |
4 байта
|
сегмент: указатель смещения на буфер памяти, в который будут перенесены сектора (обратите внимание, что x86 является прямым порядком байтов : если объявляется сегмент и смещение отдельно, смещение должно быть объявлено перед сегментом)
|
08h..0Fh |
8 байт
|
Абсолютный номер начала секторов для чтения (1-й сектор диска имеет номер 0) с использованием адресации логических блоков (обратите внимание, что нижняя половина идет перед верхней половиной)
|
|
Полученные результаты
Регистры
|
Описание
|
CF
|
Установить при ошибке, очистить, если ошибок нет
|
AH |
Код возврата
|
Как уже было сказано с int 13h AH = 02h, необходимо позаботиться о том, чтобы полный буфер находился внутри данного сегмента , то есть (BX + size_of_buffer) <= 10000h
INT 13h AH = 43h : расширенные секторы записи на диск
Параметры
Регистры
|
Описание
|
AH
|
43h = номер функции для расширенной записи
|
AL
|
- бит 0 = 0: закрыть проверку записи,
- бит 0 = 1: открытая проверка записи,
- бит 1-7: зарезервирован, установлен в 0
|
DL
|
индекс диска (например, 1-й жесткий диск = 80h)
|
DS: SI
|
сегмент: смещение указателя на DAP
|
Полученные результаты
Регистры
|
Описание
|
CF
|
Установить при ошибке, очистить, если ошибок нет
|
AH |
Код возврата
|
INT 13h AH = 48h : расширенное считывание параметров привода
Параметры
Регистры
|
Описание
|
AH
|
48h = номер функции для extended_read_drive_parameters
|
DL
|
индекс диска (например, 1-й жесткий диск = 80h)
|
DS: SI
|
сегмент: смещение указателя на буфер результатов, см. ниже
Буфер результатов
диапазон смещения |
размер
|
описание
|
00ч..01ч |
2 байта |
размер буфера результатов (установите значение 1Eh)
|
02ч..03ч |
2 байта |
информационные флаги
|
04ч..07ч |
4 байта
|
физическое количество цилиндров = последний индекс + 1 (потому что индекс начинается с 0)
|
08h..0Bh |
4 байта
|
физическое количество голов = последний индекс + 1 (потому что индекс начинается с 0)
|
0Ch..0Fh |
4 байта
|
физическое количество секторов на дорожку = последний индекс (поскольку индекс начинается с 1)
|
10ч..17ч |
8 байт
|
абсолютное количество секторов = последний индекс + 1 (потому что индекс начинается с 0)
|
18ч..19ч |
2 байта |
байтов на сектор
|
1Ah..1Dh |
4 байта
|
необязательный указатель на параметры конфигурации Enhanced Disk Drive (EDD), который может использоваться для последующих вызовов прерывания 13h Extension (если поддерживается)
|
|
Полученные результаты
Регистры
|
Описание
|
CF
|
Установить при ошибке, очистить, если ошибок нет
|
AH |
Код возврата
|
Физические значения CHS функции 48h могут / должны отличаться от логических значений функции 08h.
INT 13h AH = 4Bh: получить тип эмуляции накопителя
Параметры
Регистраторы
|
Описание
|
AH
|
4Bh = получить тип эмуляции диска
|
AL
|
01
|
DL
|
индекс диска (например, 1-й жесткий диск = 80h)
|
DS: SI
|
указывает на пустую структуру для результата. должен быть размером 13 часов
|
Полученные результаты
Регистры
|
Описание
|
CF
|
Установить при ошибке, очистить, если ошибок нет
|
ТОПОР
|
Код возврата
|
DS: SI
|
Указывает на структуру спецификации
Структура спецификации
Компенсировать
|
Размер (байт)
|
Описание
|
00ч
|
1
|
Размер пакетов в байтах (13h)
|
01ч
|
1
|
Тип загрузочного носителя:
Биты
|
|
0–3
|
0000b: без эмуляции
0001b: 1,2 МБ дискеты
0010b: дискета 1,44 МБ
0011b: дискета 2,88 МБ
0100b: жесткий диск
|
4-5
|
Зарезервированный
|
6
|
Изображение содержит драйвер ATAPI
|
7
|
Образ содержит драйвер SCSI
|
|
02ч
|
1
|
Номер диска (индекс диска)
|
03ч
|
1
|
Номер контроллера компакт-диска
|
04ч
|
4
|
Логический адрес блока (LBA) образа диска для эмуляции
|
08ч
|
2
|
Спецификация устройства:
бит 0: привод является ведомым, а не ведущим
биты 7-0: LUN и PUN
|
0Ач
|
2
|
Сегмент буфера 3K для кэширования чтения компакт-дисков
|
0Ч
|
2
|
Сегмент начального загрузочного образа, начиная с сегмента 7c0h
|
0Eh
|
2
|
Количество секторов (длиной 512 байт) для загрузки
|
10ч
|
1
|
Младший байт счетчика цилиндров (от int 8h)
|
11ч
|
1
|
Счетчик секторов (от int 8h)
|
12ч
|
1
|
Подсчет головы (от int 8h)
|
|
Смотрите также
использованная литература
внешние ссылки