PDP-11 , Электроника-60, СМ-1420 и им подобные

Главная | Каталог статей | Регистрация | Вход

Приветствую Вас Гость | RSS

Дорогие посетители.Убедительно просим Вас Загружать имеющуюся у Вас информацию (Файлы образов дисков, Исходники, Книги и т.д.) касающуюся ПЭВМ с архитектурой PDP-11.

Меню сайта

Главная страница

Информация о сайте

Каталог статей

Гостевая книга

Каталог файлов

Каталог сайтов

Законодательство

Форум

Google

Форма входа

E-mail:

Пароль:

запомнить

Забыл пароль | Регистрация

Категории раздела

Contrib [45]
Статьи, взятые из разных источников.

Поиск

Поиск на сайте

Поиск в Internet

Облако тэгов

LSI-11 11/83 RADIX-50 сеть 11/70 RT-11 БК-0011 ДВК приставка Бортника 11/93 КНГМД БК бк-0010 Rtty БК0010 PDP-11 Схема радиосвязь УКНЦ ANDOS Последняя версия RT-11 Кроскомпилятор сопроцессор

Прогноз погоды

Статистика

Онлайн всего: 1

Гостей: 1

Пользователей: 0

Поиск

Главная » Статьи » Contrib

КОНТРОЛЛЕР IDE ВИНЧЕСТЕРА ДЛЯ БК

КОНТРОЛЛЕР IDE ВИНЧЕСТЕРА ДЛЯ БК

В. Е. Новак
Версия 1.21 от 27.01.95

Плата контроллера выполняет функции формирователя интер-
фейсных сигналов, дешифратора адресов для регистров НЖМД, имеет
свое ПЗУ (160000-167777) со слегка модифицированной 326-прошив-
кой и базовым драйвером НЖМД и статическое ОЗУ (170000-176777).
ДЛЯ ГУРМАНОВ: драйвер расширенной арифметики в 326-ой про-
шивке оставлен, но, в целях экономии места, заменен на более ко-
роткий (старая длина - 2400, новая - 776 байт, но без поддержки
FIS). Существует возможность подключения пользовательского драй-
вера арифметики, например, поддерживающего FIS или более опти-
мального по быстродействию.
Существующая идеология позволяет подключать любые IDE
накопители емкостью до 2 ГБайт (63. сектора, 16. головок, 4095.
дорожек). Накопитель может быть разбит не более, чем на 124.
логических диска произвольного об'ема (от 5 кБ до 32 МБ каждый).

РЕГИСТРЫ НЖМД

Адрес регистра Назначение
(чтение/запись)

177740 статус/команда
177742 выбор НЖМД и головки
177744 ст.байт номера дорожки
177746 мл.байт номера дорожки
177750 номер сектора
177752 счетчик секторов
177754 код ошибки/не используется
177756 данные чтения/записи

177741 адрес накопителя/не используется
177743 2-й статус/сброс

ЗАМЕЧАНИЯ:
1. 177741 не старший байт 177740, а самостоятельный ре-
гистр, расположенный по нечетному адресу (аналогично и 177743).
2. Ввиду того, что у НЖМД и БК разные понятия 0 и 1 на шине
(единице на шине БК соответствует низкий уровень напряжения, а
на шине НЖМД - высокий), под фразой "бит установлен" следует по-
нимать его отсутствие, т.е. все данные представлены в инверсном
коде.
3. Все коды ошибок, команды и константы, относящиеся к ре-
гистрам НЖМД, даны в восьмеричном коде и проинвертированы (т.е.
"готовы для употребления").
4. ДЛЯ ПРОГРАММИСТОВ: Байтовые команды записи в ОЗУ платы
контроллера НЕ РАБОТАЮТ.
Регистр данных (177756) используется для обмена данными с
НЖМД. Передача данных осуществляется словами. При выполнении
длинных операций байты ЕСС передаются байтами.

Регистр ошибок (177754) определяет состояние НЖМД после вы-
полнения операции. Состояние этого регистра действительно:
1) после выполнения команд, если установлен бит ERR регист-
ра состояния;
2) после выполнения внутренней диагностики НЖМД при включе-
нии питания.

В диагностическом режиме и после выполнения команды "Внут-
ренняя диагностика" содержимое регистра ошибок указывает на сле-
дующее:
376 - нет ошибки;
375 - ошибка микроконтроллера;
374 - ошибка буферного ОЗУ;
373 - ошибка аппаратуры ECC;
372 - ошибка микропроцессора НЖМД;
Остальные коды говорят о полной неисправности накопителя.

Значения битов регистра ошибок после выполнения других ко-
манд:
Бит 0 (AMNF) Data Adress Mark Not Found - устанавливается
во время выполнения команды "Чтение секторов", если адресный
маркер данных соответствующего сектора не найден после правиль-
ного нахождения идентификатора.
Бит 1 (T0NF) Track 0 Not Found - устанавливается только в
команде "Рекалибровка", если не обнаружена Дорожка 0.
Бит 2 (ABRT) Aborted Command - устанавливается при получе-
нии из НЖМД состояния "Write fault", "Not seek complete", "Drive
not ready" или когда была загружена недействительная команда.
Причина ошибки может быть определена при помощи регистров состо-
яния и ошибки.
Бит 3 - не используется.
Бит 4 (IDNF) ID Not Found - требуемый цилиндр, головка,
сектор не могут быть обнаружены или же произошла ошибка ECC в
поле идентификатора.
Бит 5 - не используется.
Бит 6 (UNC) Uncorrect Data - ошибка ECC в поле данных. Ус-
танавливается в случае некорректируемой ошибки.
Бит 7 (BBK) Bad Mark Block - в идентификаторе обнаружена
метка дефектного сектора.

Регистр счетчика секторов (177752) содержит количество сек-
торов, требующееся для операции. Передача одного сектора проис-
ходит при значении 376, двух - при значении 375 и т.д.. Если при
выполнении передачи произошла ошибка записи или чтения очередно-
го сектора, то передача прекращается и в регистре находится ко-
личество непереданных секторов, оставшееся после обнаружения
ошибки. При успешном завершении команды содержимое этого регист-
ра равно 377.

Регистр номера сектора (177750) содержит стартовый номер
сектора. После обработки каждого сектора содержимое этого ре-
гистра корректируется. После выполнения команды в данном регис-
тре находится номер последнего обработанного сектора или номер
сектора, в котором произошла ошибка. Нумерация секторов произво-
дится, начиная с 1 (т.е. 376 - 1-й сектор, 375 - 2-й и т.д.).
Максимальный номер стартового сектора (а также максимальный но-
мер головки) определяется при конфигурации НЖМД.

Регистр младшего (177746) и старшего (177744) байтов номера
дорожки определяют номер начальной дорожки для которой будет вы-
полняться команда.

Регистр выбора НЖМД/номера головки (177742) имеет следующий
вид:

Биты 0-3 - двоичный код выбранной головки.
Бит 4 - выбор НЖМД, DRV = 0 выбран НЖМД 0,
DRV = 1 выбран НЖМД 1.

Например: 377 - головка 0, привод 0;
376 - головка 1, привод 0 и т.д..

ПРИМЕЧАНИЕ: Базовый драйвер, размещенный в ПЗУ платы контроллера
поддерживает только один привод. Для двух накопителей, а также
для других нужд существует возможность размещения в ОЗУ платы
контроллера драйвера пользователя.

Регистр состояния (177740 по чтению) отображает текущее со-
стояние НЖМД. Значение этого регистра обновляется после выполне-
ния каждой команды. Если установлен бит BSY этого регистра, то
любые обращения к НЖМД запрещены и значения остальных битов не-
действительны.

Значения битов регистра состояния:
Бит 0 (ERR) Error - указывает, что предыдущая команда за-
кончилась с ошибкой, и что в регистре ошибок установлены один
или несколько битов. Используется для быстрой проверки успешного
завершения команды. Сбрасывается при записи кода новой команды.
Бит 1 (INX) Index - этот бит устанавливается при каждом
обороте магнитного диска. В современных моделях не используется.
Бит 2 (CORR) Corrected Data - индицирует, что при считыва-
нии данных произошла ошибка, которая была успешно скорректирова-
на аппаратурой ECC. Корректируемые ошибки не прекращают мульти-
секторную передачу.
Бит 3 (DRQ) Data Request - этот бит показывает, что имеется
запрос на обмен данными с буфером сектора НЖМД. По этому запросу
необходимо прочитать буфер или записать в него данные, в зависи-
мости от команды.
Бит 4 (DCS) Drive Seek Complete - индицирует, что головки
чтения/записи завершили операцию поиска.
Бит 5 (WFT) Write Fault - указывает на неисправность в на-
копителе или попытку выполнения команды "Запись секторов" с не-
корректными параметрами.
Бит 6 (DRDY) Drive Ready - устанавливается, когда НЖМД го-
тов к выполнению команды.
Бит 7 (BSY) Busy - устанавливается во время выполнения ко-
манды или диагностики НЖМД. Когда этот бит установлен, никакие
другие биты регистра состояния не являются действительными.

Регистр команд (177740 по записи) используется для загрузки
кода выполняемой команды. Перед записью кода команды необходимо
поместить нужные данные в регистры 177742-177752, когда НЖМД на-
ходится в состоянии не занято (BSY сброшен). Команда начинает
выполняться сразу же после записи кода в регистр.

Регистр альтернативного состояния (177743 по чтению) содер-
жит такую же информацию, как и регистр состояния. Различие за-
ключается в том, что чтение этого регистра не сбрасывает уста-
новленное прерывание IRQ14 от НЖМД (в БК не используется).

Регистр сброса (177743 по записи) содержит следующие управ-
ляющие биты:
Бит 0 - не используется.
Бит 1 - Interrupt Enable - бит разрешения прерывания от
НЖМД (в БК не используется).
Бит 2 - Soft Reset - программный сброс. Для выполнения
сброса необходимо сначала установить, а затем сбросить этот бит.
Бит 3 - Heads 3 Enable - используется для разрешения выбора
головок с 8 по 15 (как правило, не используется).
Биты 4-7 - не используются.

Регистр адреса накопителя (177741 по чтению) содержит номер
головки и НЖМД, выбранные в предыдущей операции.

Биты 0-1 - биты выбора накопителя 0 или 1.
Биты 2-5 - содержат двоичный код выбранной головки.
Бит 6 - Write Gate - активен во время операции записи.
Бит 7 - не используется.

КОМАНДЫ НЖМД

Команды записываются в регистр команд. Если биты DRDY и BSY
регистра состояния указывают, что НЖМД готов для приема следую-
щей команды, то вначале должны быть правильно установлены все
необходимые параметры в регистрах 177742-177754. Команда начина-
ет выполняться сразу же после ее записи в регистр. После выпол-
нения начальной фазы команды бит BSY сбрасывается, и DRQ-бит
указывает на необходимость приема/передачи данных. При установ-
ленном DRQ программа принимает 256. слов из буфера сектора через
регистр данных или передает их туда. НЖМД сбрасывает DRQ-бит и
продолжает выполнение команды, до тех пор, пока значение счетчи-
ка секторов не уменьшится до 0.

Коды команд (восьмеричные, даны уже в инверсном виде):

Рекалибровка 357
Чтение секторов 33X
X=7 - с повторами при ошибках
X=6 - без повторов при ошибках
X=5 - длинное с повторами при ошибках
X=4 - длинное без повторов при ошибках
Запись секторов 31X
X=7 - с повторами при ошибках
X=6 - без повторов при ошибках
X=5 - длинная с повторами при ошибках
X=4 - длинная без повторов при ошибках
Верификация 27X
X=7 - с повторами при ошибках
X=6 - без повторов при ошибках
Форматирование дорожки 257
Позиционирование 217
Внутренняя диагностика 157
Инициализация параметров НЖМД 156
Чтение буфера сектора 033
Запись буфера сектора 027
Идентификация НЖМД 023

Рекалибровка (357) - по этой команде головки НЖМД устанав-
ливаются на нулевую дорожку. Если она не распознана, команда за-
канчивается установкой бита ERR в регистре состояния и бита T0NF
в регистре ошибок.

Чтение секторов (33X) - по этой команде читаются от 1 до
256. секторов в зависимости от значения регистра счетчика секто-
ров, начиная с назначенного сектора. Если ID сектора или адрес-
ный маркер не могут быть считаны, а повторы запрещены (X=6,4),
то формируется ошибка IDNF или AMNF. Если повторы разрешены
(X=7,5), то соответствующая ошибка формируется после некоторого
количества безуспешных повторов. Если при повторе адресный мар-
кер и идентификатор считаны успешно, то операция продолжается и
ошибка не фиксируется. После нахождения адресного маркера и
идентификатора считывается поле данных и чтение сектора заканчи-
вается безошибочно, с корректируемой или некорректируемой ошиб-
кой данных. Если во время мультисекторного чтения выявлена ошиб-
ка, то чтение заканчивается на секторе, где она обнаружена. Та-
ким образом можно определить место ошибки. При выявлении коррек-
тируемой ошибки данных устанавливается бит CORR регистра состоя-
ния и после его считывания продолжается выполнение команды, если
операция не закончена. Если ошибка в данных является некорректи-
руемой, дефектные данные передаются в систему, но выполнение ко-
манды прекращается и устанавливается бит UNC регистра ошибок.
Длинное чтение выполняется аналогично обычному, только после пе-
редачи в систему 256. слов передаются еще 4 байта ECC. Ошибка
ECC поля данных при выполнении этой команды не фиксируется. Пе-
редача данных осуществляется словами, а кода ECC - байтами.

Запись секторов (31X) - по этой команде записывается от 1
до 256. секторов (выполненяется аналогично команде "Чтение сек-
торов"). После записи в соответствующий сектор полученных данных
записываются 4 байта ECC, сформированных НЖМД, если запись обыч-
ная, или 4 байта, переданных системой, если запись длинная.

Верификация (27X) - по этой команде проверяется формат ука-
занной дорожки. Команда выполняется аналогично команде "Чтение
секторов", но не передает данных.

Форматирование (257) - по этой команде производится низкоу-
ровневое форматирование заданной дорожки НЖМД. При выполнении
этой команды необходимо записать соответствующие данные в ре-
гистры номера головки и дорожки, а затем послать команду в ре-
гистр команд. После этого в НЖМД через регистр данных передается
буфер, размером в один сектор, подобно тому, как это делается в
команде "Запись секторов". В этом буфере первые N слов (где N -
число секторов на дорожке) содержат информацию о секторах
(мл.байт: 0 - сектор хороший, 200 - сектор плохой; ст.байт: фи-
зический номер сектора). Значения остальных байтов буфера без-
различны. Не следует забывать об инверсии данных!
Для современных моделей накопителей низкоуровневое формати-
рование никакой опасности (в смысле выхода из строя) не предста-
вляет, многие же ранние версии "Гибли от Low Lewel'a", если их
форматировали не программой с завода изготовителя. Но, все таки,
форматировать НЖМД лучше под контролем специалиста (если вообще
необходимо, т.к. BAD блоки у IDE-накопителей - явление довольно
редкое). В некоторых случаях, конечно, форматирование необходи-
мо.

Позиционирование (217) - по этой команде головки НЖМД уста-
навливаются на указанную дорожку.

Внутренняя диагностика (157) - выполняется внутренняя диаг-
ностика НЖМД, по окончании которой в регистре ошибок формируется
код завершения (376, если ошибок не произошло). Расшифровку ко-
дов ошибок см. в файле, описывающем регистры накопителя.

Инициализация параметров НЖМД (156) - по этой команде НЖМД
настраивается на параметры, задаваемые накопителю извне. Данная
команда должна выполняться после "сброса" НЖМД. Регистры номера
головки (177742) и счетчика секторов (177752) должны содержать
максимальный номер головки (счет от 0) и максимальное количество
секторов на дорожке (счет от 1) соответственно. Следует учиты-
вать, что НЖМД не может содержать более 16. головок и 63. секто-
ров на дорожке (физическое ограничение всех IDE накопителей).

Чтение буфера (033) - по этой команде устанавливается за-
прос DRQ в регистре состояния. Драйвер может прочитать содержи-
мое буфера сектора (256. слов) через регистр данных.

Запись буфера (027) - по этой команде устанавливается за-
прос DRQ в регистре состояния, после этого драйвер должен перес-
лать 256. слов в буфер сектора через регистр данных.

Идентификация НЖМД (023) - по этой команде в секторный бу-
фер считывается паспорт диска и формируется запрос DRQ в регист-
ре состояния. Паспорт диска - справочная информация о конфигура-
ции и характеристиках НЖМД. Паспорт занимает один сектор (256.
слов) и, обычно, зашит в ПЗУ на плате НЖМД, хотя в некоторых
старых моделях накопителей он располагался на одной из рабочих
поверхностей магнитных дисков.

СТРУКТУРА ПАСПОРТА НЖМД

Смещение Назначение

0 Главное слово конфигурации
2 Количество дорожек
4 Зарезервировано
6 Количество головок
10 Количество байт на дорожке
12 Количество байт в секторе
14 Количество секторов на дорожке
16-23 Спецификация продавца
24-47 Серийный номер (ASCII)
50 Тип контроллера
52 Емкость буфера НЖМД в секторах
54 Количество байт ЕСС
56-65 Версия рабочих программ (ASCII)
66-135 Модель (ASCII)

ЗАМЕЧАНИЕ: При обработке полей 24-47, 56-65 и 66-135 следует де-
лать операцию SWAB. Не забывайте также об инверсии.

Помимо этих команд существуют и другие: например, выключаю-
щие двигатель НЖМД для уменьшения потребляемой мощности (так на-
зываемые "Power Save" команды), блокирующие внутренний кэш-буфер
накопителя, читающие список дефектных блоков, читающие несколько
секторов как один блок и др.. Но у фирм-изготовителей НЖМД нет
единого стандарта на эти команды, поэтому здесь приведен только
общий набор команд, выполняемых ЛЮБЫМИ IDE накопителями.
ЗАПРОСЫ К ДРАЙВЕРУ НЖМД

БЛОК ПАРАМЕТРОВ

Структура блока параметров драйвера НЖМД полностью идентич-
на структуре блока параметров драйвера дисковода. Соответствую-
щими остаются и точки входа для чтения/записи.
Под номером привода теперь следует понимать: 0-1 - дисково-
ды (A:, B:), остальное - логические диски НЖМД (C:, D:, ...).
НЖМД может быть разбит не более чем на 124 логических дис-
ка произвольного об'ема.
Записи о логических дисках находятся в таблице разделов, к
которой предусмотрен программный доступ (см. ниже). Нумерация
логических дисков производится, начиная с нуля (устройству C:
соответствует логический диск с номером 0 и т.д.).
Не рекомендуется разбивать накопитель на слишком большое
количество логических дисков, потому, что в этом случае затруд-
няется доступ к ним из операционных систем (не хватает букв),
немного замедляется доступ при поблочном чтении через 160004
(т.к. каждый раз пересчитывается CRC таблицы разделов и области
конфигурации), да и разобраться в таком обилии информации до-
вольно тяжело.

ЗАМЕЧАНИЕ: Здесь и далее не следует путать логические диски опе-
~~~~~~~~~~ рационных систем (RT11, MKDOS и др.) с логическими
дисками НЖМД.

ТОЧКИ ВХОДА В ДРАЙВЕР

160000 Автоматическая загрузка
Параметры отсутствуют.
Алгоритм загрузки описан ниже.

160002 Загрузка с выбранного привода
R0 - номер привода.
Алгоритм загрузки описан ниже.

160004 Чтение/запись по номеру блока
R0 - номер начального блока;
R1 - длина пересылаемого массива данных (слов): положи-
тельная - чтение, отрицательная - запись;
R2 - адрес массива данных;
R3 - адрес начала блока параметров;
34(R3) - номер привода (0-124.).
Если номер начального блока находится вне пределов логичес-
кого диска, то драйвером генерится ошибка 5 и обмен данными с
системой не производится. Если при чтении/записи пересекается
граница логического диска, также выдается ошибка 5, но передает-
ся максимально возможное количество данных. Если логический диск
не определен, выдается ошибка 3. Если НЖМД не подключен или не
выдает сигнал готовности в течение определенного промежутка вре-
мени, выдается ошибка 6.
При каждом новом обращении к НЖМД производится подсчет CRC
таблицы разделов и области конфигурации (простое сложение без
учета переноса) и сравнение ее с эталоном, находящимся в области
служебной информации. В случае несовпадения таблица разделов и
конфигурация повторно считываются в память, заново вычисляются
контрольная сумма и количество доступных логических дисков, вы-
полняется программный сброс накопителя, переустановка его пара-
метров (как при загрузке) и выдается ошибка 13(8). Обмен данными
не производится. Последующие обращения к НЖМД происходят нор-
мально.
Ошибка 13(8) является сигналом порчи таблицы разделов или
области конфигурации и позволяет выявить программу, которая умы-
шленно или неумышленно это сделала.

ЗАМЕЧАНИЕ: Под областью конфигурации понимаются поля HD$TRK,
~~~~~~~~~~ HD$HEA, HD$SEC и HD$LOG области служебной информации.

160006 Чтение/запись по номеру сектора, головки и дорожки
R3 - адрес начала блока параметров;
26(R3) - адрес массива данных;
30(R3) - длина пересылаемого массива данных (слов): по-
ложительная - чтение, отрицательная - запись;
32(R3) - мл. 4 бита - номер головки (0-15.),
ст. 4 бита - 0-3 биты номера дорожки;
33(R3) - 4-11 биты номера дорожки;
34(R3) - номер привода (0-124.);
35(R3) - номер начального сектора.
Номер привода при чтении никакой существенной роли не
играет, необходимо только, чтобы он был больше или равен 2.
Запись же возможна лишь при номере привода, равном 377 (octal),
при попытке записи с номером привода от 2 до 376 выдается ошибка
1. Чтение и запись возможны в пределах всего накопителя,
разбиение на логические диски не анализируется. При выходе за
пределы конфигурации НЖМД, выдается ошибка 5.

ЗАМЕЧАНИЕ: после окончания работы подпрограмм драйвера, связан-
~~~~~~~~~~ ных с передачей информации (160000-160006,160012), в
R4 помещается адрес регистра ошибок с целью нейтрализации
действий программ, которые заносят 0 (и не только) в @R4.

160010 Инициализация блока параметров.
R3 - адрес блока парамеров.

160012 Форматирование
R3 - адрес блока параметров;
32(R3) - мл. 4 бита - номер головки (0-15.),
ст. 4 бита - 0-3 биты номера дорожки;
33(R3) - 4-11 биты номера дорожки;
34(R3) - номер привода (0-124.).
При обращении к дисководам производится форматирование те-
кущей дорожки с текущей стороны. Для НЖМД выполняется команда
'Верификация дорожки'.

160016 Точка входа эмулятора расширенной арифметики
Эмулируются команды EIS: MUL, DIV, ASH и ASHC.
Чтобы подключить эмулятор, занесите адрес его начала в век-
тор 10(8). При прерывании по резервной команде происходит обра-
щение к эмулятору. Если код команды, вызвавшей прерывание, не
является кодом одной из вышеперчисленных комманд, происходит вы-
ход по вектору 4 с установленным битом C (стандарт RT11), иначе
- выполняется программная эмуляция команды.
Имеется возможность подключения пользовательского драйвера
расширенной арифметики (см. ниже).

ТАБЛИЦА РАЗДЕЛОВ И СЛУЖЕБНАЯ ИНФОРМАЦИЯ

Статическое ОЗУ расположено по адресам 170000-176777. При
работе базового драйвера используются следующие области памяти:

HD$TRK (176776) - число дорожек НЖМД;
HD$HEA (176774) - число головок НЖМД;
HD$SEC (176772) - число секторов на дорожке;
HD$LOG (176770) - всего логических дисков (1-124.), в старшем
байте - номер привода, с которого производится
загрузка по умолчанию;
HD$SPD (176000) - признак повышенной скорости обмена с накопите-
лем (рекомендуется для современных моделей,
повышает скорость чтения/записи в 2 и более
раз, за счет отсутствия ожидаания готовности
при чтении сектора; на старых накопителях мо-
жет привести к сбоям и потере информации!, по-
этому сначала проконсультируйтесь со специа-
листами), признак установлен, если значение
этой ячейки равно 125252;
HD$USR (175776) - указатель на начало драйвера пользователя;
HD$EIS (175774) - указатель на начало пользовательского драйвера
расширенной арифметики (первой командой драй-
вера должна быть NOP, управление передается по
JMP @175774);

Таблица разделов НЖМД начинается с адреса 176766 и имеет
стековую структуру (растет вниз). Каждая запись о логическом
диске занимает 2 слова и имеет следующий формат:
слово с большим адресом содержит номер дорожки и головки
начала логического диска (мл. 4 бита - номер головки, остальные
12 бит - номер дорожки). Если это слово отрицательно (инверсия
по COM), то считается установленной защита записи и при попытке
записи выдается ошибка 1. Слово с меньшим адресом содержит длину
логического диска в блоках (максимум: 65535 блоков - 32 Мб).
В слове, следующем за последней записью таблицы разделов,
находится CRC таблицы разделов и области конфигурации.

В базовом драйвере НЖМД предусмотрен доступ к таблице раз-
делов. Для общей совместимости с последующими версиями рекомен-
дуется пользоваться им, а не обращаться напрямую к области до-
полнительного ОЗУ. Итак:
если при вызове 160004 (при 160006 не работает!) указать в
R1 число слов для пересылки равное нулю, драйвер возвратит сле-
дующую информацию: R0 - размер данного логического диска в бло-
ках (номер привода берется из 34(R3)); R1 - номер дорожки/голов-
ки начала логического диска в формате, описанном выше; в область
памяти, начиная с адреса из R2 (если R2 не равно нулю) передает-
ся следующее:

Смещение Содержимое
0 число дорожек НЖМД;
2 число головок НЖМД;
4 число секторов нв дорожке;
6 число логических дисков.

Кроме того, вычисляются координаты (дорожка, головка, сек-
тор) блока, который был указан в R0 на входе. Если номер блока
находится за пределами логического диска, вычисляются координаты
последнего доступного блока данного диска. Вычисленные параметры
помещаются в соответствующее место блока параметров (см. описа-
ние точки входа 160006). После выполнения операции R2 портится.

БУДЬТЕ ВНИМАТЕЛЬНЫ! При подключенном драйвере пользователя
эта функция не работает, если последний ее, конечно, не выполня-
ет.

Под служебные нужды отводится нулевая сторона (головка 0)
нулевой дорожки. Первые 7 блоков этой области занимает основной
загрузчик (Master Boot Record - MBR), который при каждой
загрузке с винчестера считывается в ОЗУ с адреса 10000 и
запускается, если его первая команда - NOP.
Каждая перезагрузка с НЖМД вызывает обновление в памяти ко-
пии таблицы разделов, области конфигурации и проверку их CRC.
В седьмом блоке (восьмом секторе) хранится копия области
ОЗУ 176000-177000.

АЛГОРИТМ ЗАГРУЗКИ

Алгоритм загрузки следующий:
1. Если НЖМД подключен, то при любой загрузке (в т.ч. с
дисководов) с адреса 176000 считывается 8-й сектор.
2. Проверяется CRC. Если нужно, то конфигурация считывается
из паспорта НЖМД, а таблица разделов инициализируется.
3. Выполняется программный сброс накопителя и команда "Ини-
циализация параметров".
4. Если номер привода не был указан явно, берется номер
привода по умолчанию (из HD$LOG+1). Если в итоге номер
привода меньше 2, производится переход к стандартной
загрузке.
5. С адреса 10000 считывается MBR (первичная загрузка).
Если его первая команда - NOP, то управление передается
на нее (CALL @#10000); MBR, произведя необходимые дей-
ствия (например: переконфигурация области со служебной
информацией, установка драйверов пользователя и т.д.),
возвращает управление драйверу (по RTS PC).
6. В основную память с адреса 1000 считывается нулевой блок
устройства с номером из 34(R3) и загрузка продолжается
по стандартному алгоритму драйверa дисковода (вторичная
загрузка).

В случае ошибки загрузка продолжается с дисководов A и B,
если загрузка автоматическая, или, в противном случае, прекраща-
ется.

ПОДКЛЮЧАЕМЫЙ ДРАЙВЕР ПОЛЬЗОВАТЕЛЯ

Подключаемый драйвер пользователя может располагаться в лю-
бом месте ОЗУ. Чтобы его подключить, необходимо по адресу 175776
записать адрес его начала. Первой командой драйвера должна быть
NOP, далее идут:
1) точка входа по 160004;
2) точка входа по 160006;
3) точка входа по 160012.
Предполагается, что драйвер пользуется тем же блоком пара-
метров, что и базовый.
Управление драйверу пользователя передается сразу же после
вызова базового драйвера, никаких действий по обработке парамет-
ров не производится, номер привода не анализируется, контрольная
сумма на считается.
Драйвер пользователя возвращает управление базовому, при-
знак ошибки должен находиться в блоке параметров (57(R3)). Коды
ошибок стандартные, бит C роли не играет. Управление может воз-
вращаться несколькими способами:
1. RTS PC - обычный возврат управления, после которого
происходит выход из базового драйвера с установкой бита C и но-
мера ошибки, если 57(R3) содержит ненулевое значение;
2. ADD #2,@SP
RTS PC - управление передается драйверу ДИСКОВОДА (на-
прямую).
3. ADD #6,@SP
RTS PC - управление передается базовому драйверу, как
будто драйвер пользователя не подключен;
Если RTS PC заменить на JSR PC,@(SP)+ (естественно, в пер-
вом случае этого делать не следует), то управление от драйверов
дисковода или НЖМД будет, по окончании, возвращено в драйвер
пользователя.
Существующая система подключаемых драйверов позволяет со-
здавать уникальные драйверы на любой вкус!
Например, можно "отключить" дисководы, "переместив" все ло-
гические диски вниз (чтобы не "пропадали" буквы, если вы работа-
ете без дисководов); можно сделать "дырку" для работы с элект-
ронным диском.
РАСПРЕДЕЛЕНИЕ ДОП.ОЗУ 170000-175770

В процессе работы программы могут занимать участки доп.ОЗУ
и освобождать их в произвольной последовательности. Для бескон-
фликтной работы программ необходимо придерживаться следующих
требований:

- резиденты, размещаемые в доп. ОЗУ, должны быть перемещае-
мыми;
- программа, которой необходим участок доп. ОЗУ, должна
захватывать свободную область, начиная с первой же сво-
бодной ячейки. Первое слово свободного участка равно 0;
- в первое слово занимаемого участка вписывается длина
этого участка в байтах, в ячейку над этим участком зано-
сится 0. Со второго слова участка начинается список
адресов ячеек-указателей, через которые производится
адресация к данному участку памяти, список оканчивается
нулем. Со следующего адреса располагается тело резидент-
ной программы.

В случае, если какая-либо программа будет освобождать
участок доп. ОЗУ ниже рассматриваемого, она должна будет пере-
местить вниз каждый расположенный выше резидент, но перед этим
вычесть величину смещения из содержимого тех ячеек-указателей,
адреса которых находятся в списке перед телом каждого резидента.

ПРИМЕР:

170000: .WORD TOP1-170000
.WORD ANDOS+654,0 ;ну, к примеру
...

TOP1: .WORD TOP2-TOP1 ;первый драйвер пользователя
.WORD JMP2TO1,0
...
START1: ...
RTS PC

TOP2: .WORD TOP3-TOP2 ;драйвер польз.,установл. вторым
.WORD HD$USR ;=175776
.WORD TOP1+2,0
...
START2: ...
JMP @(PC)+
JMP2TO1:.WORD START1

TOP3: .WORD 0

HD$USR: .WORD START2

В этом примере после, например, переименования логических
дисков драйвером-2 (часто бывает нужно для непонятливых программ
переименовывать диски в A: или B:), управление будет передано
драйверу-1, о предназначении которого автору драйвера-2 скорее
всего и неизвестно. Причем не составляет труда удалить драйвер-2
и скорректировать HD$USR...

ПРИЛОЖЕНИЕ

НАЗНАЧЕНИЕ ВЫВОДОВ IDE-ИНТЕРФЕЙСА

Все сигналы IDE-интерфейса является TTL-совместимыми.
I/O указывает направление сигнала. "I" означает вход жест-
кого диска, "O" - выход. Сигналы, начинающиеся с "/", при низ-
ком уровне имеют свое активное состояние.

────────┬────────┬─────┬────────────────────────────────────────
N │ сигнал │ I/O │ Описание
контакта│ │ │
────────┼────────┼─────┼────────────────────────────────────────
2,19,22,│ GND │ │ Общий провод.
24,26, │ │ │
30,40 │ │ │
────────┼────────┼─────┼────────────────────────────────────────
1 │ RES │ I │ Сигнал сброса от процессора.
────────┼────────┼─────┼────────────────────────────────────────
18, 3 │ D15,D7 │ I/O │ Двунаправленная шина данных между
16, 5 │ D14,D6 │ I/O │ процессором и жестким диском для пере-
14, 7 │ D13,D5 │ I/O │ дачи данных, информации о состоянии и
12, 9 │ D12,D4 │ I/O │ управляющей информации. Линии переклю-
10, 11 │ D11,D3 │ I/O │ чаются в высокоомное состояние, если
8, 13 │ D10,D2 │ I/O │ жесткий диск не выбран.
6, 15 │ D9, D1 │ I/O │
4, 17 │ D8, D0 │ I/O │
────────┼────────┼─────┼────────────────────────────────────────
20 │ │ │ Удаленный контакт. Используется в
│ │ │ качестве ключа против переворачивания
│ │ │ кабеля.
────────┼────────┼─────┼────────────────────────────────────────
21 │ │ │ Не используется.
────────┼────────┼─────┼────────────────────────────────────────
23 │ /IOWR │ I │ Сигнал записи для адресов портов
│ │ │ ввода-вывода.
────────┼────────┼─────┼────────────────────────────────────────
25 │ /IORD │ I │ Сигнал чтения для адресов портов
│ │ │ ввода-вывода.
────────┼────────┼─────┼────────────────────────────────────────
27 │/IOCHRDY│ O │ Процессор при доступе к жесткому
│ │ │ диску должен ожидать до тех пор, пока
│ │ │ этот сигнал станет неактивен (у некото-
│ │ │ рых изготовителей не используется).
────────┼────────┼─────┼────────────────────────────────────────
28 │ /ALE │ I │ Address Latch Enable: не использу-
│ │ │ ется для существующих накопителей (до-
│ │ │ бавлен на основании совместимости).
────────┼────────┼─────┼────────────────────────────────────────
29 │ │ │ Не используется.
────────┼────────┼─────┼────────────────────────────────────────
31 │ /IRQ14 │ O │ Interrupt Request: требование пре-
│ │ │ рывания к процессору.
────────┼────────┼─────┼────────────────────────────────────────
32 │ /IO16 │ O │ Указатель на 16-битную передачу
│ │ │ данных.
────────┼────────┼─────┼────────────────────────────────────────
34 │ /PDIAG│ I/O │ Passed Diagnostics: Slave-диск со-
│ │ │ общает Master-диску, что отработала
│ │ │ внутренняя диагностика (отсутствует в
│ │ │ некоторых накопителях).
────────┼────────┼─────┼────────────────────────────────────────
33 │ A1 │ I │ Биты адреса для выбора регистров.
35 │ A0 │ I │
36 │ A2 │ I │
────────┼────────┼─────┼────────────────────────────────────────
37 │ /CS0 │ I │ Card Select: сигнал выбора регист-
38 │ /CS1 │ I │ ров накопителя.
────────┼────────┼─────┼────────────────────────────────────────
39 │ /ACT │ I/O │ Может управлять светодиодом, чтобы
│ │ │ указывать активность накопителя.
────────┴────────┴─────┴────────────────────────────────────────

ВЫБОР РЕГИСТРОВ ВВОДА/ВЫВОДА IDE-ИНТЕРФЕЙСА

──────────────────┬─────┬─────┬─────┬─────┬─────
Выбираемый адрес │/CS0 │/CS1 │ A0 │ A1 │ A2
──────────────────┼─────┼─────┼─────┼─────┼─────
177756 │ 0 │ 1 │ 0 │ 0 │ 0
──────────────────┼─────┼─────┼─────┼─────┼─────
177754 │ 0 │ 1 │ 0 │ 0 │ 1
──────────────────┼─────┼─────┼─────┼─────┼─────
177752 │ 0 │ 1 │ 0 │ 1 │ 0
──────────────────┼─────┼─────┼─────┼─────┼─────
177750 │ 0 │ 1 │ 0 │ 1 │ 1
──────────────────┼─────┼─────┼─────┼─────┼─────
177746 │ 0 │ 1 │ 1 │ 0 │ 0
──────────────────┼─────┼─────┼─────┼─────┼─────
177744 │ 0 │ 1 │ 1 │ 0 │ 1
──────────────────┼─────┼─────┼─────┼─────┼─────
177742 │ 0 │ 1 │ 1 │ 1 │ 0
──────────────────┼─────┼─────┼─────┼─────┼─────
177740 │ 0 │ 1 │ 1 │ 1 │ 1
──────────────────┼─────┼─────┼─────┼─────┼─────
177743 │ 1 │ 0 │ 1 │ 1 │ 0
──────────────────┼─────┼─────┼─────┼─────┼─────
177741 │ 1 │ 0 │ 1 │ 1 │ 1
──────────────────┴─────┴─────┴─────┴─────┴─────

ПРИМЕЧАНИЕ: 0 - низкий уровень сигнала, 1 - высокий.

ОБОБЩЕННЫЙ АЛГОРИТМ РАБОТЫ НЖМД IDE

После подачи питающего напряжения на НЖМД или активизации
интерфейсного сигнала /RES, схема сброса накопителя подает сиг-
нал RESET на управляющий микропроцессор, который отрабатывая
свою микропрограмму, инициализирует состояние портов ввода/выво-
да (из-за этого, как правило, останавливается шпиндельный двига-
тель), очищает рабочую область памяти, программирует одно-
кристальный микроконтроллер и все программируемые микросхемы на-
ходящиеся на внутренней шине данных НЖМД. После этого управляю-
щий микропроцессор опрашивает внутренние сигналы работы накопи-
теля и подает сигнал на запуск шпиндельного двигателя. Следующий
этап работы микропрограммы - проведение внутреннего теста НЖМД,
при котором проверяются: ОЗУ буфера данных, однокристальный мик-
роконтроллер и состояние входных сигналов микроконтроллера со
стороны порта НЖМД. После этого управляющий микропроцессор, ана-
лизируя период следования импульсов индекс, ожидает, пока шпин-
дельный двигатель не наберет заданных оборотов и, как только это
произойдет, микропроцессор, управляя схемой позиционирования и
однокристальным микроконтроллером, перемещает магнитные головки
в зону где записана служебная информация и пересылает ее в бу-
ферное ОЗУ для дальнейшей работы. После этого управляющий микро-
процессор устанавливает биты DRDY и DSC, сбрасывает бит BSY в
регистре состояния НЖМД, а в регистр ошибок пересылается код
"ошибок не обнаружено" (данные регистры находятся в однокриста-
льном микроконтроллере). Накопитель в таком состоянии может на-
ходиться сколь угодно долго ожидая, пока не произойдет запись в
регистр команд.
Управление НЖМД IDE производиться с помощью программно дос-
тупных регистров 177740-177756, 177741 и 177743 со стороны ком-
пьютера. Перед записью команды необходимо проверить бит BSY ре-
гистра состояния НЖМД, он должен быть сброшен. После этого под-
готавливается так называемый файл задания - заполняются регист-
ры, которые участвуют в выполняемой команде (регистр номера сек-
тора, регистр накопителя/головки и т.д.) и в регистр 177740 пе-
ресылается команда.
После записи в регистр команд однокристальный микроконтрол-
лер формирует запрос прерывания к управляющему микропроцессору
MCINT (

Категория: Contrib | Добавил: un7jks (30.09.2009)

Просмотров: 104
| Теги: БК
| Рейтинг: 0.0/0 | - Оценить -ОтличноХорошоНеплохоПлохоУжасно

Всего комментариев: 0

Имя *:

Email:

Код *:

Copyright Ladysev V.V.
Pivovarov I.G
© 2010

Хостинг от uCoz