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-памяти.
Воспользуйтесь поиском по сайту: