Меню сайта

Урок 162. Дискета ( Области данных драйвера BIOS дискеты )

Дискета

— — — Программа обслуживания дисковода BIOSвыполняет блочные операции с
— — — адаптером дисковода. — BIOS позволяет вызывающей программе указывать
— — — адреса дорожки и сектора для командычтения или записи. — BIOS
— — — управляет адаптером и самим дисководом,настраивая их на операцию,
— — — а затем пересылает данные из буфера или вбуфер пользователя.
— — — После операции BIOS собирает результаты ипередает их как часть
— — — выходных параметров программы обслуживаниядисков BIOS. — Вызывающей
— — — программе не нужно обслуживать различныефункции контроллера дисков
— — — и беспокоиться о временных соотношениях.

Области данных драйвера BIOS дискеты


— — — Области данных дискового драйвера BIOSначинаются у смещения 3EH в
— — — сегменте DATA. — Первые четыре байта поля данных хранят информацию
— — — состояния дисководов междуоперациями. — Семибайтовый буфер с именем
— — — NEC_STATUS хранит информацию о состоянииконтроллера, возвращаемую
— — — контроллером дисководов фирмы NEC послеопераций чтения и записи.
— — — Как видно из управляющих программ, этотбуфер позволяет BIOS
— — — расшифровывать любую ошибку ипредоставлять все ошибки в виде
— — — простого набора кодов ошибок. — Эти коды ошибок программа BIOS
— — — помещает в байт с именем DISKETTE_STATUS,одновременно возвращая
— — — его в вызывающую программу в регистре AHпосле выполнения операций
— — — ввода-вывода. — Операторы ассемблера после имени DISKETTE_STATUS
— — — перечисляют все коды ошибок, которые можетполучить вызывающая
— — — программа.

— — — — — Контроллер дисковода фирмы NEC знаетположение головки
— — — чтения-записи в каждом из четырехдисководов, которые он может
— — — обслуживать. Но для этого контроллердолжен войти в синхронизацию с
— — — этими механизмами до того, как он начнетточно отслеживать текущее
— — — положение головок- синхронизация нужнапотому, что после включения
— — — питания или после сброса контроллер фирмыNEC не знает, где
— — — находятся головки. Байт SEEK_STATUSиспользует младшие 4 бита, по
— — — одному биту на механизм, чтобы указать,известно ли контроллеру
— — — текущее положение головок или нет. КогдаBIOS посылает сигнал
— — — сброса в контроллер, он заносит нуль вэтот байт. Перед каждой
— — — операцией обмена данными с дисководамиBIOS проверяет этот байт
— — — установки. Если содержимое бита,соответствующего механизму, с
— — — которым идет работа, равно 0, BIOSпосылает команду рекалибровки
— — — перед командой установки. На этаперекалибровки головка
— — — чтения-записи устанавливается на дорожку0, и теперь контроллер и
— — — механизм согласованы в смысле положенияголовки. Все последующие
— — — операции установки делаются без предварительнойрекалибровки.

— — — — — Операция рекалибровки играет важную роль ипри обычной работе
— — — для устранения условий появления ошибки.После любой ошибки
— — — рекомендуется сбросить контроллер. Этимобеспечивается сброс
— — — условия появления ошибки в контроллере.Байт SEEK_STATUS при этом
— — — устанавливается равным нулю. Поэтому передтем, как прикладная
— — — программа повторит операцию (неудачнуюоперацию нужно повторять по
— — — крайней мере три раза, так как большинствотаких ошибок устранимы и
— — — не повторяются), выполнится рекалибровкамеханизма. Это
— — — автоматически устраняет ошибку, вызваннуюнеправильной установкой,
— — — когда головка не попала на нужную дорожку.В обычных случаях
— — — рекалибровка и повторная установка на этуже дорожку устраняет
— — — ошибку.

— — — — — Байты MOTOR_STATUS и MOTOR_COUNT управляютдвигателем
— — — дисковода. Адаптер дисковода имеетуправляющий регистр, который
— — — позволяет выбрать двигатель дисковода,который включается в двнное
— — — время. В этот управляющий регистр можнотолько записывать данные,
— — — читать из него нельзя, и байт MOTOR_STATUSявляется его образом в
— — — памяти. Перед тем, как выполнить операциюзаписи-чтения на дискете,
— — — вы должны дать возможность двигателюразогнаться до необходимой
— — — скорости, подождав некоторое время — околополовины секунды. Если
— — — двигатель уже
работает, ждать не нужно.Чтение конкретного бита в
— — — этом байте состояния позволяет определить,нужно ли ожидание.

— — — — — Далее после выполнения операции важнооставить двигатель
— — — включенным. Есть вероятность, что доступ кдискете вскоре
— — — повторится- однако здесь нужно выбиратьмежду износом дискеты и
— — — увеличением времени доступа. BIOS недопускает непрерывного
— — — вращения двигателей дисководов, для этогов ячейке MOTOR_COUNT
— — — находится уменьшающийся счетчик. Прикаждом прерывании от таймера
— — — этот счетчик уменьшается, и когда счетчикдостигает нуля, все
— — — двигатели выключаются. Обычно временныепараметры установлены так,
— — — что двигатель работет примерно две секундыпосле завершения
— — — операции.

— — — — — В тексте программы обслуживания дисководовBIOS можно увидеть,
— — — что величина MOTOR_COUNT на одном изпервых шагов устанавливается
— — — равной 255. Тем самым гарантируется, чтопрерывание от таймера не
— — — выключит двигатель дисковода в течениеоперации. Текущее значение,
— — — представляющее две секунды, записывается вбайт счетчика перед
— — — возвратом из BIOS в вызывающую программу.

— — — — — На Фиг.9.4 приведены команды управлениядисководом. Команда
— — — сброса пересылает в контроллер параметрымеханизма, такие как режим
— — — работы ПДП и скорость предачи. Командасброса также выполняет
— — — аппаратный сброс контроллера. Фирма IBMрекомендует выполнять это
— — — действие после любой ошибки. Этонеобходимо, так как некоторые
— — — ошибки (в частности, ошибка поисчерпыванию времени операции,
— — — получающаяся, если в дисководе нетдискеты) ставят контроллер в
— — — затруднительное положение. После такихошибок вернуть контроллер к
— — — нормальной работе можно только с помощьюсброса.

Категория: Программирование на Ассемблере | Дата: 01.03.13

Меню раздела
Блок