ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы.



 

Часть 1

                           Контроллер НГМД i8272.                
   ЙНННННЛ»
                  Описание работы контроллера и системы команд.  
   єi8272єє
                                                                 
   ИНННННКј
     Для доступа  со  стороны  процессора  контроллер  8272 имеет
 2 регистра:
регистр состояния и регистр данных.  Регистр состояния (Main Stat
us 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-х накопителей.  Если  сигнал  Rea
dy  изменяет
свое   состояние   (обычно  из-за  открытия  дверки  накопителя),
  контроллер
генерирует прерывание.  Процессор передачей команды  Sense  Inter
rupt  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  в  регистре  ST
0  в  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-контроль  считанных  байт.  Если  он  обнаруживает  ошибку CR
C в одном из
секторов,  он устанавливает флаг DE (Data Error) в регистре ST1 и
 заканчивает
операцию   (в   регистре   ST0   биты  D7  и  D6  устанавливаются
  в  0  и  1
соответственно).
       Команда записи  во  многом  аналогична  команде  чтения  д
анных.  Ниже
перечислены все характеристики, аналогичные команде чтения данных
     * Количество передаваемых данных.
     * Флаг EN (ENd of cylinder).
     * Флаг ND (No Data).
     * Пауза до отвода головки HUT.
     * Информация,  считываемая на фазе результата,  если процесс
ор прерывает
       выполнение команды.
     * Определение DTL, когда N=0 или N>0.
     В режиме  записи  данные  от  процессора  или  контроллера  
ПДП   должны
приходить  не реже 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 в регистре S
T1, если они
не совпадают. Биты МТ и 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 (двойная плотность).
     Формат задается в команде следующими программируемыми значен
иями:
     * N   - число байт в секторе.
     * SC  - число секторов на цилиндре.
     * GPL - длина межсекторного промежутка.
     * D   - байт для заполнения области данных.
Эти параметры  передаются  в  контроллер  процессором  на фазе пр
иказа.  Поле
данных каждого сектора будет заполнено байтами  D.  Поле  идентиф
икатора  для
каждого  сектора  задается  процессором  на фазе исполнения.  Нео
бходимы по 4
значения для каждого сектора:
     * C - номер цилиндра
     * H - номер головки (поверхности)
     * R - номер сектора
     * N - код длины сектора
Это значит,   что  диск  при  необходимости,  может  быть  отформ
атирован  не
последовательными номерами секторов.
     После форматирования  каждого  сектора  процессор  должен пе
редать новые
значения 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є           є
                є Сканирование до.. МНННЛННН№ Примeчаниеє
                є                   є SNє SHє           є
                МНННННННННННННННННННОНННОНННОННННННННННН№
                є Равно             є 0 є 1 є  DD = DP  є
                є                   є 1 є 0 є  DD <>DP  є
                МНННННННННННННННННННОНННОНННОННННННННННН№
                є Меньше или равно  є 0 є 1 є  DD = DP  є
                є                   є 0 є 0 є  DD < DP  є
                є                   є 1 є 0 є  DD > DP  є
                МНННННННННННННННННННОНННОНННОННННННННННН№
                є Больше или равно  є 0 є 1 є  DD = DP  є
                є                   є 0 є 0 є  DD > DP  є
                є                   є 1 є 0 є  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  (O
ver  Run)  в
регистре ST1 и прекратит выполнение команды.
 Seek                                               Команда позиц
ионирования
 НННН                                               ННННННННННННН
ННННННННННН
     Головка записи/чтения накопителя перемещается с цилиндра на 
 цилиндр  по
команде Seek. Контроллер сравнивает содержимое регистра PCN (Pres
ent Cylinder
Number),  который хранит текущее положение  головки  и  содержимо
е  NCN  (New
Cylinder   Number)  -  новое  положение  головки,  заданное  в  к
оманде  и  в
зависимости от результата сравнения выполняет следующие действия:
     * PCN  < NCN - сигнал направления для накопителя устанавлива
ется в "1" и
                    выдается импульс шага.
     * PCN  > NCN - сигнал направления для накопителя устанавлива
ется в "0" и
                    выдается импульс шага.
     Скорость выдачи импульсов шага задается в команде Specify  з
начением SRT
(Stepping Rate Time). После каждого импульса шага вновь сравниваю
тся значения
PCN и NCN и когда PCN = NCN,  контроллер устанавливает флаг SE (S
eek  End)  в
регистре ST0 и завершает выполнение команды.
     На фазе приказа контроллер  находится  в  состоянии  FDC  Bu
sy  (занят),
однако  на  фазе  исполнения  контроллер  переходит  в состояние 
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 (Se
ek End) и EC
(Equipment  Check)  в  регистр  ST0  и  команда  завершается.  Ко
манда  может
производить  рекалибровку  одновременно  всех  4-х  накопителей. 
 Реакция  на
исчезновение сигнала Ready с накопителя аналогична реакции в кома
нде Seek.
 Sense Interrupt Status                         Считать состояние
 прерывания
 НННННННННННННННННННННН                         ННННННННННННННННН
ННННННННННН
     Сигнал прерывания INT генерируется контроллером в следующих 
 случаях:
     1. На фазе результата следующих команд:
          * Read Data
          * Read a Track
          * Read ID
          * Read Deleted Data
          * Write Data
          * Write Deleted Data
          * Format a Track
          * Scan Sommand
     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 временных интервалов - параметров 
накопителей:
     * HUT  -  пауза  до  отвода головки.  Задает время от оконча
ния операции
               чтения/записи до момента отвода головки от  поверх
ности диска.
               Время  задается  в  единицах  по  16 мсек.  и лежи
т в пределах
               16..240 мсек.
     * SRT   - время  шага  головки.   Задает  время  задержки   
между  двумя
               последовательными импульсами шага.  Время задается
 в  единицах
               по 1 мсек.  и лежит в пределах 1..16 мсек.
               Внимание!  Большие числа задают меньшее время шага
                             0FH - 1 мсек., 0EH - 2 мсек. и т.д.
     * HLT -   время подвода головки.  Задает  время  между  выда
чей  сигнала
               подвода  головки  к  диску  и  началом операции чт
ения/записи.
               Задается в единицах по 2 мсек. и лежит в пределах 
2..254 мсек.
     Все временные  интервалы,  указанные  выше,  связаны с такто
вой частотой
контроллера (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  (нет операции) для приведения контроллера в известн
ое состояние
или в состояние без операции.


Яндекс цитирования