Пользователям о «Корвете». Журнал «Радио» №6/1989г., стр.34-37

 

 

ПОЛЬЗОВАТЕЛЯМ О «КОРВЕТЕ»

 

 

 

КОНТРОЛЛЕР НАКОПИТЕЛЯ НА ГИБКИХ ДИСКАХ

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

 

Иное дело магнитный диск. Хотя физически принцип записи аналогичен записи на магнит­ную ленту, все же имеется существенное от­личие в работе с ним. Оно состоит в том, что у диска нет ни начала, ни конца. Поэтому, не при­няв специальных мер, найти на нем записанную информацию очень трудно. Комплекс этих мер называется форматированием диска.

 

Диск разбивается на области (рис. 1). Для того чтобы как-то фиксировать начало координат, на диске предусмотрено специальное отверстие, которое называется индексным маркером. Когда диск вращается, это отверстие периоди­чески пересекает линию, соединяющую фото- и светодиоды оптодатчика. В результате вы­рабатывается импульс, используемый для при­вязки записываемой и считываемой информа­ции к конкретному месту на диске.

 

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

 

Обычно на дисках бывает 40 или 80 дорожек. Поскольку на одну дорожку умещается значи­тельное количество информации, то ее целесо­образно разбить на секторы. Количество и объем секторов могут быть различными. Обычно они имеют объем 128, 256, 512 или 1024 байт. Их ко­личество в основном определяется скоростью вращения диска и объемом сектора. Принятыми являются 5, 8, 9 и 15 секторов на одной до­рожке. В «Корвете» на одну дорожку записыва­ют пять секторов емкостью 1024 байта.

 

У диска, как известно, две стороны — верхняя и нижняя. Поэтому естественно предположить наличие в дисководе двух головок, обслуживаю­щих соответствующую сторону, Так оно и есть — существуют одно- и двусторонние дисководы. Сторонам диска присваиваются номера 0 и 1.

 

Что же должен делать контроллер гибких дисков? Прежде всего принять необходимые команды от микропроцессора, затем разобрать­ся в разметке диска. Как это делается мы уз­наем несколько позже. После того как контрол­лер нашел на диске требуемую область, он дол­жен считать или записать информацию. И нако­нец, необходимо опять выйти на связь с микро­процессором и доложить о результатах.

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

 

Контроллеры гибких дисков бывают различ­ных конструкций. Здесь мы рассмотрим один из них — КР1818ВГ93, применяемый в «Корвете». Блок-схема контроллера изображена на рис. 2.

 

Видно, что в состав контроллера входят шесть регистров.

1. Регистр данных. В этом 8-разрядном ре­гистре хранятся данные, используемые при чте­нии и записи. При перемещении головки диско­вода на заданную дорожку в этот регистр зано­сится ее номер.

2. Регистр статуса. В нем хранится сообщение для процессора об итогах выполненной или невыполненной операции.

3. Регистр команд. Здесь хранится код ко­манды, который необходимо выполнить контрол­леру.

4. Регистр сектора. В этом 8-разрядном регист­ре хранится номер требуемого сектора.

5. Регистр дорожки. Этот 8-разрядный ре­гистр хранит номер текущей дорожки. При перемещении головки дисковода к центру диска содержимое этого регистра увеличивается на единицу с каждым шагом. При перемещении головки от центра содержимое регистра умень­шается.

6. Сдвиговый регистр данных. Он прини­мает последовательность битов, идущих с диска при чтении и преобразует их в байты, кото­рые передает интерфейсу с процессором. При записи этот процесс происходит в обратном направлении.

 

Кроме названных регистров в состав контрол­лера входят: устройство подсчета контрольной суммы; арифметико-логическое устройство (АЛУ), выполняющее необходимые математиче­ские действия (увеличение, уменьшение, сравне­ние) и детектор адресной метки, который по­зволяет отличить области на диске, где записана служебная информация, касающаяся разметки диска, и собственно данные, записанные на диск.

 

 

 

 

 

 

 

 

 

 

Теперь разберемся с командами, выполняемы­ми контроллером. Как мы уже знаем, первая задача — это найти требуемую дорожку. Для этой цели служат пять команд:

1. RESTORE — перемещение головки дисково­да на нулевую дорожку диска.

2. SEEK — перемещение головки дисковода на дорожку с номером, указанным в регистре данных.

3. STEP — смещение головки на одну дорожку в направлении, заданном предшествующей командой.

4. STEP IN — смещение головки на одну до­рожку к центру диска.

5. STEP OUT — смещение головки на одну до­рожку от центра диска.

 

Эти команды называются командами перво­го типа. Как вы, наверное, уже догадались, для выполнения контроллером команды необ­ходимо занести ее код в командный регистр. Коды команд первого типа приведены в табл. 1.

 

 

Команда

Содержимое командного регистра

 

RESTORE

SEEK

STEP

STEP IN

STEP OUT

 

00000000B

00010000B

00100000B

01000000B

01100000B

 

 

 

 

 

 

 

 

Код команды может заноситься в команд­ный регистр совместно с модификаторами (параметр, используемый для изменения значений). Для команд первого типа могут использоваться сле­дующие модификаторы:

 

 Таблица 2

 

Модификатор

 

Код

 

Комментарий

 

UPDATE

 

00010000В

 

Отслеживание переме­щения головки в ре­гистре дорожки

 

HLD

 

00001000В

 

Прижим головки при движении

 

VERIFY

 

00000100В

 

Проверка установки го­ловки после переме­щения

 

RATE

 

000000аbB

Задание времени пози­ционирования голов­ки ab=00—6 мс

аb=01—12 мс

аb=10—20 мс

аb=11—30 мс

 

 

Модификаторы используются совместно с ко­дом команды. Так, если мы хотим переместить головку на одну дорожку к центру диска, от­слеживая перемещение и проверяя установку, с временем позицирования 20 мс, то мы должны занести в командный регистр 01010110В.

 

Если в процессе выполнения команд перво­го типа что-то не получилось, то в регистре ста­туса появляется код ошибки. Назначение битов этого регистра для команд первого типа приве­ден в табл. 3. При этом признаком наличия ошибки является установка в единичное состоя­ние соответствующего бита.

Таблица 3

 

Бит

 

Назначение

 

7

6

5

4

3

2

1

0

 

Не готов дисковод

Запрещена запись

Головка прижата

Ошибка позиционирования

Ошибка в контрольной сумме

Достижение нулевой дорожки

Бит, отвечающий индексному маркеру Контроллер не готов принять команду

 

Итак, мы теперь умеем выводить головку дис­ковода на нужную дорожку. Чтение или запись теперь можно осуществить так.

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

Коды этих команд соответственно 10000000В и 10100000В. Кроме этого, существуют два мо­дификатора этих команд:

1. Многосекторные операции — 00010000В.

2. Задержка выполнения команды на время подвода головки - 00000100В (15 мс).

 

Каким же образом строится полная команда, скажем, чтения заданного сектора на заданной дорожке?

Сначала, поместив в регистре данных номер требуемой дорожки, мы выполняем команду SEEK. Если позиционирование прошло успешно (об этом свидетельствуют соответствующие би­ты регистра статуса), то можно приступать к чте­нию. Для этого помещаем номер нужного нам сектора в регистр сектора и выдаем контрол­леру команду читать. Однако регистр данных у контроллера содержит всего один байт. Сектор же может иметь объем до 1024 байт. При этом диск крутится непрерывно. Это противоречие решается путем организации диалога между контроллером и процессором. Диалог ведется через регистр статуса. Назначение его битов для команд второго типа приведено в табл. 4.

 

Таблица 4

 

Бит

 

Назначение

 

7

 

Дисковод не готов

 

6

 

Запрещена запись

 

5

 

При чтении: 1 — стерта метка данных, 0 — метка данных. При записи 1 — ошибка записи

 

4

 

Не найдены требуемые дорожка, сектор или

сторона диска

 

3

 

Ошибка контрольной суммы

 

2

 

Потеря данные. Означает, что процессор не считал подготовленные данные

 

1

 

Готовность данных. Означает, что регистр дан­ных содержит считанный байт при чтении или пуст при записи

 

0

 

Контроллер занят

 

Разберемся подробнее в процессе организа­ции диалога. Когда контроллер принял команду и начал ее выполнять, он устанавливает бит 0 в регистре статуса в 1. После этого процессор должен следить за битом 1. Когда он будет установлен в 1, то необходимо или считать байт из регистра данных, или записать его туда, в зави­симости от того, что мы делаем — читаем или пишем. Появление единиц в других битах ре­гистра статуса свидетельствует об ошибке. После того как будет закончено выполнение команды бит 0 регистра статуса будет сброшен.

 

Займемся отложенным до поры вопросом о структуре дорожки. Как все-таки контроллер разбирается туда ли, куда надо, попала голов­ка дисковода? Рассмотрим структуру дорож­ки. Как мы знаем, она поделена на секторы. Структура сектора изображена на рис. 3, Сек­тор состоит из двух частей: поля идентифика­тора и поля данных.

 

Поле идентификатора начинается с некоторой последовательности нулей и единиц, призван­ных обеспечить синхронизацию контроллера. Далее следует байт (адресная метка), указываю­щий, что начинается поле идентификатора. Этот байт обычно равен F7H. После него следуют номер дорожки, номер стороны диска, номер и длина сектора. Контроллер считывает эту информацию и сравнивает ее с требуемыми номера­ми дорожки, стороны и сектора. Если по про­шествии некоторого времени требуемая область на диске найдена не будет, то появится сообще­ние об ошибке. После информации о парамет­рах области следует контрольная сумма. Далее через некоторый промежуток появляется байт (FBH) (адресная метка), индицирующий начало поля данных. Его размер определяется дли­ной сектора в поле идентификатора. Контроллер считывает и передает процессору (или записыва­ет) ровно столько байт, сколько определено. Завершают поле данных байты контрольной суммы.

Отметим, что при выполнении команд перво­го и второго типов все операции с полем идентификатора контроллер выполняет автома­тически. Процессор узнает об итогах выполнения тех или иных действий, анализируя содержи­мое регистра статуса.

Существуют, однако, специальные команды, позволяющие узнавать или изменять содержи­мое любой части дорожки. Это команды третье­го типа:

1. RDADR — чтение номера дорожек, сторо­ны, сектора, а также длины сектора и конт­рольной суммы. Код команды 11000000В.

2. RDTRK — чтение дорожки целиком. Оно начинается с первого появившегося сигнала ин­дексного маркера и продолжается до следую­щего. При этом все байты на дорожке передают­ся через регистр данных процессору аналогично процессору передачи данных при чтении секто­ра. Код команды 11100000В.

3. WRTRK — команда записи дорожки. По этой команде происходит запись дорожки, при­чем контроллер автоматически вычисляет значе­ние контрольных сумм и размещает их в соот­ветствующих местах. Код команды 11110000В.

 

Команды третьего типа могут использовать модификатор задержки аналогично командам второго типа. Назначение битов регистра статуса для команд второго и третьего типов одинако­во.

Для оперативного вмешательства в работу процессора контроллер может генерировать запрос прерывания. Но для этого необходимо задать условие возникновения прерывания. Это условие задается путем выполнения команды  четвертого типа. Ее код 11010000В. Эта команда может использовать четыре модификатора.

 

1. 00000001В — прерывание по готовности дисковода.

2. 00000010B — прерывание по неготовности дисковода.

3. 00000100В — прерывание по индексному маркеру.

4. 00001000В — немедленное прерывание.

 

Если команда четвертого типа не исполь­зует модификатор, то никакого прерыва­ния вообще не происходит.

 

 

На этом исчерпывается набор команд, вы­полняемых контроллером. Остается еще один вопрос. До сих пор мы нигде не говорили о том, каким образом запускается мотор у дисковода, как выбирается тот или иной дисковод, как выбирается сторона диска? Сам контроллер, как мы видели, этим не занимается. Следователь­но, необходим еще один регистр, куда мы могли бы занести необходимые сведения. Этот ре­гистр называется регистром выбора и управле­ния. Назначение его битов приведено на рис. 4.

 

 

 

 

 

 

И в заключение приведем адреса перечислен­ных регистров контроллера и регистра выбора и управления для конфигурации памяти, необ­ходимой для нормальной работы ОС СР/М:

 

1. Регистр выбора и управления — FB39H.

2. Командный регистр — FB18H.

3. Регистр статуса — FB18H.

4. Регистр дорожки — FB19H.

5. Регистр сектора—FB1АН.

6. Регистр данных—FB1BH.

 

С. АХМАНОВ, Н. РОЙ, .А. СКУРИХИН

 

Данная статья является частью серии статей, которые были  опубликованы в журнале «Радио» в 1989г., по ПК «Корвет». Продолжение серии вы можете найти в  журнале «Радио» №№8, 10, 12 - 1989г.,  либо на сайте “Russian 8bit Computers” – http://www.rkgames.newmail.ru,  в разделе информации по ПК «Корвет».

Сканирование и обработка:  А. Болтаевский, 26.06.2000