00h – сброс дисковой подсистемы.
00h – сброс дисковой подсистемы.
| На входе:
| AH = 00h
|
|
| DL = Адрес дисковода (0, 1, ..., 80h, 81h, ... )
|
| На выходе:
| -
|
| Примечание:
| PC, XT, AT, PS/2
|
Эта функция вызывает сброс и рекалибровку дискового контроллера (головки устанавливаются на нулевой цилиндр). Если в адресе дисковода старший бит (бит 7 ) установлен в 1, выполняется сброс контроллера НМД. Сброс рекомендуется выполнять после того, как произошла ошибка при выполнении других операций, таких как чтение или запись. После сброса можно попытаться повторить операцию.
01h - получить состояние дисковой подсистемы.
| На входе:
| AH = 01h
|
|
| DL = Адрес дисковода (0, 1, ..., 80h, 81h, ... )
|
| На выходе:
| AL = Состояние дисковода после завершения последней операции
|
| Примечание:
| PC, XT, AT, PS/2
|
Эта функция может быть использована для анализа результата выполнения дисковой операции и получения кода ошибки. Передаваемый в регистре AL код ошибки функция берет из области данных BIOS - из байта с адресом 0000: 0441h.
Код ошибки может принимать следующие значения:
| 00h
| Успешное завершение операции
|
| 01h
| Неправильная команда
|
| 02h
| Не найдена адресная метка
|
| 03h
| Попытка записи на диск, защищенный от записи
|
| 04h
| Сектор не найден
|
| 05h
| Ошибка при сбросе (НМД)
|
| 06h
| Произошла замена дискеты
|
| 07h
| Неправильные параметры дисковода (НМД)
|
| 08h
| Переполнение канала ПДП (НГМД)
|
| 09h
| Переход за границу 64К при работе с ПДП
|
| 0Ah
| Обнаружен плохой сектор (НМД)
|
| 0Bh
| Обнаружена плохая дорожка (НМД)
|
| 0Ch
| Неправильный номер дорожки
|
| 0Dh
| Неправильный номер сектора при форматировании (НМД)
|
| 0Eh
| Обнаружена адресная метка управляющих данных (НМД)
|
| 0Fh
| Ошибка ПДП (НМД)
|
| 10h
| Обнаружена ошибка в CRC/ECC
|
| 11h
| Данные скорректированы с использованием ECC (НМД)
|
| 20h
| Сбой контроллера
|
| 40h
| Сбой при поиске дорожки
|
| 80h
| Таймаут - программа не успевает обрабатывать данные
|
| AAh
| Дисковод не готов (НМД)
|
| BBh
| Неизвестная ошибка (НМД)
|
| CCh
| Сбой при записи (НМД)
|
| E0h
| Ошибка регистра состояния (НМД)
|
| FFh
| Ошибка операции считывания (НМД)
|
08h - получить текущие параметры дисковода (НМД).
| На входе:
| AH = 08h
|
|
| DL = Адрес дисковода (0, 1, ..., 80h, 81h, ... )
|
| На выходе:
| AH = Состояние дисковода после завершения последней операции
|
|
| CF = 1, если произошла ошибка,
0, если ошибки нет
|
|
| BL = тип дисковода (только для AT и PS2)
|
|
| DL = количество НМД, обслуживаемых первым контроллером
|
|
| DH = максимальный номер головки
|
|
| CL = максимальный номер сектора
|
|
| CH = максимальный номер цилиндра
|
|
| ES: DI = адрес таблицы параметров дисковода
|
| Примечание:
| PC, XT, AT, PS/2
|
С помощью этой функции программа может определить тип дисковода, количество дисководов, обслуживаемых первым дисковым контроллером и другие параметры дисковода, которые нужны программе для организации доступа к диску на физическом уровне. Тип дисковода, возвращаемый в регистре BL, может принимать следующие значения:
|
| не используется;
|
|
| 360К, 40 дорожек, 5, 25 дюймов;
|
|
| 1, 2М, 80 дорожек, 5, 25 дюймов;
|
|
| 720 К, 80 дорожек, 3, 5 дюйма;
|
|
| 1, 44М, 80 дорожек, 3, 5 дюйма.
|
Еще раз отметим, что прерывание INT 13h используется для организации ввода/вывода на диск. Для определения количества установленных НГМД используется значение из слова конфигурации прерывания INT 11h, а также для определения наличия НЖМД. Для того же, чтоб определить тип установленных НЖМД и НГМД можно использовать информацию, хранимую в CMOS-памяти.
15h – Получить тип дисковода
| На входе:
| AH = 15h
|
|
| DL = Адрес дисковода (0, 1, ..., 80h, 81h, ... )
|
| На выходе:
| AH = Тип дисковода
|
|
| CX: DX = количество секторов размером 512 байтов
|
| Примечание:
| AT, PS/2
|
Возвращаемый этой функцией тип дисковода может принимать следующие значения:
|
| диск отсутствует;
|
|
| НГМД без аппаратных средств обнаружения замены дискеты;
|
|
| НГМД оснащенный средствами обнаружения замены дискеты;
|
|
| НМД.
|
С помощью этой функции программа может определить тип диска и возможность обнаружения замены магнитного носителя (дискеты).
Анализ содержимого CMOS-памяти
Программа не может непосредственно адресовать CMOS-память, как обычную оперативную память. Для работы с CMOS-памятью необходимо использовать порты ввода/вывода с адресами 70h и 71h, причем процедура записи или чтения состоит из двух шагов:
- на первом шаге операции чтения или записи программа должна записать в порт 70h номер нужной ячейки CMOS-памяти ( 0... 3Fh );
- на втором шаге программа должна обратиться к порту 71h для выполнения записи в указанную ячейку памяти или чтения из нее.
Приведем фрагмент программы, составленной на языке ассемблера, который считывает байт из CMOS-памяти с адресом 12h:
mov al, 12h
out 70h, al ; задаем адрес в CMOS-памяти
jmp $+2 ; небольшая задержка
in al, 71h ; записываем в AL считанное значение
Запись в CMOS-память выполняется аналогично.
При анализе конфигурации дисковой системы для нас представляют наибольший интерес ячейки CMOS-памяти со следующими адресами 14h, 10h и 12h.
В памяти CMOS хранится:
| Адрес ячейки
| Содержимое
|
| 00h - 0Dh
| Используются часами реального времени
Вариант №6.
|
| 0Eh
| Байт состояния диагностики при включении питания
Вариант №7.
|
| 0Fh
| Байт состояния отключения
|
| 10h
| Тип НГМД
Вариант №8.
|
| 11h
| Зарезервировано
|
| 12h
| Тип НМД (если меньше 15)
Вариант №1.
|
| 13h
| Зарезервировано
|
| 14h
| Конфигурация оборудования
Вариант №11.
|
| 15h - 16h
| Объем основной памяти
Вариант №2.
|
| 17h - 18h
| Объем расширенной памяти
Вариант №2.
|
| 19h
| Тип первого НМД (если он больше 15)
Вариант №1
|
| 1Ah
| Тип второго НМД (если он больше 15)
Вариант №1
|
| 1Bh - 20h
| Зарезервировано
|
| 21h - 2Dh
| Зарезервировано
|
| 2Eh - 2Fh
| Контрольная сумма ячеек 10h - 20h
|
| 30h - 31h
| Объем расширенной памяти
Вариант №2.
|
| 32h
| Текущее столетие в двоично-десятичном коде (19h для 19-го столетия)
|
| 33h
| Различная информация
|
| 34h - 3Fh
| Зарезервировано
|
Рассмотрим подробно назначение отдельных ячеек CMOS-памяти.
Воспользуйтесь поиском по сайту: