SHOW / HIDE

Контроллер НГМД i8272.

Описание работы контроллера и системы команд. i8272

Батырев Александр
Лазарев Евгений
гр 454
Для доступа со стороны процессора контроллер 8272 имеет 2 регистра:

регистр состояния и регистр данных. Регистр состояния (Main Status Register) содержит информацию о состоянии контроллера и может быть считан процессором в любое время. Через регистр данных контроллера осуществляется доступ ко всем внутренним регистрам 8272, в него записываются команды и осуществляется обмен данными с диском. Регистр состояния можно только считывать. Для выбора одного из двух регистров используется вывод А0 8272 (выв.5). При А0=0 адресуется регистр состояния, при А0=1 адресуется регистр данных.

Формат регистра состояния:

RQM DIO  NDM CB  D3B D2B  D1B D0B 
DB7 DB6  DB5 DB4  DB3 DB2  DB1 DB0 
Описание разрядов регистра состояния:

RQM - Request For Master

информирует процессор о готовности к обмену данными по шине данных.

RQM = 1 - контроллер к обмену готов.

DIO - Data Input/Output

информирует процессор об ожидаемом направлении пересылки данных:

DIO = 1 - направление пересылки - в процессор (Read), DIO = 0 - направление пересылки - из процессора (Write).

NDM - Non DMA Mode

В режиме НЕ-ПДП бит NDM = 0 показывает, что закончена фаза исполнения команды.

CB - FDC Busy

Если бит CB = 1, это означает, что контроллер в данный момент занят - выполняется операция чтения/записи.

DB3..DB0 - Drive n Busy

Эти биты показывают состояние каждого из 4-х накопителей. Если содержимое бита = 1, значит для соответствующего накопителя в настоящее время выполняется команда Seek.

Общее описание контроллера.

В систему команд контроллера 8272 входит 15 команд. Каждая команда идентифицируется многобайтной пересылкой по шине данных в регистр данных контроллера. Результат выполнения команды также может быть многобайтным.

Каждую команду удобно представлять состоящей из 3-х фаз:

На фазах приказа и результата перед передачей каждого байта из/в регистр данных контроллера, процессор должен считывать содержимое регистра состояния контроллера. Биты RQM и DIO регистра состояния должны быть установлены в 1 и 0 соответственно перед тем, как очередной байт будет передан в контроллер. Многие команды являются много байтовыми, поэтому для них необходимо считывать и проверять регистр состояния перед пересылкой каждого байта в контроллер. На фазе результата биты RQM и DIO должны быть установлены в 1 перед чтением каждого байта из контроллера. Отметим, что чтение регистра состояния перед пересылкой каждого байта необходимо только на фазах приказа и результата.

На фазе исполнения регистр состояния считывать не нужно. Если контроллер находится в режиме NON DMA (НЕ-ПДП), появление очередного байта данных при чтении с диска сопровождается появлением сигнала прерывания INT=1. При появлении сигнала чтения (RD=0), сигнал прерывания сбрасывается и данные выдаются на шину данных. Например, если процессор не может обслуживать прерывания достаточно быстро (каждые 13 мксек. при двойной плотности), он может опрашивать регистр состояния и бит D7 (RQM) соответствует сигналу прерывания. При выполнении команды записи аналогично сигнал записи WR=0 сбрасывает прерывание.

Если контроллер находится в режиме DMA (ПДП), то прерывание на фазе исполнения не генерируется. Контроллер в этом случае выдает сигнал DRQ (запрос ПДП) когда появляется очередной байт данных. Контроллер ПДП отвечает на этот запрос сигналом подтверждения ПДП DACK=0 и RD=0. При появлении сигнала DACK сбрасывается сигнал DRQ. При выполнении операции записи вместо сигнала RD генерируется сигнал WR=0.

По окончании фазы исполнения (при появлении сигнала ТС - конец счета) генерируется прерывание, означающее начало фазы результата. При чтении первого байта результата сигнал прерывания сбрасывается.

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

Контроллер 8272 содержит 5 регистров состояния: главный регистр состояния (Main Status Register) и регистры ST0-ST3. Главный регистр состояния (или просто регистр состояния) может быть считан процессором в любое время. Регистры ST0-ST3 доступны процессору только на фазе результата и могут быть считаны им после завершения некоторой команды. Конкретная команда определяет, сколько и какие регистры могут и должны быть считаны.

Байты данных, записываемые в контроллер на фазе приказа и считываемые из него на фазе результата, должны следовать в порядке, указанном в таблице команд. Изменение этих последовательностей не допускается. После получения последнего байта команды контроллер автоматически начинает выполнять команду, переходя к фазе исполнения. После того, как на фазе результата считывается последний байт, контроллер считает эту команду завершенной и готов к обработке следующей команды. Команда может быть прекращена только подачей сигнала конца счета ТС=1. Это удобное средство для "привлечения внимания" контроллера в критических ситуациях.

После передачи в контроллер команды Specify, шины выбора накопителя начинают автоматически сканироваться в промежутках между командами (а также между импульсами шага в команде Seek). Контроллер опрашивает состояние сигнала готовности Ready всех 4-х накопителей. Если сигнал Ready изменяет свое состояние (обычно из-за открытия дверки накопителя), контроллер генерирует прерывание. Процессор передачей команды Sense Interrupt Status считывает содержимое регистра ST0 и по биту NR (Not Ready) регистра ST0 определяет состояние накопителя.

Описание команд 8272.

На фазе приказа перед вводом каждого байта должен опрашиваться регистр состояния 8272. При этом биты DIO (D6) и RQM (D7) должны иметь значения 0 и 1 соответственно перед записью каждого байта команды в контроллер. Начало фазы выполнения вызывает установку этих битов в 1 и 0 соответственно.

Read Data - Чтение данных

Для задания этой команды в контроллер передается последовательность из 9 байт (см. таблицу команд). После получения этой последовательности контроллер выдает сигнал подвода головки к поверхности диска (если она отведена), отрабатывает паузу для подвода головки (заданную в команде Specify) и начинает поиск адресной метки сектора, после чего считывает поле идентификатора сектора. Когда текущий номер сектора ("R"), хранящийся в регистре IDR совпадает с номером сектора, считанного с диска, контроллер начинает вводить данные из поля данных сектора и последовательно, байт за байтом, выдавать их на шину данных.

После окончания чтения сектора контроллер инкрементирует на 1 номер сектора и начинает считывать данные из следующего сектора. Такой обмен носит название мультисекторного. Выполнение команды может быть прекращено подачей сигнала TC (Terminal Count - конец счета). После принятия сигнала ТС контроллер прекращает передачи по шине данных, однако продолжает читать данные текущего сектора вплоть до байтов CRC-контроля, после чего операция прекращается.

Количество байт, подлежащих считыванию, зависит от значений битов MT, MFM и N, заданных в команде.

Бит МТ задает многодорожечный (multitrack) режим контроллера, позволяющий ему считывать данные с обеих сторон (дорожек) диска. В этом случае для указанного цилиндра будут переданы все сектора, начиная с сектора 1 стороны 0 и заканчивая последним сектором стороны 1. Заметим, что этот режим относится только к одному цилиндру.

В случае N=0 значение DTL определяет количество данных, которые контроллер должен трактовать как один сектор. Если DTL меньше истинного размера сектора, то данные из сектора после передачи DTL байт не передаются на шину данных. Контроллер же считывает сектор полностью, вплоть до байтов CRC контроля и, если это задано в команде, может продолжить мультисекторное чтение. Если N > 0, то значение DTL игнорируется и устанавливается в 0FFH.

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

Если контроллер второй раз обнаруживает индексный импульс, не обнаружив правильного номера сектора (заданного R), он устанавливает флаг ND (No Data) в регистре ST1 и заканчивает выполнение команды (в регистре ST0 также устанавливаются биты D7 и D6 в 0 и 1 соответственно).

После чтения поля идентификатора и поля данных каждого сектора, контроллер производит CRC-контроль считанных байтов. Если обнаружена ошибка CRC в поле идентификатора сектора, контроллер устанавливает флаг DE (Data Error) в регистре ST1, если же ошибка обнаружена в поле данных сектора, контроллер устанавливает флаг DD (Data error in Data field) в регистре ST1. В обоих случаях устанавливаются биты D7 и D6 в регистре ST0 в 0 и 1 соответственно, и выполнение команды завершается.

Если контроллер встречает адресный маркер удаленных данных и если бит SK (Skip - бит D5 в команде) не установлен, то контроллер устанавливает флаг CM (Control Mark) в регистре ST2 и заканчивает операцию после чтения всех данных сектора. Если же бит SK=1, контроллер пропускает этот сектор и начинает считывать следующий.

Во время передачи данных процессор должен обслуживать контроллер не реже 1 раза в 27 мксек. при одинарной плотности и 13 мксек. - при двойной. В противном случае контроллер устанавливает флаг OR (Over Run) в регистре ST1 и заканчивает операцию.

После завершения операции чтения (это также относится и к команде записи данных) информация, считываемая из контроллера на фазе результата (байты C-H-R-H) зависит от значения битов МТ и байта ЕОТ команды.

Write Data - Запись данных

Для задания этой команды в контроллер передается последовательность из 9 байт (см. таблицу команд). После получения последнего байта команды контроллер выдает сигнал подвода головки к поверхности диска (если она была отведена) и отрабатывает задержку для подвода головки, заданную в команде Specify и начинает поиск поля идентификатора сектора. Если текущий номер сектора ("R") хранящийся в регистре IDR, совпадает с номером сектора, считанным с диска из поля идентификатора сектора, контроллер последовательно, байт за байтом, запрашивает данные у процессора по шине данных и записывает их в поле данных сектора на диск. После окончания записи данных текущий номер сектора увеличивается на 1 и производится запись следующего поля данных. Такую мультисекторную операцию записи контроллер продолжает до тех пор, пока не получит сигнал ТС (конец счета). При поступлении сигнала ТС контроллер продолжает запись данных в текущий сектор до его заполнения. Если контроллер принимает сигнал ТС в процессе записи данных, то оставшееся поле данных заполняется нулями.

Контроллер считывает идентификатор каждого сектора и производит CRC-контроль считанных байт. Если он обнаруживает ошибку CRC в одном из секторов, он устанавливает флаг DE (Data Error) в регистре ST1 и заканчивает операцию (в регистре ST0 биты D7 и D6 устанавливаются в 0 и 1 соответственно).

Команда записи во многом аналогична команде чтения данных. Ниже перечислены все характеристики, аналогичные команде чтения данных:

В режиме записи данные от процессора или контроллера ПДП должны приходить не реже 1 раза в 31 мксек. при одинарной плотности и 15 мксек. - при двойной. В противном случае контроллер устанавливает флаг OR (Over Run) в регистре ST1 и заканчивает операцию.

Write Deleted Data - Запись удаленных данных

Команда аналогична команде Write Data за исключением того, что вместо адресного маркера данных записывает адресный маркер удаленных данных.

Read Deleted Data - Чтение удаленных данных

Команда аналогична команде Read Data за исключением случая, когда контроллер обнаруживает адресный маркер данных в начале поля данных сектора. Если бит SK=0, контроллер считывает все данные сектора, устанавливает флаг CM в регистре ST2 и заканчивает операцию. Если бит SK=1, контроллер пропускает этот сектор и переходит к чтению следующего.

Read a Track - Чтение дорожки

Команда подобна команде Read Data за исключением того, что данные будут считываться непрерывно из каждого сектора дорожки. Сразу же после обнаружения индексного импульса контроллер начинает считывать все поля данных на дорожке как непрерывный блок данных. Если контроллер обнаруживает ошибку CRC в поле идентификатора или данных, он продолжает считывать данные с дорожки. Контроллер сравнивает информацию из поля идентификатора, считанную из каждого сектора, со значением в IDR и устанавливает флаг ND в регистре ST1, если они не совпадают. Биты МТ и SK не оказывают влияния на контроллер.

Выполнение команды заканчивается, когда контроллер считает ЕОТ секторов.

Если контроллер не нашел адресного маркера поля идентификатора до того, как второй раз принял индексный импульс, он устанавливает флаг МА (Missing Address Mark) в регистре ST1 и заканчивает операцию (в регистре ST0 устанавливаются биты D7 и D6 в 0 и 1 соответственно).

Read ID - Чтение идентификатора

Эта команда используется для определения текущего положения головки записи/чтения накопителя. Контроллер запоминает информацию, считанную из первого встреченного поля идентификатора сектора. Если до прихода второго индексного импульса контроллер не встретил адресного маркера поля идентификатора, он устанавливает флаг МА в регистре ST1. Если же контроллер не нашел данных, то он устанавливает флаг ND в регистре ST1 и операция заканчивается.

Format a Track - Форматирование дорожки

Команда форматирует всю дорожку. После обнаружения индексного импульса на диск записываются следующие данные: GAPS, адресный маркер, поле идентификатора и поле данных, соответствующие стандарту IBM System 34 (одинарная плотность) и IBM System 3740 (двойная плотность).

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

Эти параметры передаются в контроллер процессором на фазе приказа. Поле данных каждого сектора будет заполнено байтами D. Поле идентификатора для каждого сектора задается процессором на фазе исполнения. Необходимы по 4 значения для каждого сектора: Это значит, что диск при необходимости, может быть отформатирован не последовательными номерами секторов.

После форматирования каждого сектора процессор должен передать новые значения C,H,R,N для каждого сектора на дорожке. Содержимое регистра R увеличивается на 1 после форматирования каждого сектора, и, следовательно, этот регистр будет содержать значение R+1 при считывании на фазе результата. Этот процесс будет продолжаться для всей дорожки, пока второй раз не будет обнаружен индексный импульс. После этого выполнение команды завершается. Если при записи от накопителя принимается сигнал Fault, контроллер устанавливает флаг ЕС в регистре ST0 и заканчивает операцию (биты D7 и D6 в регистре ST0 устанавливаются в 0 и 1 соответственно). Отсутствие сигнала Ready с накопителя в начале фазы исполнения также прекращает выполнение команды.

В таблице приведены соотношения между N, SC, GPL для различных размеров секторов.
SD - (MFM = 0)
DD - (MFM = 1)
Сектор
N
SC
GPL1
GPL2
SC
GPL1
GPL2
128
0
1A
07
1B
----
----
----
256
1
0F
0E
2A
1A
0E
36
512
2
08
1B
3A
0F
1B
54
1024
3
04
47
8A
08
3F
74
2048
4
02
C8
FF
04
99
FF
4096
5
01
C8
FF
02
C8
FF
8192
6
----
----
----
01
C8
FF
Scan Commands - Команды сканирования

Команды сканирования позволяют считанные с диска данные сравнить с данными, выдаваемые процессором (контроллером ПДП). Контроллер сравнивает данные последовательно, байт за байтом и проверяет условия:

DD = DP DD <= DP DD >= DP где DD - данные с диска; DP - данные от процессора.

После проверки всего сектора, если условие не выполняется, производится инкремент номера сектора (R + STR -> R) и операция сканирования продолжается. Операция будет продолжаться до тех пор, пока не произойдет одно из следующих условий:

Если условие сканирования удовлетворено, контроллер устанавливает флаг SH (Scan Hit) в регистре ST2 и завершает команду. Если условие не удовлетворено в промежутке между начальным сектором (заданным R) и последним сектором цилиндра (ЕОТ), контроллер устанавливает флаг SN (Scan Not Satisfied) в регистре ST2 и завершает команду.

Если во время операции поступил сигнал ТС от процессора или контроллера ПДП, контроллер прекращает сравнение на текущем байте и завершает команду.

Ниже в таблице приведены состояния битов SH и SN после различных условий сканирования:
Сканирование до ...
Рег. ST2
Примечание
SN
SH 

Равно

0
1
1
0
DD=DP
DD<>DP

Меньше или равно

0
0
1
1
0
0
DD=DP
DD<DP
DD>DP

Больше или равно

0
0
1
1
0
0
DD=DP
DD>DP
DD<DP
Если контроллер обнаруживает адресный маркер удаленных данных в одном из секторов и бит SK=0, он считает этот сектор последним сектором цилиндра, устанавливает флаг CM (Control Mark) в регистре ST2 и завершает команду. Если же бит SK=1, контроллер пропускает этот сектор и считывает следующий. В этом случае контроллер устанавливает флаг CM в регистре ST2, сигнализирующий о том, что был встречен удаленный сектор.

Когда вы программируете значения STP (STP=01 для обработки последовательных секторов, STP=02 для чтения через один сектор) или МТ (Multitrack), необходимо помнить, что последний сектор на дорожке должен быть считан. Например, если STP = 02, МТ = 0, сектора пронумерованы последовательно от 1 до 26, команду Scan начинаем с сектора 21, то успешно будут обработаны сектора 21, 23 и 25. Далее сектор 26 будет пропущен, а затем придет индексный импульс. Это вызовет ненормальное завершение операции. Если бы ЕОТ равнялось 25, а сканирование бы начиналось с сектора 20, то операция Scan завершилась бы успешно.

Аналогично командам чтения/записи, процессор или контроллер ПДП должен обслуживать контроллер каждые 27 мксек. при одинарной плотности и 13 мксек. при двойной. В противном случае контроллер выставит флаг OR (Over Run) в регистре ST1 и прекратит выполнение команды.

Seek - Команда позиционирования

Головка записи/чтения накопителя перемещается с цилиндра на цилиндр по команде Seek. Контроллер сравнивает содержимое регистра PCN (Present Cylinder Number), который хранит текущее положение головки и содержимое NCN (New Cylinder Number) - новое положение головки, заданное в команде и в зависимости от результата сравнения выполняет следующие действия:

Скорость выдачи импульсов шага задается в команде Specify значением SRT (Stepping Rate Time). После каждого импульса шага вновь сравниваются значения PCN и NCN и когда PCN = NCN, контроллер устанавливает флаг SE (Seek End) в регистре ST0 и завершает выполнение команды.

На фазе приказа контроллер находится в состоянии FDC Busy (занят), однако на фазе исполнения контроллер переходит в состояние NON Busy (не занят). Когда контроллер находится в состоянии NON Busy, ему можно задать другие операции Seek и в этом случае команда позиционирования будет выполняться одновременно для нескольких (до 4-х) накопителей.

Если перед началом фазы исполнения или во время исполнения команды Seek накопитель находится в состоянии Not Ready (не готов), контроллер устанавливает флаг NR (Not Ready) в регистре ST0 и команда завершается.

Recalibrate - Рекалибровка (откат)

Команда переустанавливает головку чтения/записи накопителя на дорожку 0. Накопитель в этом случае должен выдать сигнал TR00. Контроллер сбрасывает содержимое регистра PCN и проверяет сигнал TR00 с накопителя. Пока этот сигнал имеет низкий уровень, контроллер устанавливает в "1" сигнал направления Dir и выдает импульсы шага на накопитель. Когда сигнал TR00 становится высоким, контроллер устанавливает флаг SE (Seek End) в регистре ST0 и завершает команду. Если после выдачи 77 импульсов шага состояние сигнала не изменилось, контроллер устанавливает флаги SE (Seek End) и EC (Equipment Check) в регистр ST0 и команда завершается. Команда может производить рекалибровку одновременно всех 4-х накопителей. Реакция на исчезновение сигнала Ready с накопителя аналогична реакции в команде Seek.

Sense Interrupt Status - Считать состояние прерывания

Сигнал прерывания INT генерируется контроллером в следующих случаях:

  • 1. На фазе результата следующих команд:
  • 2. Изменение сигнала Ready с накопителя
  • 3. В конце команд Seek или Recalibrate
  • 4. На фазе выполнения в режиме NON DMA
  • Прерывания в случаях (1) и (4) легко распознаются процессором, т.к. производятся во время нормального исполнения команд. Однако прерывания в случаях (2) и (3) могут быть идентифицированы процессором только путем выполнения команды чтения состояния прерывания. Эта команда сбрасывает сигнал прерывания и посредством битов 5-7 регистра ST0 процессор может определить причину прерывания.
    SE
    INT Code
    Причина прерывания
    бит 5
    бит 6
    бит 7
    0
    1
    1
    Изменение сигнала Readu с накопителя
    1
    0
    0
    Нормальное завершение команд Seek и Recalibrate
    1
    1
    0
    Ошибочное завершение команд Seek и Recalibrate
    Команды Seek и Recalibrate не имеют фазы результата, поэтому требуется использование команды Sense Interrupt Status для их успешного завершения и проверки положения головки накопителя (PCN).

    Specify - Установить параметры накопителя

    Команда задает значения 3 временных интервалов - параметров накопителей:

  • Внимание! Большие числа задают меньшее время шага:
  • 0FH - 1 мсек., 0EH - 2 мсек. и т.д.
  • Все временные интервалы, указанные выше, связаны с тактовой частотой контроллера (CLK, выв.19) и приведены для случая, когда CLK = 8 МГц (203 мм. диск). Если же CLK = 4 МГц (133 мм. диск), то все значения уменьшатся в 2 раза.

    Бит ND в команде осуществляет выбор режима ПДП для контроллера: если бит ND=1, выбирается режим NON DMA (не-ПДП), если же ND=0, то выбирается режим DMA (ПДП).

    Sense Drive Status - Чтение состояния накопителя

    Команда может быть использована процессором, когда ему необходимо узнать состояние накопителя. Регистр ST3 содержит информацию о состоянии накопителя.

    Invalid - Недопустимая команда

    Если в контроллер передается команда, не опознанная как одна из вышеперечисленных, контроллер завершает команду. В этом случае прерывание не генерируется. Биты 6 и 7 в регистре состояния (DIO и RQM) устанавливаются в 1, указывая процессору на необходимость выполнения фазы результата - чтения регистра ST0. В регистре ST0 находится байт 80Н, показывающий недопустимую команду.

    Необходимо отметить, что после операций Seek и Recalibrate (возникновения прерывания после окончания команды), контроллер должен получить команду Sense Interrupt Status, иначе он воспримет следующую команду как недопустимую. Пользователь при необходимости может использовать эту команду, как команду NOP (нет операции) для приведения контроллера в известное состояние или в состояние без операции.

    Система команд контроллера НГМД i8272
    Фаза
    R/W
    Шина данных 
    Примечание
    7
    6
    5
    4
    3
    2
    1
    0
    Read ID
    4AH/0AH
    Приказ
    W
    0
    mfm
    0
    0
    1
    0
    1
    0
    Командное слово
    0
    0
    0
    0
    HDS
    DS0
    DS1
    Исполнение
    Выполнение операций
    Результат
    R
    ST0
    ST1
    ST2
    C
    H
    R
    N
    Командные слова
    Команда
    7
    6
    5
    4
    3
    2
    1
    0
    Прим.
    Read Data 

    Read Del. Data 

    Write Data 

    Write Del. Data 

    Read a Track 

    MT
    MT
    MT
    MT
    MT
    MFM
    MFM
    MFM
    MFM
    MFM
    SK
    SK
    SK
    SK
    SK
    0
    0
    0
    0
    0
    0
    1
    0
    1
    0
    1
    1
    1
    0
    0
    1
    0
    0
    0
    1
    0
    0
    1
    1
    0
    Scan Equal 

    Scan Low or Eq. 

    Scan High or Eq. 

    MT
    MT
    MT
    MFM
    MFM
    MFM
    SC
    SC
    SC
    1
    1
    1
    0
    1
    1
    0
    0
    1
    0
    0
    0
    1
    1
    1
    *
    *
    *
    * В командах сканирования последний байт приказа DTL заменяется на STD.
    Фаза
    R/W
    Шина данных
    Примечание
    7
    6
    5
    4
    3
    2
    1
    0
    Read ID
    4AH/0AH
    Приказ
    W
    0
    mfm
    0
    0
    1
    0
    1
    0
    Командное слово
    0
    0
    0
    0
    0
    HDS
    DS0
    DS1
    Исполнение
    Выполнение операций
    Результат
    R
    ST0
    ST1
    ST2
    C
    H
    R
    N
    Format a Track
    4DH/0DH
    Приказ
    W
    0
    mfm
    0
    0
    1
    1
    0
    1
    0
    0
    0
    0
    0
    HDS
    DS0
    DS1
    N
    SC
    GPL
    D
    Размер сектора
    кол-во секторов
    Межсекторный GAP
    Заполнитель
    Исполнение
    Выполнение операции
    Результат
    R
    ST0
    ST1
    ST2
    C
    H
    R
    N
    Recalibrate
    07H
    Приказ
    W
    0
    0
    0
    1
    1
    0
    1
    Командное слово
    0
    0
    0
    0
    0
    HDS
    DS1
    DS1
    Исполнение
    Выполнение операции
    Фазы рез-та нет
    Sense Interrupt Status
    08H
    Приказ
    W
    0
    0
    0
    0
    1
    0
    0
    0
    Командное слово
    Результат
    R
    ST0
    PCN
    Фазы исполнения нет
    Specify
    03H
    Приказ
    W
    0
    0
    0
    0
    0
    0
    1
    1
    Командное слово
    SRT
    HUT
    HLT 
    ND
    Нет фаз рез-та и исполнения
     
    Sense Drive Status
    04H
    Приказ
    W
    0
    0
    0
    0
    1
    1
    0
    1
    Командное слово
    0
    0
    0
    0
    0
    HDS
    DS0
    DS1
    Результат
    R
    ST3
    Фазы исп-ния нет
    Seek
    0FH
    Приказ
    W
    0
    0
    0
    0
    1
    1
    1
    1
    Командное слово
    0
    0
    0
    0
    0
    HDS
    DS0
    DS1
    NCN
    Исполнение
    Выполнение операций
    Фазы рез-та нет
    Генерирует прерывание
    Invalid
    XXH
    Приказ
    W
    Недопустимый код операции
    Результат
    R
    ST0
    ST0=80H - признак ошибки
     
    Регистры состояния ST0 - ST3
    Бит
    Название
    Об.
    Описание
    Регистр состояния ST0
    D7
    D6
    Interrupt
    Code
    1C
    Биты D7,D6 совместно показывают исход команды, вызвавшей прерывание : 

    00 - нормальное завершение команды (NT- Normal Termination ). 

    01 - ошибочное завершение команды (AT- Abnormal Terminated ) 

    команда была начата, но не выполнена успешно. 

    10 - недопустимая команда ( IC- Invalid Command ). 

    11 - ненормальное завершение команды из-за изменения сигнала Ready с 

    накопителя. 

    D5
    Seek End
    SE
    Когда контроллер выполнил команду Seek, этот бит установлен в "1". 
    D4
    Equipment
    Check
    EC
    Если с накопителя пришел сигнал Fault или после 77 шагов не получен сигнал TR00, этот бит устанавливается в "1". 
    D3
    Not Ready
    NR
    Если накопитель в состоянии Not Ready и задается команда чтения или записи, этот бит устанавливается в "1". 
    D2
    Head Address
    HD
    Флаг используется для указания состояния головки при прерывании. 
    D1
    D0
    Unit
    Select
    US1
    US2
    Два бита указывают номер накопителя при прерывании. 
    Регистр состояния ST1
    D7
    End of Cylinder
    EN
    Когда контроллер пытается получить доступ к сектору с номером, превышающим номер последнего сектора цилиндра, флаг устанавливается. 
    D6
    -------
    Не используется, всегда = 0. 
    D5
    Data Error
    DE
    Флаг устанавливается при выявлении ошибки CRC в полях данных или идентификатора сектора. 
    D4
    Over Run
    OR
    Флаг устанавливается, если контроллер не обслужен системой во время передачи данных ( потеря данных ). 
    D3
    -------
    Не используется, всегда = 0. 
    D2
    No Data
    ND
    В командах Read Data, Write Delete Data или Scan если контроллер не может найти сектор, указанный рег. IDR, флаг устанавливается в "1". 

    В командах Read ID, если контроллер не может считать поле идентификатора сектора без ошибки, флаг устанавливается в "1". 

    В командах Read a Cylinder, если начальный сектор не найден, флаг устанавливается в "1". 

    D1
    Not Writable
    NW
    В командах записи и форматирования, если контроллер обнаруживает сигнал защиты от записи с накопителя, флаг устанавливается. 
    D0
    Missing Address Mark
    MA
    Если не найден адресный маркер идентификатора сектора до прихода второго индексного импульса, флаг устанавливается в "1". 

    Если не обнаружен адресный маркер данных или удаленных данных, флаг устанавливается . При этом устанавливается флаг MD в регистре ST2. 

    Регистр состояния ST2
    D7
    -------
    Не используется, всегда = 0. 
    D6
    Control Mark
    CM
    В командах Read Data и Scan при обнаружении сектора с адресным маркером удаленных данных флаг устанавливается в "1". 
    D5
    Data Error in Data Field
    DD
    флаг устанавливается в "1" при обнаружении ошибки CRC в поле данных сектора. 
    D4
    Wrong Cilinder
    WC
    Устанавливается совместно с битом ND, если содержимое регистра С отличается от содержимого регистра IDR. 
    D3
    Scan Equal Hit
    SH
    В командах Scan, при удовлетворении условия "равно" этот бит устанавливается в "1". 
    D2
    Scan not Satisfied
    SN
    В командах Scan, если не найден сектор, отвечающий заданному условию, флаг устанавливается в "1". 
    D1
    Bad Cilinder
    BC
    Устанавливается совместно с битом ND, если содержимое регистра С отличается от содержимого IDR и С=0FFH. 
    D0
    Missing Address Mark in Data Field
    MD
    Если при чтении не встречен адресный маркер данных или адресный маркер удаленных данных, флаг устанавливается в "1". 
    Регистр состояния ST3
    D7
    Fault
    FT
    Отражает состояние сигнала Fault с накопителя. 
    D6
    Write Protect
    WP
    Отражает состояние сигнала Write Protect ( защита от записи )с накопителя. 
    D5
    Ready
    rdy
    Отражает состояние сигнала Ready с накопителя. 
    D4
    Track 00
    T0
    Отражает состояние сигнала Track 00 с накопителя. 
    D3
    Two Side
    TS
    Отражает состояние сигнала Two Side с накопителя. 
    D2
    Head Address
    HD
    Указывает на выбранную поверхность диска. 
    D1
    D0
    Unit
    Select
    US1
    US0
    Два бита показывают выбранный накопитель.