Рефераты. Работа с дисками

второму (B:) и т. д. Адреса 80h, 81h соответствуют первому и второму НМД,

соответственно.

5.2 Определение состояния дисковой системы.

|На входе: |AH |01 |

| |DL |Адрес устройства НГМД или НМД (0, 1, ..., 80h, 81h, |

| | |...) |

|На выходе: |AL |Состояние устройства после завершения последней |

| | |операции |

|Примечание:| |PC, XT, AT, PS/2 |

Эта функция может быть использована для анализа результата выполнения

операции и получения кода ошибки. Функция берет передаваемый в регистре AL

код ошибки из области данных BIOS (байт с адресом 0000h: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 |Ошибка операции чтения (только для НМД) |

5.3 Чтение сектора.

|На входе: |AH |02h |

| |AL |Количество секторов, которые нужно прочитать |

| |CH |Номер дорожки |

| |CL |Номер сектора |

| |DH |Номер головки |

| |DL |Адрес устройства НГМД или НМД (0, 1, ..., 80h, 81h, |

| | |...) |

| |ES:BX |Адрес буфера для данных |

|На выходе: |AH |Состояние дисковода после завершения последней |

| | |операции |

| |CF |1, если произошла ошибка, |

| | |0, если ошибки нет |

|Примечание:| |PC, XT, AT, PS/2 |

Эта функция позволяет прочитать один или несколько секторов диска в

буфер, находящийся в оперативной памяти. Для НМД номер дорожки и номер

сектора задаются следующим образом: биты 5...0 регистра CX задают номер

сектора, а биты 15...6 - номер дорожки. Перед чтением необходимо

подготовить таблицу параметров НГМД или НМД.

5.4 Запись сектора.

|На входе: |AH |03h |

| |AL |Количество секторов, которые нужно прочитать |

| |CH |Номер дорожки |

| |CL |Номер сектора |

| |DH |Номер головки |

| |DL |Адрес устройства НГМД или НМД (0, 1, ..., 80h, 81h, |

| | |...) |

| |ES:BX |Адрес буфера для данных |

|На выходе: |AH |Состояние устройства после завершения последней |

| | |операции |

| |CF |1, если произошла ошибка, |

| | |0, если ошибки нет |

|Примечание:| |PC, XT, AT, PS/2 |

Функция записи секторов аналогична предыдущей, за исключением

направления перемещения данных - данные записываются из буфера в один или

несколько секторов диска. Необходимо отметить, что при работе с НГМД не для

всякой BIOS будет выполняться ожидание перед выполнением операции записи,

пока двигатель раскрутится до рабочей скорости. В результате программа

может получить признак ошибки. Прежде чем делать вывод о причинах ошибки,

следует сбросить контроллер НГМД функцией 00H и повторить операцию записи

три раза.

5.5 Проверка сектора.

|На входе: |AH |04h |

| |AL |Количество секторов, которые нужно проверить |

| |CH |Номер дорожки |

| |CL |Номер сектора |

| |DH |Номер головки |

| |DL |Адрес устройства НГМД или НМД (0, 1, ..., 80h, 81h, |

| | |...) |

|На выходе: |AH |Состояние устройства после завершения последней |

| | |операции |

| |AL |Количество проверенных секторов |

| |CF |1, если произошла ошибка,0, если ошибки нет |

|Примечание:| |PC, XT, AT, PS/2 |

С помощью этой функции программа может убедиться, что указанные

секторы существуют и их можно прочесть. Данные проверяются по методу

циклического избыточного контроля (CRC). Адрес буфера не нужен, так как при

проверке секторов чтение данных в оперативную память не выполняется.

5.6 Форматирование дорожки.

|На входе: |AH |05h |

| |AL |Количество секторов, которые нужно создать на |

| | |дорожке, или фактор чередования для НМД IBM PC/XT |

| |CH |Номер дорожки |

| |CL |Номер сектора |

| |DH |Номер головки |

| |DL |Адрес устройства НГМД или НМД (0, 1, ..., 80h, 81h, |

| | |...) |

| |ES:BX |Адрес буфера формата, используется для НГМД и НМД, |

| | |установленных в IBM PC/XT |

|На выходе: |AH |Состояние устройства после завершения последней |

| | |операции |

| |CF |1, если произошла ошибка, |

| | |0, если ошибки нет |

|Примечание:| |PC, XT, AT, PS/2 |

Функция форматирования предназначена для начального формирования

структуры дорожки диска. Эта функция разрушает все данные, записанные на

дорожке. С помощью функции 05h вы можете за один раз отформатировать только

одну дорожку с указанным в регистре CH номером.

Для функции форматирования необходимо задать два параметра, на которых

мы остановимся подробнее - фактор чередования и адрес буфера формата.

Что такое фактор чередования? Этот фактор определяет

последовательность расположения секторов на дорожке. Секторы могут

располагаться в порядке своих номеров, через один, через два и т. д. Способ

размещения секторов определяется значением фактора чередования.

Некоторые программы, предназначенные для подготовки НМД к работе,

требуют указания величины фактора чередования при выполнении

низкоуровневого форматирования.

Для чего может понадобиться несмежное расположение секторов с

последовательными номерами на дорожке диска? При последовательном

расположении секторов может получиться так, что процессор не будет успевать

обрабатывать смежные секторы за один проход дорожки.

Например, программа считывает последовательно второй и третий сектор.

В момент времени, когда второй сектор уже считан, при быстром вращении

диска к моменту начала чтения третьего сектора головки могут оказаться в

середине третьего сектора. В результате диск совершит еще один оборот,

прежде чем головки окажутся в начале третьего сектора. Поэтому если

программа последовательно обращается к смежным секторам, может получиться

так, что для чтения каждого сектора потребуется один оборот. Если же

секторы будут расположены через один или через два, количество оборотов

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.