Открой свой мир программирования и    
цифровых технологий
Базовые таблицы диска
Автор lisa   
19.07.2011 г.

Как мы упомянули в начале этой главы, ROM BIOS поддерживает ряд базовых.таблиц, которые описывают возможности каждого из дисководов для дискет и фиксированных дисков компьютера. Во время начального запуска системы ROM BIOS связывает соответствующую базовую таблицу с каждым дисководом для фиксированных дисков. (В энергонезависимой памяти CMOS RAM PC/AT и PS/2 имеется байт данных, указывающий на то, какую из нескольких таблиц ROM BIOS использовать.) Нет никаких причин, обосновывающих изменение параметров в таблице для фиксированного диска, после того как эти параметры были уже установлены ROM BIOS. Внесение изменений может привести к искажению данных на диске.

В случае с дисководами для дискет ситуация несколько иная. Может оказаться, что для того, чтобы удовлетворить требованиям различных форматов дискет, надо будет скорректировать базовую таблицу диска, связанную с соответствующим дисководом. Следующие несколько страниц мы посвятим описанию структуры базовой таблицы для дисковода для дискет и демонстрации того, какую пользу можно извлечь из модифицированной таблицы. Базовая таблица для диска включает 11 байтов, представленных в табл. 10.7.

Байты 0 и 1 называются байтами-указателями. Они являются частью командной строки, посылаемой контроллеру дисковода для дискет, который в технических справочных руководствах фирмы IBM называется также NEC-контроллером (Nippon Electric Company). Старшие четыре бита байта 0 указывают время шагового хода (Step Rate Time SRT), т.е. время, необходимое контроллеру дисковода для перемещения головок с одной дорожки на другую. Значение хода SRT, принятое по умолчанию в ROM BIOS для дисководов для дискет, несколько завышено; для некоторых дисководов DOS уменьшает эту величину, чтобы ускорить их работу.

Байт 2 указывает, как долго мотор дисковода для дискет должен оставаться в рабочем состоянии после каждой операции. Мотор остается в рабочем состоянии на тот случай, если вновь понадобится обращение к дискете. Это время задается кратным числу тиканий часов (одной секунде соответству­ют приблизительно 18,2 тиканий). Во всех версиях данной таблицы эта величина устанавливается равной 37 (25Н). Это значит, что мотор остается в рабочем состоянии около 2 с.

Байт 3 задает код длины сектора — это тот же самый код N, используемый при операции форма­тирования (см. службу 05Н). Обычно он задается равным двум, что соответствует привычной длине сектора 512 байтов. При любой операции чтения, записи или проверки код длины в базовой таблице должен иметь надлежащее значение, особенно при работе с секторами нестандартной длины.

Байт 4 задает номер последнего сектора на дорожке.

Байт 5 указывает размер промежутка между секторами, который учитывается при чтении и записи данных. Фактически это значение несет информацию для контроллера дисковода для дискет о том, сколько можно повременить с поиском адресного маркера следующего сектора, что позволяет избежать ненужного просмотра бессмыслицы на дискете. Этот временной интервал известен как поисковый промежуток.

Байт 6 называется длиной передачи данных (data transfer length — DTL), и он задается равным FFH (или в десятичной нотации 255). Этот байт устанавливает максимальную длину данных в случае, если длина сектора не указана.

Байт 7 определяет размер промежутка между секторами при форматировании дорожки. Обычно этот размер превосходит размер поискового промежутка на смещение,равное 5. Стандартный размер промежутка для форматирования зависит от дисковода для дискет. Например, для дисковода 1,2 МБ на PC/AT он равен 54Н, для 3,5-дюймового дисковода на PS/2 — 6СН.

Байт 8 задает значение данного, записываемого в каждый байт каждого сектора форматируемой дорожки дискеты. Значение, принятое по умолчанию, равно F6H, т.е. знаку деления. Вы можете его заменить на другое значение по своему усмотрению, если считаете, что на это имеется веская причина.

Байт 9 задает время установки головки, т.е. время, в течение которого система должна ждать прекращения вибрации после выполнения поиска новой дорожки. Это значение также зависит от аппаратной части дисковода. На первоначальной PC оно равнялось 19Н (или 25 мс), однако принятое по умолчанию для 1,2 мегабайтового дисковода PC/AT и для дисководов для дискет PS/2 это значение равно всего лишь 0FH (т.е. 15 мс).

Байт ОАН (в десятичной нотации 10), последний байт дисковой базовой таблицы, устанавливает промежуток времени, позволяющий мотору дисковода набрать требуемую скорость. Это время измеряется в единицах, равных 1/8 с.

Будет забавно повозиться с этими базовыми величинами; среди них вполне предостаточно таких, которые способны пробудить у вас чувства восторга и озорства. Для этого вам нужно написать программу, которая строит собственную специально подготовленную дисковую базовую таблицу в буфере памяти, а затем сообщить ROM BIOS о том, что следует использовать вашу таблицу, выполнив для этого следующие шаги:

  • 1.Сохранить сегментный адрес текущей дисковой базовой таблицы (т.е. значение, хранящееся в векторе прерывания 1ЕН — 0000:0078Н).
  • 2.Записать сегментный адрес вашей модифицированной таблицы в вектор прерывания 1ЕН.
  • 3.Вызвать службу ROM BIOS ООН для выполнения сброса дисковой системы. ROM BIOS заново инициализирует контроллер дисковода для дискет в соответствии с параметрами из вашей таблицы.

Когда вы закончите экспериментировать, не забудьте восстановить адрес предыдущей дисковой базовой таблицы, а также снова выполнить сброс дисковой системы.

 
« Пред.   След. »
Скачать книги по программированию