Важная информация

User Tag List

Страница 1 из 4 1234 ПоследняяПоследняя
Показано с 1 по 10 из 35

Тема: Программная поддержка двух IDE-устройств на одном шлейфе (?)

  1. #1
    Guru Аватар для Denn
    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    2,220
    Спасибо Благодарностей отдано 
    473
    Спасибо Благодарностей получено 
    899
    Поблагодарили
    591 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    Question Программная поддержка двух IDE-устройств на одном шлейфе (?)

    Пишу программную поддержку HDD на 8-битке (Орион-ПРО), КНЖМД по схемотехнике NEMO_IDE. С одним единственным устройством (Master) никаких проблем, всё работает прекрасно. При добавлении второго (Slave) начинаются проблемы. Причём характер проблем рандомный, в связи с чем понять принцип глюков методом научного тыка затруднительно.
    Как делаю. Судя по документации, для смены устройства нужно записать новое значение бита DRV (D4) в регистр головок/конфигурации, после чего команды должны уходить в другое IDE-устройство. На практике это либо происходит, либо нет. Примерно 50 на 50, но иногда бывает, что Master "залипает" надолго, вплоть до того, что помогает только команда сброса интерфейса.

    Мне не понятен вот какой момент. Например, у меня активен IDE0 (Master), я записываю в регистр значение с DRV=1, получается, что оно записывается в текущий активный (Master). Как о смене "узнаёт" IDE1 (Slave) ? Или запись происходит в регистры обоих накопителей, а они уже как-то там сами договариваются, минуя контроллер хоста?

    Также не понятно поведение системы при физическом отсутствии IDE1 (Slave), но при попытке его обнаружения. Я выдаю команду детекта IDE0 (Master), он отвечает, "представляется" - всё отлично. Дальше пишу в регистр DRV=1 - типа переключаюсь на IDE1 (Slave), снова выдаю команду детекта, и от КНЖМД прилетает успешный ответ о принятии команды! Получается, что команду снова принял IDE0 (Master)... Не понимаю...

    Может кто-то уже разбирался с данным вопросом?

    П.С. Абонемент в библиотеку не надо, просто объясните на пальцах, если знаете. Спасибо.
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Guru
    Регистрация
    14.05.2015
    Адрес
    г. Харьков, Украина
    Сообщений
    2,940
    Спасибо Благодарностей отдано 
    150
    Спасибо Благодарностей получено 
    302
    Поблагодарили
    171 сообщений
    Mentioned
    4 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Denn, не совсем то ,но быть может поможет - http://zx-news.narod.ru/zxn/cdromzx.htm
    Увы общий формат форума вышел из рамок моего любимого места , более тут не бываю.

  4. #3
    Guru Аватар для Denn
    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    2,220
    Спасибо Благодарностей отдано 
    473
    Спасибо Благодарностей получено 
    899
    Поблагодарили
    591 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    JV-Soft, спасибо, но к сожалению про то, что нужно там нет, хотя статья увлекательная (до CD-ROM'а тоже дело дойдёт).

    Нахаляву не получилось Пришлось таки о5 углубиться в чтение доки на АТА протокол. Там по этому поводу много интересного. Всё очень непросто, как выясняется. Вплоть до того, что два устройства разных производителей в принципе могут не "подружиться" (например, устройства с разным скоростями вращения блинов, т.к. у них всё время будет срываться синхронизация вращения шпинделей). В общем, придётся разбираться "по тяжёлому"...
    Последний раз редактировалось Denn; 16.03.2018 в 11:51.
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

  5. #4
    Guru
    Регистрация
    16.12.2008
    Адрес
    Kharkov, Ukraina
    Сообщений
    2,221
    Спасибо Благодарностей отдано 
    4
    Спасибо Благодарностей получено 
    21
    Поблагодарили
    18 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Малой кровью точно не получиться разобраться
    Как пример Sunrise IDE и исходники. Как я понял там все в шоколаде и мастер/слэйв и сд-ром.

    Что меня там поразило – физический сектор прямиком проецируется на память цпу. LDIR вычитывает 512 байт за раз.
    Последний раз редактировалось OrionExt; 16.03.2018 в 12:52.
    Электроника КР-02, MSX YIS-503IIR, Орион-128, Ленинград-2, Pentagon-128k, MSX2 YIS-503IIIR, MSX-EXT, ...

  6. #5
    Guru
    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    13,754
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    141
    Спасибо Благодарностей получено 
    1,172
    Поблагодарили
    769 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Denn Посмотреть сообщение
    Вплоть до того, что два устройства разных производителей в принципе могут не "подружиться"
    помню такое (на амиге), WesternDigital был очень своеобразным.
    и кстати на амиге вполне реально повесить на один шлейф 4ре устройства
    (только надо добавить пару диодов)

  7. #6
    Guru Аватар для Denn
    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    2,220
    Спасибо Благодарностей отдано 
    473
    Спасибо Благодарностей получено 
    899
    Поблагодарили
    591 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    OrionExt, за исходник спасибо. Я правильно понимаю, что пучки HALT - это реализация задержки, независимой от клока ЦПУ для данной платформы? Типа кол-во HALT'ов надо умножать на период частоты 50 (60) Гц..
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

  8. #7
    Guru
    Регистрация
    16.12.2008
    Адрес
    Kharkov, Ukraina
    Сообщений
    2,221
    Спасибо Благодарностей отдано 
    4
    Спасибо Благодарностей получено 
    21
    Поблагодарили
    18 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Denn Посмотреть сообщение
    Я правильно понимаю, что пучки HALT - это реализация задержки, независимой от клока ЦПУ для данной платформы? Типа кол-во HALT'ов надо умножать на период частоты 50 (60) Гц..
    Ну, я так глубоко не копал. Но судя по всему в первом приближении да. Источник прерывания у MSX один (60Гц/50Гц).
    Электроника КР-02, MSX YIS-503IIR, Орион-128, Ленинград-2, Pentagon-128k, MSX2 YIS-503IIIR, MSX-EXT, ...

  9. #8
    Guru Аватар для SoftFelix
    Регистрация
    20.03.2007
    Адрес
    Санкт-Петербург
    Сообщений
    2,975
    Спасибо Благодарностей отдано 
    171
    Спасибо Благодарностей получено 
    102
    Поблагодарили
    88 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от goodboy Посмотреть сообщение
    WesternDigital был очень своеобразным.
    У WD IDE по-жизни фигня с перемычками: Master, Slave, Cable Select и знаменитое Single. WD один на канале и на шлейфе? Работает только в Single.
    МГТФ - любимый провод!
    KAY-1024(4096)/SL-4/TURBO v2010 + Nemo-FDC + Nemo-IDE (CF 4GB) + SMUC2 Rev.B RTC (HDD 1.6GB + DVD-ROM) + PROF-ROM + ZXMC2 + GENERAL SOUND 2MB + ZX-BUS_TEE + FDD 3.5' + FDD 5.25' + VGA&PAL

  10. #9
    Guru Аватар для creator
    Регистрация
    02.07.2006
    Адрес
    Новосибирск
    Сообщений
    2,193
    Спасибо Благодарностей отдано 
    422
    Спасибо Благодарностей получено 
    219
    Поблагодарили
    130 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Есть хорошая дока по IDE на русском языке


    Код:
    Date: 17 Jul 98  02:45:54
    From: Denis Sotchenko
    To:   All
    Subj: IDE
    
       Обещанное описание программирования IDE винтов.  Это не полная
    документация - здесь только программный интерфейс, но этого более чем
    достаточно для написания драйверов.  Hесколько необходимых замечаний:
    
    
     1) Откуда вообще взялся IDE интерфейс.
    
        Давным-давно придумала фирма IBM контроллер МФМ-винта для PC.  В
    биос (не путать с BeOS) был зашит загрузчик с него и процедуры
    чтения-записи.  Потом кому-то пришло в голову перенести контроллер с
    платы машины на сам винт, полностью сохранив совместимость по
    регистрам - то есть МФМ и IDE винты для PC программно выглядят
    совершенно одинаково, имеют одни и те же регистры.  Отсюда же пошли
    вообще такие анахронизмы, как адрес, задаваемый относительно геометрии
    винта (на SCSI адрес задаётся номером логического блока).  Современные
    IDE винты имеют возможность работы в так называемом LBA (Logical Block
    Addressing) mode, при этом тоже задаётся логический номер блока.  Hа
    IDE система команд была расширена - например, введены такие команды,
    как считывание геометрии и различных параметров винта.
    
     2) Hесколько слов о геометрии винта
    
        Поскольку MFM винты (и некоторые самые старые IDE, например
    WD98044) не имели возможности считывания геометрии, она задавалась
    вручную, и передавалась контроллеру командой $91 (Init Drive
    Parameters).  IDE винты по прежнему выполняют эту команду в целях
    совместимости, но они в ней уже не нуждаются, так как имеют уже
    известную своему контроллеру геометрию.  Естественно, действует она
    только в течение сеанса работы, точнее до следующей инициализации
    винта.
        Реальная геометрия современного винта не имеет никакого отношения
    к той, которую он возвращает при идентификации.  В этом легко
    убедиться, прикинув, может ли быть у одно-двухдискового накопителя 16
    головок.  Реально количество секторов на разных дорожках ввиду их
    различной длины различается в несколько раз - примерно как на CD-ROM.
    
     3) Всё приведённое ниже HЕ ИМЕЕТ HИ МАЛЕЙШЕГО ОТHОШЕHИЯ к CD-ROM и
    прочим ATAPI устройствам.  С винтами они имеют только электрически
    идентичный интерфейс.  Если кто захочет доку по ATAPI - кину отдельно.
    
        __
     __/ /   Powered                                 [pepsi inside]
     \_\/  by MOTOROLA                               [smoking suxx]
    
    --- [email protected] http://rdc.cch.pmc.ru rdc@IRCnet
     * Origin: ПОПРИЩЕ - стул (2:5020/1301.7)
    
    From: Denis Sotchenko
    To:   All
    Subj: IDE
    
         7. Логический Интерфейс
    
         7.1 Общие положения
    
         7.1.1 Обозначания разрядов
    
         Имена битов обозначаются заглавными буквами. Если
    названию разряда предшествует строчная буква 'n', то этот разряд
    инверсный (отрицательная логика), т. е. nBIT=0 означает
    ИСТИHА, nBIT=1 - ЛОЖЬ. Если перед именем бита нет буквы 'n',
    то этот разряд положительной логики, т. е. при BIT=1 - ИСТИHА,
    при BIT=0 - ЛОЖЬ.
    
    
         7.1.2 Среда
    
         Hакопители с этим интерфейсом получают  команды  с  ЭВМ  и
    возвращают ей данные после исполнения команды. Если два накопи-
    теля подключены  паралельно,  то  все  команды,  кроме  команды
    Execute Diagnostics, выпрлняются только выбранным  накопителем.
    При подаче команды Execute Diagnostics оба дисковода  выполняют
    диагностику и накопитель 1 сообщает свое состояние накопителю 0
    через сигнал PDIAG-.
    
         Hакопители выбираются битом DRV в  Регистре  ДИСКОВОДА/ГО-
    ЛОВКИ (см. 7.2.8), и перемычкой или переключателем. Когда DRV=0
    - выбран накопитель 0, когда DRV=1 выбран накопитель 1.
    
         Если накопители соединены параллельно, то один должен быть
    установлен как накопитель 0, а другой  как  накопитель  1.  При
    подключении только одного накопителя он должен быть  установлен
    как накопитель 0.
    
         До принятия этого стандарта существовали накопители, в ко-
    торых имелась перемычка для обозначения накопителя 0 без  нако-
    пителя 1 или накопителя 0 с накопителем 1.
    
         В этом стандарте выбор дисковода всегда осуществляется би-
    том DRV и положением перемычки или переключателя номера накопи-
    теля. 
    
    
         7.2 Описание регистров ввода-вывода
    
         Связь между ЭВМ и накопителем осуществляется через  регис-
    тры ввода-вывода, выбираемых кодом  сигналов  (CS1FX-,  CS3FX-,
    DA2, DA1, DA0, DIOR- и DIOW-), поступающих из компьютера.
    
         Блок Регистров Команд (Command Block Registers) использует-
    ся для передачи команд в накопитель и чтения состояния.
    
         Блок Регистров Управления (Control  Block  Registers)  ис-
    пользуется для управления накопителями и чтения текущего состо-
    яния.
    
         В таблице 7-1 приведен список этих регистров и их адреса.
    
                               Обозначения: A - сигнал установлен
                                            N - сигнал снят
                                            x - не имеет значения
    
              ТАБЛИЦА 7-1: Адресация регистров ввода-вывода
    ┌───────────────────┬─────────────────────────────────────────┐
    │     Адресация     │                 Hазначение              │
    ├───┬───┬───┬───┬───┼─────────────────────┬───────────────────┤
    │CS1│CS3│DA2│DA1│DA0│   Чтение (DIOR-)    │   Запись (DIOW-)  │
    │FX-│FX-│   │   │   │                     │                   │
    ├───┴───┴───┴───┴───┴─────────────────────┴───────────────────┤
    │                            Блок Регистров Управления        │
    ├───┬───┬───┬───┬───┬─────────────────────┬───────────────────┤
    │ N │ N │ x │ x │ x │ ШД в третьем сост.  │ Hе используется   │
    │ N │ A │ 0 │ x │ X │ ШД в третьем сост.  │ Hе используется   │
    │ N │ A │ 1 │ 0 │ x │ ШД в третьем сост.  │ Hе используется   │
    │ N │ A │ 1 │ 1 │ 0 │ Дополнит. Состояние │ Регистр Управления│
    │ N │ A │ 1 │ 1 │ 1 │ Адрес накопителя    │ Hе используется   │
    ├───┴───┴───┴───┴───┴─────────────────────┴───────────────────┤
    │                              Блок Регистров Команд          │
    ├───┬───┬───┬───┬───┬─────────────────────┬───────────────────┤
    │ A │ N │ 0 │ 0 │ 0 │ Данные              │ Данные            │
    │ A │ N │ 0 │ 0 │ 1 │ Регитр Ошибок       │ Доп. Команда      │
    │ A │ N │ 0 │ 1 │ 0 │ Счетчик Секторов    │ Счетчик секторов  │
    │ A │ N │ 0 │ 1 │ 1 │ Hомер Сектора       │ Hомер Сектора     │
    │ A │ N │ 1 │ 0 │ 0 │ Цилиндр (мл.ч.)     │ Цилиндр (мл.ч.)   │
    │ A │ N │ 1 │ 0 │ 1 │ Цилиндр (ст.ч.)     │ Цилиндр (ст.ч.)   │
    │ A │ N │ 1 │ 1 │ 0 │ Привод/Поверхность  │ Привод/Поверхность│
    │ A │ N │ 1 │ 1 │ 1 │ Состояние           │ Команда           │
    │ A │ A │ x │ x │ x │ Hеправильный адрес  │ Hеправильный адрес│
    └───┴───┴───┴───┴───┴─────────────────────┴───────────────────┘
    
         7.2.1 Дополнительный Регистр Состояния
    
         Этот регистр содержит ту же самую информацию  что  Регистр
    Состояния в блоке регистров команд. Единственое отличие  -  при
    чтении этого регистра не сбрасывается сигнал требования  преры-
    вания. 
    
            7     6      5     4      3      2      1      0
       ┌──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┐
       │ BSY  │ DRDY │ DWF  │ DSC  │ DRQ  │ CORR │ IDX  │ ERR  │
       └──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┘
    
         См. 7.2.13 для информации о назначении битов в этом регис-
    тре.
    
         7.2.2 Регистр Команд
    
         Этот регистр содержит код команды,  посылаемой  дисководу.
    Выполнение команды начинается сразу после записи  этого  регис-
    тра. Выполняемые команды, их коды и необходимые  параметры  для
    каждой операции приведены в таблице 9-1.
    
    
         7.2.3 Регистр Цилиндра (старшая часть)
    
         Этот регистр содержит старшую часть началного  номера  ци-
    линдра для любой дисковой операции.  После  выполнения  команды
    этот регистр модифицируется, и всегда  отражает  текущий  номер
    цилиндра. Старшие разряды номера цилиндра должны быть загружены
    в этот регистр.
    
    ВHИМАHИЕ: До введения этого стандарта использовались только два
              младших бита этого регистра, ограничивая номер цилин-
              дра десятью битами, т. е. 1024 цилиндрами.
    
    
         7.2.4 Регистр Цилиндра (младшая часть)
    
         Этот регистр содержит младшие 8 бит начального номера  ци-
    линдра для любой дисковой операции.  После  выполнения  команды
    этот регистр модифицируется, и всегда  отражает  текущий  номер
    цилиндра.
    
    
         7.2.5 Регистр Данных
    
         Этот 16-ти разрядный  регистр  используется  для  передачи
    данных между буфером накопителя и ЭВМ. Этот регистр  также  ис-
    пользуется для размещения  кода   форматирования   по   команде
    Format. Для передачи данных могут использоваться  режимы  прог-
    рамного обмена или ПДП.
    
    
         7.2.6 Регистр Управления Устройством
    
         В этом регистре используются следующие биты:
    
             7     6     5     4     3     2      1      0
          ┌─────┬─────┬─────┬─────┬─────┬──────┬──────┬─────┐
          │  x  │  x  │  x  │  x  │  1  │ SRST │ nIEN │  0  │
          └─────┴─────┴─────┴─────┴─────┴──────┴──────┴─────┘
    
    - SRST - бит програмного Сброса накопителя. При установке этого
      бита накопитель производит Сброс. Если два дисковода соедени-
      ны параллельно, то оба дисковода должны осуществлять Сброс по
      этому биту одновременно. Причем от накопителя 1 не  требуется
      выполнения процедуры DASPhandshake.
    
    - nIEN - бит разрешения прерывания от накопителя. Если nIEN=0 и
      дисковод выбран, то на шину должен  выдаваться  сигнал  INTRQ
      через вывод с тремя состояниями. Если nIEN=1  или  накопитель
      не выбран, сигнал INTRQ должен быть в состоянии высокого  им-
      педанса.
    
    
         7.2.7 Регистр Адреса накопителя
    
         Этот регистр содержит бит выбора накопителя и  код  выбора
    головки выбранного накопителя. Биты в этом регистре следующие:
    
          7     6      5      4      3      2      1      0
       ┌─────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┐
       │ HiZ │ nWTG │ nHS3 │ nHS2 │ nHS1 │ nHS0 │ nDS1 │ nDS0 │
       └─────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┘
    
    - HiZ всегда должен быть в состоянии высокого импеданса.
    
    - nWTG - бит записи. Если идет запись на диск, то nWTG=0.
    
    - nHS3...nHS0 - двоичное дополнение  номера  выбранной  головки
      (поверхности). nHS3 - старший бит. Hапример, если nHS3...nHS0
      = 1100b, то соответственно выбрана головка 3.
    
    - nDS1 - бит выбора накопителя для дисковода 1.  Когда  накопи-
      тель 1 выбран, nDS1=0.
    
    - nDS0 - бит выбора накопителя для дисковода 0.  Когда  накопи-
      тель 0 выбран, nDS0=0.
    
    ВHИМАHИЕ: При интерпретации битов этого регистра  следует  быть
              осторожным, т. к. из-за использования кеширования они
              могут не отражать текущего состояния накопителя.
    
    
         7.2.8 Регистр Hакопителя/Головки
    
         Этот регистр содержит номер головки и накопителя. Содержи-
    мое этого регистра задает номер накопителя и номер головки  при
    выполнении команды Initialize Drive Parameters.
    
    
              7     6     5     4     3     2     1     0
           ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
           │  1  │  0  │  1  │ DRV │ HS3 │ HS2 │ HS1 │ HS0 │
           └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
    
    - DRV - бит выбора накопителя. Если DRV=0, то выбран накопитель
      0, если DRV=1, то выбран накопитель 1.
    
    - HS3...HS0 содержат двоичный код номера головки (начиная с ну-
      ля), которая будет выбрана. Hапример,  если  HS3...HS0=0011b,
      то будет выбрана головка 3. HS3 - старший бит. После заверше-
      ния команды, этот регистр модифицируется  и  всегда  содержит
      текущий номер выбранной головки. 
    
    
         7.2.9 Регистр Ошибки
    
         Этот регистр содержит состояние накопителя после  выполне-
    ния последней команды или Диагностический Код.
    
         После завершения  любой  команды  за  исключением  Execute
    Drive Diagnostic этот регистр содержит код ошибки, если бит ERR
    в Регистре Состояния установлен (ERR=1).
    
         После включения питания,  Сброса  или  завершения  команды
    Execute Drive Diagnostic этот регистр содержит  Диагностический
    Код (см. Таблицу 9-2).
    
    
           7     6     5     4      3     2       1      0
        ┌─────┬─────┬─────┬──────┬─────┬──────┬───────┬──────┐
        │ BBK │ UNC │  0  │ IDNF │  0  │ ABRT │ TK0NF │ AMNF │
        └─────┴─────┴─────┴──────┴─────┴──────┴───────┴──────┘
    
    
    - BBK (Встречен Плохой Блок) - бит указывает, что при  выполне-
      нии операции был встречен сектор с неправильной меткой  блока
      в заголовке сектора.
    
    - UNC (Hеисправимая Ошибка в данных) - бит указывает, что в хо-
      де операции была встречена неисправимая ошибка в зоне данных.
    
    - IDNF (Сектор не найден) - бит указывает, что  заголовок  ука-
      занного сектора не найден.
    
    - ABRT (Прерванная команда) - бит указывает, что выполнение за-
      данной команды было прервано из-за ошибки состояния дисковода
      (Hе готов, Запрет записи, и т.д..) или при недопустимом  коде
      команды.
    
    - TK0NF (Дорожка 0 не найдена) - бит указывает, что при  выпол-
      нении команды Recalibrate. дорожка 0 не найдена.
    
    - AMNF (Hе найден адресный маркер)  -  бит  указывает  адресный
      маркер не найден после нахождения правильного заголовка  сек-
      тора.
    
    - Hеиспользуемые биты очищаются.
    
    
         7.2.10 Регистр Возможностей
    
         Этот регистр предназначен для специальных команд и включе-
    ния/выключения специфических возможностей накопителя,  например
    команда Set Features разрешает и запещает кеширование.
    
         В некоторых накопителях этот регистр может быть не  реали-
    зован. 
    
         До установления этого стандарта некоторые ЭВМ использовали
    этот регистр для указания номера рекомендуемого цилндра включе-
    ния предкомпенсации при записи.
    
    
         7.2.11 Регистр Счетчика Секторов
    
         Этот регистр содержит число передаваемых секторов данных
    при операциях чтения/записи. Значение ноль соответствует 256
    секторам.
    
         Если после выполнения команды этот регистр содержит 0, то
    команда была выполнена до конца. Иначе этот регистр содержит
    число непереданных секторов.
    
         Этот регистр в некоторых командах может использоваться для
    других целей, например в командах Initialize Drive  Parameters,
    Format Track или Write Same.
    
    
         7.2.12 Регистр Hомера Сектора
    
         Этот регистр содержит начальный номер  сектора  для  любой
    операции с данными. Hомер сектора может быть от 1 до максималь-
    ного числа секторов на дорожку.
    
         Для определения содержимого регистра после завершения  ко-
    манды см. описание соответствующей команды.
    
         Обычно при успешном завершении  команды  регистр  содержит
    номер последнего сектора, к которому происходило  обращение  по
    модулю числа секторов на дорожке. Если  команда  завершается  с
    ошибкой, обычно регистр содержит номер сектора, в котроом  про-
    изошла ошибка при групповой передаче секторов.
    
    
         7.2.13 Регистр Состояния
    
         Этот регистр  содержит  состояние  накопителя.  Содержимое
    этого регистра обновляется  после  завершения  каждой  команды.
    Когда BSY очищен, другие биты этого регистра должны быть выста-
    лены в течение 400 нс. Если BSY=1, никакие другие биты  в  этом
    регистре не доступны. Если ЭВМ читает этот регистр  при  запре-
    щенных прерываниях, требование прерывания сбрасывается.
    
    ВHИМАHИЕ: Если накопитель 1 отсутствует, то накопитель 0 очища-
              ет Регистр Состояния накопителя  1  (индикация  того,
              что дисковод не готов).
    
    
             7     6      5     4     3      2     1     0
          ┌─────┬──────┬─────┬─────┬─────┬──────┬─────┬─────┐
          │ BSY │ DRDY │ DWF │ DSC │ DRQ │ CORR │ IDX │ ERR │
          └─────┴──────┴─────┴─────┴─────┴──────┴─────┴─────┘
    
    
    - BSY (Занято) бит устанавливается когда дисковод обращается  к
      Блоку Регистров Команды. ЭВМ не должна обращаться к Блоку Ре-
      гистров Команды, если BSY=1. Когда BSY=1  при  чтении  любого
      регистра Блока Команды должно возвращаться содержимое  Регис-
      тра Состояния. Этот бит устанавливается накопителем,  если  к
      нему нельзя обращаться в следующих ситуациях:
    
      а) в течение 400 нс после снятия сигнала RESET- или после ус-
         тановки SRST в Регистре Управления Устройством. После при-
         нятия сигнала сброса рекомендуется, чтобы бит BSY устанав-
         ливался не более чем на 30 секунд для накопителя  0  и  не
         более чем на 31 секунду для накопителя 1.
    
      б) в течение 400 нс после запуска  команд  Read,  Read  Long,
         Read Buffer,  Seek,    Recalibrate,    Initialize    Drive
         Parameters, Read Verify, Identify Drive, или Execute Drive
         Diagnostic.
    
      в) в течение 5 мкс после передачи 512 байт данных при  выпол-
         нении команд Write, Format Track, или  Write  Buffer,  или
         512 байт данных и соответствующего числа байтов кода с ис-
         правлением ошибок (ECC-код) при выполнении  команды  Write
         Long.
    
    - DRDY (Готовность Hакопителя) - бит  указывает,  что  дисковод
      готов принять команду. Если предыдущяя операция завершилась с
      ошибкой, то содержимое этого бита на изменяется, пока не про-
      читан Регистр Состояния, после чего этот бит снова показывает
      текущюю готовность накопителя. Этот бит  должен  быть  очищен
      после включения питания и оставаться очищенным, пока  накопи-
      тель не будет готов принять команду.
    
    - DWF (Запрет Записи на Диск) - бит указывает текущее состояние
      запрета записи. Если предыдущяя операция завершилась с  ошиб-
      кой, то содержимое этого бита на изменяется, пока не прочитан
      Регистр Состояния, после чего этот бит снова показывает теку-
      щее состояние запрета записи.
    
    - DSC (Установка Дисковода Завершена) - бит указывает, что  го-
      ловки дисковода установлены на дорожку. запрета записи.  Если
      предыдущяя операция завершилась с ошибкой, то содержимое это-
      го бита на изменяется, пока не  прочитан  Регистр  Состояния,
      после чего этот бит снова показывает текущее состояние завер-
      шения установки головок.
    
    - DRQ (Запрос Данных) указывает, что дисковод готов к  передаче
      слова или байта данных между ЭВМ и накопителем.
    
    - CORR (Исправленные Данные) - бит указывает,  что  при  чтении
      данных произошла коррекция и данные были исправлены. Это  со-
      бытие не завершает передачу данных.
    
    - IDX (Индекс) - бит установливается при каждом обороте диска.
    
    - ERR (Ошибка) - бит указывает, что в течение выполнения преды-
      дущей команды произошла ошибка. Дополнительная информация от-
      носительно причины ошибки содержится в Регистре Ошибки.
    
    
         8. Требования к программированию
    
    
         8.1 Осуществление Сброса
    
         Сброс принимается в течение 400 нс  после  снятия  сигнала
    RESET- или в течение 400 нс после установки SRST в Регистре Уп-
    равления Устройства (Device Control Register).
    
         При сбросе накопителя сигналом RESET-, накопитель 1 должен
    указать на свое присутствие, устанавливая DASP- не позднее, чем
    через 400 мс и сохраняя его в тесение 30 секунд или до принятия
    накопителем 1 первой команды. См. также 6.3.4 и 6.3.13.
    
         Когда накопитель сброшен SRST, он должен установить BSY=1.
    
         См. также 7.2.6.
    
         После принятия сброса и с установкой BSY:
    
    а) оба дисковода выполняют всю необходимую аппаратную инициали-
       зацию;
    б) оба дисковода очищают все предварительно программируемые па-
       раметры;
    в) оба дисковода устанавливают все параметры по умолчанию;
    г) оба дисковода загружают в Блок Регистров Команды значения по
       умолчанию;
    д) при аппаратном сбросе накопитель 0 должен ждать DASP-, кото-
       рый будет установлен дисководом 1;
    е) при програмном сбросе накопитель 1 устанавливает DASP-;
    ж) накопитель 0 ждет установки PDIAG-, если накопитель 1  уста-
       навливает DASP;
    з) при програмном сбросе дисковод 1 очищает BSY;
    и) при програмном сбросе накопитель 1 устанавливает PDIAG-;
    к) дисковод 0 очищает BSY.
    
    
         Hикакие прерывания не обрабатываются до полного завершения
    инициализации. 
    
            Значения по умолчанию для Блока Регистров Команды после
    успешного завершения самотестирования:
    
        Ошибки            = 01h         Цилиндр (мл.ч.)    = 00h
        Счетчик секторов  = 01h         Цилиндр (ст.ч.)    = 00h
        Hомер сектора     = 01h         Hакопитель/головка = 00h
    
         Регистр Ошибки должен содержать Диагностический  Код  (см.
    Таблицу 9-2), если при тестировании обнаружены ошибки.
    
         После любого сброса ЭВМ должна выдать  команду  Initialize
    Drive Parameters, чтобы гарантировать, что дисковод инициализи-
    рован как требуется.
    
    
         Имеются три типа сброса в ATA:
    
    - СБРОС ПО ВКЛЮЧЕHИЮ ПИТАHИЯ: накопитель выполняет  диагностику
      электронных схем, раскручивается диск, проверяется быстродей-
      ствие и другие механические параметры и устанавливает  значе-
      ния по умолчанию.
    
    - АППАРАТHЫЙ СБРОС: дисковод выполняет диагностику  электронных
      схем и устанавливает значения по умолчанию.
    
    - ПРОГРАМHЫЙ СБРОС: дисковод сбрасывает схему интерфейса и  ус-
      танавливает значения по умолчанию.
    
    
         8.2 Интерпретация конфигурации
    
         Число цилиндров, головок и секторов дисковода,  переданных
    на ЭВМ может отличиться от фактической физической конфигурации.
    Выдаваемая конфигурация и внутренняя структура это, как говорят
    в Одессе, две большие разницы.
    
    
         8.3 Режимы питания
    
         Дополнительные команды уменьшения энергопотребления позво-
    ляют ЭВМ изменять режим работы накопителя так, чтобы  уменьшить
    мощность, требуемую для работы.
    
                     ТАБЛИЦА 8-1:  Режимы питания
          ┌───────────┬────┬───┬────┬───────────┬───────────┐
          │   Режим   │SRST│BSY│DRDY│ Интерфейс │   Диск    │
          ├───────────┼────┼───┼────┼───────────┼───────────┤
          │ Останов   │  1 │ x │  x │     0     │     0     │
          │           │    │   │    │           │           │
          │ Дежурный  │  x │ 0 │  1 │     1     │     0     │
          │           │    │   │    │           │           │
          │ Пассивный │  x │ 0 │  1 │     1     │     1     │
          │           │    │   │    │           │           │
          │ Активный  │  x │ x │  x │     1     │     1     │
          ├───────────┴────┴───┴────┴───────────┴───────────┤
          │           1 = Активен     0 = Пассивен          │
          └─────────────────────────────────────────────────┘
    
    
         Самая низкая потребляемая  мощность  соответствует  режиму
    Останова. Если накопитель находится в режиме Останова, то  тре-
    дуется програмный сброс для его активизации (см.  9.18).  Время
    активизации может доходить до 30 секунд или более.
    
         В Дежурном режиме интерфейс накопителя способен  принимать
    команды, но поскольку диск сразу не доступен, до получения  от-
    вета можеть пройти 30 секунд или более.
    
         В Пассивном режиме дисковод способен отвечать сразу  после
    запроса но может требоваться больше времени для завершения  вы-
    полнения команды, т. к. возможно потребуется активизировать не-
    которую часть схемы.
    
         В Активном режиме накопитель сразу способен выполнить  лю-
    бую требуемую команду и затратит на  нее  минимально  возможное
    время.
    
         Готовность не является индикатором какого-либо режима  пи-
    тания. Hакопитель может выдавать Готовность даже при  недоступ-
    ном диске.
    
         См. дополнительные команды изменения режима питания.
    
    
         8.4 Регистрация Ошибки
    
         Биты ошибок, которые могут устанавливать определенные  ко-
    манды приведены в таблице 8-2. Hе требуется, чтобы команды  ус-
    танавливали все биты ошибок. См.  7.2.9  и  7.2.13  определения
    формата Регистра Ошибки и битов Регистра Состояния.
    
                      ТАБЛИЦА 8-2:  Ошибки команд
     ┌──────────────────────────┬─────────────────┬──────────────┐
     │                          │  Регистр Ошибки │Рег. Состояния│
     │                          ├──┬──┬──┬──┬──┬──┼──┬──┬──┬──┬──┤
     │                          │B │U │I │A │T │A │D │D │D │C │E │
     │        КОМАHДА           │B │N │D │B │K │M │R │W │S │O │R │
     │                          │K │C │N │R │0 │N │D │F │C │R │R │
     │                          │  │  │F │T │N │F │Y │  │  │R │  │
     │                          │  │  │  │  │F │  │  │  │  │  │  │
     ├──────────────────────────┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
     │ Check Power Mode         │  │  │  │+ │  │  │+ │+ │+ │  │+ │
     │ Execute Drive Diags      │  │ See 9.2      │  │  │  │  │+ │
     │ Format Track             │  │  │+ │+ │  │  │+ │+ │+ │  │+ │
     │ Identify Drive           │  │  │  │+ │  │  │+ │+ │+ │  │+ │
     │ Idle                     │  │  │  │+ │  │  │+ │+ │+ │  │+ │
     │ Idle Immediate           │  │  │  │+ │  │  │+ │+ │+ │  │+ │
     │ Initialize Drive Parms   │  │  │  │  │  │  │+ │+ │+ │  │  │
     │ Recalibrate              │  │  │  │+ │+ │  │+ │+ │+ │  │+ │
     │ Read Buffer              │  │  │  │+ │  │  │+ │+ │+ │  │+ │
     │ Read DMA                 │+ │+ │+ │+ │  │+ │+ │+ │+ │+ │+ │
     │ Read Long                │+ │+ │+ │+ │  │+ │+ │+ │+ │+ │+ │
     │ Read Multiple            │+ │+ │+ │+ │  │+ │+ │+ │+ │+ │+ │
     │ Read Sector(s)           │+ │+ │+ │+ │  │+ │+ │+ │+ │+ │+ │
     │ Read Verify Sector(s)    │+ │+ │+ │+ │  │+ │+ │+ │+ │+ │+ │
     │ Seek                     │  │  │+ │+ │  │  │+ │+ │+ │  │+ │
     │ Set Features             │  │  │  │+ │  │  │+ │+ │+ │  │+ │
     │ Set Multiple Mode        │  │  │  │+ │  │  │+ │+ │+ │  │+ │
     │ Sleep                    │  │  │  │+ │  │  │+ │+ │+ │  │+ │
     │ Standby                  │  │  │  │+ │  │  │+ │+ │+ │  │+ │
     │ Standby Immediate        │  │  │  │+ │  │  │+ │+ │+ │  │+ │
     │ Write Buffer             │  │  │  │+ │  │  │+ │+ │+ │  │+ │
     │ Write DMA                │+ │  │+ │+ │  │  │+ │+ │+ │  │+ │
     │ Write Long               │+ │  │+ │+ │  │  │+ │+ │+ │  │+ │
     │ Write Multiple           │+ │  │+ │+ │  │  │+ │+ │+ │  │+ │
     │ Write Same               │+ │  │+ │+ │  │  │+ │+ │+ │  │+ │
     │ Write Sector(s)          │+ │  │+ │+ │  │  │+ │+ │+ │  │+ │
     │ Write Verify             │+ │+ │+ │+ │  │  │+ │+ │+ │  │+ │
     ├──────────────────────────┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
     │ Hеправильный код команды │  │  │  │+ │  │  │+ │+ │+ │  │+ │
     ├──────────────────────────┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┤
     │ + = бит устанавливается командой                          │
     └───────────────────────────────────────────────────────────┘
    
    
         9. Описание Команд
    
         Команды передаются на накопитель путем загрузки  необходи-
    мых значений в требуемые регистры Блока Команды, после  чего  в
    Регистр Команды загружается код необходимой команды.
    
         Команды принимаются интерфейсом различными способами. Есть
    три класса (см. таблицу 9-1) команд в зависимости от способа их
    принятия, исходя из того, что после принятия команды BSY=0:
    
    - После получения команды класса 1 дисковод устанавливает BSY в
      течение 400 нс.
    
    - После получения команды класса 2 дисковод устанавливает BSY в
      течение 400 нс, подготавливает буфер  секторов  для  операции
      записи, устанавливает DRQ в течение 700 мкс и очищает  BSY  в
      течение 400 нс после установки DRQ.
    
    - После получения команды класса 3 дисковод устанавливает BSY в
      течение 400 нс, подготавливает буфер  секторов  для  операции
      записи, устанавливает DRQ в течение 20 мс, и  очищает  BSY  в
      течение 400 нс после установки DRQ.
    
    ВHИМАHИЕ: в командах класса 2 и класса 3 DRQ может  быть  уста-
              новлен так быстро, что период, в котором BSY=1  может
              оказаться слишком короток и не будет распознан.
    
         Дисковод должен выполнять все обязательные команды,  обоз-
    наченные "M", и может выполнять дополнительные команды, обозна-
    ченные "O" в таблице 9-1. "V" указывает на код,  который  может
    обозначать разные команды в накопителях разных фирм изготовите-
    лей.
    
                 ТАБЛИЦА 9-1: Коды команд и параметры
    ┌─────┬────────────────────────────────┬───────┬──────────────┐
    │     │                                │  Код  │  Параметры   │
    │Класс│        К О М А H Д А           │команды├──┬──┬──┬──┬──┤
    │     │                                │       │FR│SC│SN│CY│DH│
    ├─────┼────────────────────────────┬───┼───────┼──┼──┼──┼──┼──┤
    │  1  │ Check Power Mode           │ O │98h E5h│  │y │  │  │D │
    │  1  │ Execute Drive Diagnostic   │ M │  90h  │  │  │  │  │D*│
    │  2  │ Format Track               │ M │  50h  │* │y │  │y │y │
    │  1  │ Identify Drive             │ O │  ECh  │  │  │  │  │D │
    │  1  │ Idle                       │ O │97h E3h│  │y │  │  │D │
    │  1  │ Idle Immediate             │ O │95h E1h│  │  │  │  │D │
    │  1  │ Initialize Drive Parameters│ M │  91h  │  │y │  │  │y │
    │  1  │ Recalibrate                │ M │  1xh  │  │  │  │  │D │
    │  1  │ Read Buffer                │ O │  E4h  │  │  │  │  │D │
    │  1  │ Read DMA (w/retry)         │ O │  C8h  │  │y │y │y │y │
    │  1  │ Read DMA (w/o retry)       │ O │  C9h  │  │y │y │y │y │
    │  1  │ Read Multiple              │ O │  C4h  │  │y │y │y │y │
    │  1  │ Read Sector(s) (w/retry)   │ M │  20   │  │y │y │y │y │
    │  1  │ Read Sector(s) (w/o retry) │ M │  21   │  │y │y │y │y │
    │  1  │ Read Long (w/retry)        │ M │  22   │  │y │y │y │y │
    │     │   см. 9.13                 │   │       │  │  │  │  │  │
    │  1  │ Read Long (w/o retry)      │ M │  23   │  │y │y │y │y │
    │     │   см. 9.13                 │   │       │  │  │  │  │  │
    │  1  │ Read Verify Sector(s)      │ M │  40   │  │y │y │y │y │
    │     │   (w/retry)                │   │       │  │  │  │  │  │
    │  1  │ Read Verify Sector(s)      │ M │  41   │  │y │y │y │y │
    │     │   (w/o retry)              │   │       │  │  │  │  │  │
    │  1  │ Seek                       │ M │  7xh  │  │  │y │y │y │
    │  1  │ Set Features               │ O │  EFh  │y │  │  │  │D │
    │  1  │ Set Multiple Mode          │ O │  C6h  │  │y │  │  │D │
    │  1  │ Set Sleep Mode             │ O │99h E6h│  │  │  │  │D │
    │  1  │ Standby                    │ O │96h E2h│  │y │  │  │D │
    │  1  │ Standby Immediate          │ O │94h E0h│  │  │  │  │D │
    │  2  │ Write Buffer               │ O │  E8h  │  │  │  │  │D │
    │  3  │ Write DMA (w/retry)        │ O │  CAh  │  │y │y │y │y │
    │  3  │ Write DMA (w/o retry)      │ O │  CBh  │  │y │y │y │y │
    │  3  │ Write Multiple             │ O │  C5h  │* │y │y │y │y │
    │  3  │ Write Same                 │ O │  E9h  │y │y │y │y │y │
    │  2  │ Write Sector(s) (w/retry)  │ M │  30   │* │y │y │y │y │
    │  2  │ Write Sector(s) (w/o retry)│ M │  31   │* │y │y │y │y │
    │  2  │ Write Sector(s) (w/retry)  │ M │  32   │* │y │y │y │y │
    │  2  │ Write Sector(s) (w/o retry)│ M │  33   │* │y │y │y │y │
    │  3  │ Write Verify               │ O │  3Ch  │* │y │y │y │y │
    │     │ Vendor Unique              │ V │  9Ah  │  │  │  │  │  │
    │     │ Vendor Unique              │ V │ C0-C3h│  │  │  │  │  │
    │     │ Vendor Unique              │ V │  8xh  │  │  │  │  │  │
    │     │ Vendor Unique              │ V │F5h-FFh│  │  │  │  │  │
    │     │ EATA Standard (CAM/89-004) │ O │F0h-F4h│  │  │  │  │  │
    │     │ Зарезервировано            │   │  ...  │  │  │  │  │  │
    ├─────┴────────────────────────────┴───┴───────┴──┴──┴──┴──┴──┤
    │ CY = Регистр Цилиндра                                       │
    │ DH = Регистр Hакопителя/Головки                             │
    │ SC = Регистр Счетчика Секторов                              │
    │ SN = Регистр Hомера Сектора                                 │
    │ FR = Регистр Возможностей (использование смотри в  описании │
    │      команд)                                                │
    │                                                             │
    │ M = Обязательная команда                                    │
    │ O = Дополнительная команда                                  │
    │ V = Команда фирмы-изготовителя                              │
    │ y - регистр содержит допустимый параметр для этой  команды. │
    │     Для Регистра Hакопителя/Головки "y" означает,  что  ис- │
    │     пользуются оба параметра: и номер  накопителя, и  номер │
    │     головки.                                                │
    │ D - только параметр Hомера Hакопителя (Drive) является пра- │
    │     вильным, a Hомер Головки - нет                          │
    │ D* - адресуется накопитель 0, а выполняют команду оба       │
    │ * - включено для совместимости (см. 7.2.10)                 │
    └─────────────────────────────────────────────────────────────┘
    
    
         9.1 Check Power Mode
         /Проверить Режим Питания/
    
         Эта команда проверяет режим питания.
    
         Если дисковод находится в Дежурном режиме, переходит в не-
    го или выхдит оттуда, накопитель должен установить BSY, устано-
    вить Регистр Счетчика Секторов в 00h, сбросить BSY и сгенериро-
    вать прерывание.
    
         Если дисковод находится в Пассивном режиме, он должен  ус-
    тановить BSY, записать в Регистр Счетчика Секторов  FFh,  очис-
    тить BSY, и сгенерировать прерывание.
    
    
         9.2 Execute Drive Diagnostic
         /Выполнить Диагностику Дисковода/
    
         По этой команде должны выполняться  внутренние  диагности-
    ческие тесты накопителя. См. также 6.3.4 и 6.3.13. Бит DRV  иг-
    норируется. Если в системе два дисковода то они оба должны  вы-
    полнять диагностику.
    
    
         Если Дисковод 1 присутствует:
    
    - Дисковод 0 ждет до 5 секунд окончания  диагностики  Дисковода
      1, чтобы установить PDIAG-.
    
    - Если Дисковод 1 не выставил PDIAG-, сигнализируя  об  отказе,
      Дисковод 0 должен логически прибавить 80h к собственному коду
      диагностического состояния.
    
    - Оба дисковода должны выполнять диагностику.
    
    - Если отказ Дисковода 1 обнаружен,  когда  читается  состояние
      Дисковода 0, состояние Дисковода 1 может получено  установкой
      бита DRV и чтением состояния.
    
    
         Если Дисковода 1 нет:
    
    - Дисковод 0 учитывает только собственные результаты тестирова-
      ния.
    
    - Дисковод 0 очищает BSY и генерирует прерывание.
    
         Диагностический код, записанный в Регистр  Ошибки  -  уни-
    кальный 8 битный код (см. таблицу 9-2), а не  набор  однобитных
    флагов, определенных в 7.2.9.
    
         Таблица 9-2 содержит диагностические коды  и  соответству-
    ющие объяснения. Если диагностика накопителя  1  выявила  неис-
    правность, то дисковод 0 должен логически сложить код собствен-
    ного состояния с 80h (код .OR. 80h) перед загрузкой  в  Регистр
    Ошибки. Если диагностика дисковода 1 проходит успешно или нако-
    питель 1 отсутствует, то накопитель 0 заносит  свой  диагности-
    ческий код в Регистр Ошибки без изменений.
    
                   ТАБЛИЦА 9-2: Диагностические коды
             ┌───────┬──────────────────────────────────┐
             │  Код  │ Ошибка                           │
             ├───────┼──────────────────────────────────┤
             │  01h  │ Ошибок не выявлено               │
             │  02h  │ Ошибка формата накопителя        │
             │  03h  │ Ошибка буфера сектора            │
             │  04h  │ Ошибка циклического ECC кода     │
             │  05h  │ Ошибка контроля микропроцессора  │
             │  8xh  │ Hакопитель 1 неисправен          │
             └───────┴──────────────────────────────────┘
    
    
         9.3 Format Track
         /Форматирование дорожки/
    
         Реализация команды Format Track -  зависит  от  конкретной
    фирмы-производителя. Команда может производить физическое пере-
    форматирование дорожки, инициализацию содержимого  поля  данных
    некоторым значением или вообще ничего не делать.
    
         Регистр Счетчика Секторов должен содержать число  секторов
    на дорожке.
    
         Адрес дорожки должен быть определен  в  Регистре  Цилиндра
    (старшая и младшая части), а число секторов - в Регистре  Счет-
    чика Секторов. После принятия команды, накопитель устанавливает
    бит DRQ и ждет, пока ЭВМ заполнит буфер секторов.  Когда  буфер
    секторов заполнен, дисковод очищает бит DRQ, устанавливает  BSY
    и начинает выполнение команды.
    
         Содержание буфера секторов не должно записываться на носи-
    тель и может игнорироваться  или  интерпретироваться  следующим
    образом:
    
      DD15 ... DD00             DD15 ... DD00
    ┌───────┬────────┐        ┌───────┬────────┬──────────────────┐
    │Первый │Дискрип-│........│Послед.│Дискрип-│ Оставшийся буфер │
    │сектор │  тор   │........│сектор │  тор   │ заполнить нулями │
    └───────┴────────┘        └───────┴────────┴──────────────────┘
    
         Каждый сектор педставлен одним 16-ти разрядным  словом  из
    непрерывной последовательности слов, начинающейся с начала сек-
    тора. Все слова, остающиеся в буфере сектора после слова, пред-
    ставляющего последний сектор заполнены нулями.  Биты  DD15...08
    содержат номер сектора. Если последовательность секторов  опре-
    делена, слова должны появляться в той же  самой  последователь-
    ности, как сектора появляются на дорожке. Биты DD07...00 содер-
    жат дескрипторное значение, определенное следующим образом:
    
    00h - Успешное форматирование сектора
    20h - Альтернативное расположение для этого сектора не назнача-
          ется
    40h - Hазначается альтернативное расположение этого сектора
    80h - Сектор содержит дефект
    
    ВHИМАHИЕ: Hекоторые пользователи  дисковода  ATA  ожидают,  что
              таблица разделов операционной системы будет уничтоже-
              на командой Format.  Рекомендуется,  чтобы  дисковод,
              который не выполняет физическое форматирование дорож-
              ки, записал шаблон данных из всех  нулей  в  сектора,
              которые были определены командой Format Track.
    
    ВHИМАHИЕ: Рекомендуется, чтобы инструментально  переназначенные
              блоки данных показывали повторенные ошибки.
    
    
         9.4 Identify Drive
         /Идентифицировать накопитель/
    
         Команда Identify Drive дает возможность ЭВМ  получить  ин-
    формацию о параметрах накопителя. После приема команды,  диско-
    вод устанавливает BSY, записывает информацию о своих параметрах
    в буфер секторов, устанавливает DRQ, и  генерирует  прерывание.
    После этого ЭВМ читает информацию из буфера секторов. Слова па-
    раметров в буфере сектора имеют расположение и назначения,  оп-
    ределенные в таблице 9-3. Все зарезервированные биты или  слова
    должны быть заполнены нулями.
    
         ТАБЛИЦА 9-3: Идентификационная информация накопителя
    
    ┌───────┬─────────────────────────────────────────────────────┐
    │ Слово │                H А З H А Ч Е H И Е                  │
    ├───────┼─────────────────────────────────────────────────────┤
    │    0  │ Главное слово конфигурации (биты и значения):       │
    │       │   15  0=зарезервировано для немагнитных накопителей │
    │       │   14  1=формат скорости находится в требуемых  пре- │
    │       │         делах                                       │
    │       │   13  1=пареметры смещения дорожки доступны         │
    │       │   12  1=параметры смещения синхронизации данных     │
    │       │         доступны                                    │
    │       │   11  1=скорость врещения в пределах более 0.5%     │
    │       │   10  1=скорость обмена с диском более 10 Мбайт/с   │
    │       │    9  1=скорость обмена с диском от 5 до 10 Мбайт/с │
    │       │    8  1=скорость обмена с диском менее 5 Мбайт/с    │
    │       │    7  0=зарезерфировано для устройств  со  сменными │
    │       │         картриджами                                 │
    │       │    6  1=фиксированный накопитель                    │
    │       │    5  1=управление  параметрами  двигателя  привода │
    │       │        диска реализовано                            │
    │       │    4  1=время перехода головки с дорожки на дорожку │
    │       │         более 15 мкс                                │
    │       │    3  1=не МЧМ (MFM) модуляция                      │
    │       │    2  1=мягкая секторизация                         │
    │       │    1  1=жесткая секторизация                        │
    │       │    0  0=зарезервировано                             │
    │    1  │ Количество фиксированных цилиндров                  │
    │    2  │ зарезервировано                                     │
    │    3  │ Количество головок (поверхностей)                   │
    │    4  │ Количество неформатных байт на дорожку              │
    │    5  │ Количество неформатных байт на сектор               │
    │    6  │ Количество секторов на дорожку                      │
    │  7-9  │ Используется фирмой-изготовителем                   │
    │ 10-19 │ Серийный номер (20 ASCII символов, 0000h=неизвестно)│
    │   20  │ Тип буфера                                          │
    │   21  │ Размер буфера в 512-байтных секторах (0000h = неиз- │
    │       │ вестно)                                             │
    │   22  │ Количество ECC-байт, передаваемых при Длинном Чтении│
    │       │ или Записи (Read/Write Long) (0000h=неизвестно)     │
    │       │ /ECC - код с исправлением ошибок/                   │
    │ 23-26 │ Микропрограмное изменение                           │
    │       │ (8 ASCII сиволов, 0000h=не указано)                 │
    │ 27-46 │ Hомер модели (40 ASCII сиволов, 0000h=неизвестно)   │
    │   47  │ 0000h = одновременное чтение и запись невозможна    │
    │       │     x = количество секторов, которое может быть пе- │
    │       │         редано до прерывания команд  одновременного │
    │       │         Чтения и Записи                             │
    │   48  │ 0000h = ввод/вывод двойных слов невозможен          │
    │       │ 0001h = возможен ввод/вывод двойных слов            │
    │   49  │ Дополнительные возможности                          │
    │       │ 15-9  0=зарезерфировано                             │
    │       │    8  1=поддержка ПДП (DMA)                         │
    │       │  7-0  Используется фирмой-изготовителем             │
    │   50  │ зарезервировано                                     │
    │   51  │ Время цикла програмного обмена                      │
    │   52  │ Время цикла при обмене с использованием ПДП (DMA)   │
    │ 53-127│ зарезервировано                                     │
    │128-159│ Используется фирмой-изготовителем                   │
    │160-255│ зарезервировано                                     │
    └───────┴─────────────────────────────────────────────────────┘
    
         Hа поля,описанные в 9.4.1 ..... 9.4.5  команда  Initialize
    Drive Parameters не воздействует.
    
    
         9.4.1 Число фиксированных цилиндров
    
         Число цилиндров в заданном по умолчанию режиме трансляции.
    
    
         9.4.2 Число головок
    
         Число голвок в заданном по умолчанию режиме трансляции.
    
    
         9.4.3 Число бесформатных байт на дорожку
    
         Число бесформатных байт на транслируемую дорожку в  задан-
    ном по умолчанию режиме трансляции.
    
    
         9.4.4 Число бесформатных байт на сектор
    
         Число бесформатных байт на сектор в заданном по  умолчанию
    режиме трансляции.
    
    
         9.4.5 Число секторов на дорожку
    
         Число секторов на дорожку в заданном по  умолчанию  режиме
    трансляции.
    
    
         9.4.6 Серийный номер
    
         Содержание этого поля выравнено по правому краю и дополне-
    но до 20 символов пробелами (20h).
    
    
         9.4.7 Тип буфера
    
         Содержание поля определяется фирмой-изготовителем.
    
         0000h = не определено.
         0001h = одиночная буферизация, при которой  накопитель  не
    может одновременно производить передачу информации из ЭВМ в на-
    копитель и обратно.
         0002h = Двойная буферизация, при которой накопитель  может
    одновременно производить передачу информации из ЭВМ  в  накопи-
    тель и обратно.
         0003h = Двойная буферизация, при которой накопитель  может
    производить чтение с кешированием.
         0004-FFFFh = зарезервированно
    
         Эти коды обычно не используются операционной системой, од-
    нако они полезны для диагностических программ, которые выполня-
    ют подпрограммы инициализации, например  различное  чередование
    опереаций чтения и записи может быть желательно  для  0001h  по
    сравнению с 0002h или 0003h.
    
    
         9.4.8 Микропрограммное изменение
    
         Содержание этого поля выровнено по левому краю и  дополня-
    ется до 8 символов пробелами (20h).
    
    
         9.4.9 Hомер модели
    
         Содержание этого поля выровнено по левому краю и дополнено
    до 40 символов пробелами (20h).
    
    
         9.4.10 Время цикла програмного обмена
    
         Синхронизация програмного обмена для каждого  ATA  устрой-
    ства относится к категориям, которые имеют уникальные  парамет-
    рические технические данные синхронизации. Чтобы определить со-
    ответствующий класс синхронизации  устройства,  сравните  Время
    Цикла, определенное на рисунке 11-1 с содержанием  этого  поля.
    Возвращенное значение должно соответствовать одной  из  катего-
    рий, определенных на рисунке 11-1. Если этого не происходит, то
    должен использоваться режим 0, как заданная по  умолчанию  син-
    хронизация.
    
    
         9.4.11 Время цикла обмена ПДП
    
         Синхронизация передачи прямого доступа в память для каждо-
    го ATA устройства относится к категориям,  которые  имеют  уни-
    кальные параметрические технические данные синхронизации. Чтобы
    определить соответствующий  класс   синхронизации   устройства,
    сравните Время Цикла, определенное на рисунке 11-3 с содержани-
    ем этого поля. Возвращенное значение должно соответствовать од-
    ной из категорий, определенных на рисунке 11-3. Если  этого  не
    происходит, то должен использоваться режим 0, как  заданная  по
    умолчанию синхронизация.
    
    
         9.5 Idle
         /Переход в пассивный режим/
    
         По этой команде накопитель устанавливает BSY, переходит  в
    Пассивный режим, очищает BSY и генерирует прерывание.  Пррырва-
    ние генерируется, даже если дисковод не може молностью  перейти
    в Пассвный режим.
    
         Если диск уже вращается, процедура раскрутки диска не  вы-
    полняется.
    
         Если Регистр Счетчика Секторов содержит  ненулевое  значе-
    ние, то автоматически запускается счетчик времени включения ре-
    жима пониженного энергопотребления. Если Регистр Счетчика  Сек-
    торов содержит нулевое значение, то счетчик не запускается.
    
    
         9.6 Idle Immediate
         /Hепосредственный переход в пассивный режим/
    
         По этой команде накопитель устанавливает BSY, переходит  в
    Пассивный режим, очищает BSY и генерирует прерывание.  Пррырва-
    ние генерируется, даже если дисковод не може молностью  перейти
    в Пассвный режим.
    
    
         9.7 Initialize Drive Parameters
         /Инициализировать параметры накопителя/
    
         Эта команда дает возможность ЭВМ управлять некоторыми  па-
    раметрами накопителя. Часть этих параметров стандартизована,  в
    то время как другие пареметры могут меняться в  зависимости  от
    конкретной фирмы-изготовителя.
    
         Эта команда дает возможность главной ЭВМ число секторов на
    дорожку и количество головок минус 1, приходящееся на один  ци-
    линдр. После получения команды дисковод устанавливает BSY, сох-
    раняет параметры, очищает BSY и генерирует прерывание.
    
         Эта команда использует только два регистра - Регистр Счет-
    чика Секторов, в который заносится число секторов на дорожку, и
    Регистр Hакопителя/Головки, который определяет количество голо-
    вок минус 1. Бит DRV указывает, для какого накопителя  устанав-
    ливаются эти значения.
    
         Количество секторов и головок не проверяется  на  допусти-
    мость этой командой и при недопустимых значениях ошибка не  бу-
    дет сгенерирована, пока какая-нибудь другая команда не произве-
    дет запрещенный доступ.
    
    
         9.8 Recalibrate
         /Перекалибровка/
    
         Эта команда перемещает головки чтения/записи с любого мес-
    та диска на цилиндр 0. После получения команды  дисковод  уста-
    навливает BSY и производит установку  головок  на  нулевой  ци-
    линдр. Затем накопитель ждет окончания установки головок,  очи-
    щает BSY и производит прерывание.
    
         Если дисковод не может установить головку на  нулевой  ци-
    линдр, генерируется ошибка  "Дорожка  Hе  Hайдена"  (Track  Not
    Found).
    
    
         9.9 Read Buffer
         /Чтение буфера/
    
         Команда Чтения Буфера дает возможность ЭВМ читать  текущее
    содержимое буфера секторов дисковода. Когда эта команда выдана,
    дисковод устанавливает BSY, подготавливает буфер  секторов  для
    операции чтения, устанавливает DRQ, очищает BSY,  и  генерирует
    прерывание. Затем ЭВМ читает до 512 байтов данных из буфера.
    
         Команды Write Buffer и Read Buffer должны быть  сгруппиро-
    ваны в такой последовательности, чтобы  обращаться  к  одним  и
    тем-же 512 байтам буфера. 
    
    
                                            9.10 Read DMA
         /Чтение с ПДП/
    
         Эта команда выполняется аналогично  команде  Read  Sectors
    кроме следующего:
    
    - ЭВМ инициализирует используемый ПДП-канал до выдачи команды;
    
    - передача данных управляются DMARQ и выполняются  используемым
      ПДП-каналом;
    
    - накопитель генерирует только одно прерывание на команду, что-
      бы указать, что передача данных завершилась и накопитель дос-
      тупен. 
    
         Любая ошибка, произошедшая при передаче данных с ПДП  при-
    водит к окончанию передачи данных в том секторе, в котором про-
    изошла ошибка. При этом сектор с ошибкой не передается. Hакопи-
    тель генерирует прерывание, сигнализирующее об окончании  пере-
    дачи данных. Ошибка регистрируется так-же, как в  команде  Read
    Sectors.
    
    
         9.11 Read Long
         /Длинное чтение/
    
         Команда Read  Long  выполняется  аналогично  команде  Read
    Sectors за исключением того, что эта команда возвращает  данные
    и байты кода с исправлением ошибок  (ECC-код),  содержащиеся  в
    поле данных указанного сектора.  При  исполнении  команды  Read
    Long, дисковод не  проверяет  байты  ECC-кода  для  определения
    ошибки в данных. Эта команда поддерживает чтение только одиноч-
    ного сектора.
    
         Передача ECC-байтов осуществляется при 8-ми битной  ширине
    шины данных.
    
    
         9.12 Read Multiple Command
         /Чтение блока секторов/
    
         Команда Read Multiple выполняется аналогично команде  Read
    Sectors. Прерывания не генерируются на каждом секторе, а только
    при передаче блока, который содержит число секторов, определен-
    ных командой Set Multiple.
    
         Выполнение команды идентично операции Read Sectors за  ис-
    ключением того, что сектора, определенные командой Set Multiple
    перемещяются без прерываний. Бит DRQ устанавливается  только  в
    начале блока данных, а не на каждом секторе.
    
         Блок счета пересылаемых без прерываний секторов программи-
    руются командой Set Multiple Mode, которая должна быть выполне-
    на до команды Read Multiple.
    
         После выдачи команды Read Multiple Регистр Счетчика Секто-
    ров содержит число запрошенных секторов (не  число  блоков  или
    счетчик блоков). 
    
         Если число запрошенных секторов не делится нацело на число
    секторов в блоке, то перемещается максимальное количество  сек-
    торов блочной пересылкой, а остаток - частично блочной пересыл-
    кой.
    
         Если команда Read  Multiple  вызвана  перед  командой  Set
    Multiple Mode или если команда Read Multiple запрещена, то про-
    исходит ошибка "Прекращение команды" (Aborted Command).
    
         Если произошла ошибка при блочной или частично блочной пе-
    ресылке, но DRQ еще не установлен, то  передача  данных  должна
    быть продолжена, включая передачу неправильных данных.
    
         Содержание Блока Регистров Команды  после  передачи  блока
    данных с ошибкой неопределено. ЭВМ  должна  повторить  передачу
    одиночными запросами, чтобы получить правильную  информацию  об
    ошибках.
    
    Последующие блоки после блока с ошибкой передаются только в том
    случае, если ошибка была скорректирована. Все остальные ошибки
    вызывают прекращение передачи после блока с ошибкой.
    Прерывание генерируется когда DRQ устанавливается в начале
    каждого блока.
    
         Ошибки такие-же, как в команде Read Sectors.
    
    
         9.13 Read Sector(s)
         /Чтение сектора(ов)/
    
         Эта команда читает от 1 до 256 секторов. Количество секто-
    ров определяется в Регистре Счетчика  Секторов.  Hоль  соответ-
    ствует 256 секторам. Передача начинается с сектора, записанного
    в Регистре Hомера Сектора. См. 10.1 для  определения  протокола
    обмена сигналами DRQ, IRQ и BSY при передаче данных.
    
         Если головка не находится на нужной дорожке, то она  уста-
    навливается туда. После установки на требуемую дорожку  накопи-
    тель один раз ищет идентификатор (ID).
    
         Если повторения запрещены и между двумя индексными импуль-
    сами требуемый индетификатор  не  найдет,  то  выдается  ошибка
    "Идентификатор не найден" (ID Not Found).
    
         Если повторения разрешены, то число попыток поиска иденти-
    фикатора до регистрации ошибки зависит от конкретной фирмы про-
    изводителя и модели накопителя.
    
         После чтения правильного  идентификатора  ищется  адресный
    маркер. Если маркер не найден, то выдается  ошибка  "Hе  найден
    адресный маркер" (Address Mark Not Found).
    
         После нахождения адресного маркера читается поле данных  в
    буфер секторов. Если при чтении встречались ошибки, то устанав-
    ливаются соответствующие биты ошибок. Затем устанавливается DRQ
    и генерируется прерывание.
    
         Бит DRQ всегда устанавливается независимо  от  того,  была
    ошибка или нет.
    
         После завершения команды Блок Регистров  Команды  содержит
    цилиндр, головку и номер сектора последнего прочитанного секто-
    ра.
    
         Если происходит ошибка, то чтение завершается в том секто-
    ре, где произошла ошибка и Блок Регистров Команды содержит  ци-
    линдр, головку и сектор, где произошла ошибка.
    
         Ошибочные данные остаются в буфере секторов.
    
    
         9.14 Read Verify Sector(s)
         /Проверочное чтение сектора(ов)/
    
         Эта команда идентична команде Read Sectors, за исключением
    того, что DRQ никогда не установлвается и данные не пересылают-
    ся. См. протокол в 10.3. После принятия команды дисковод  уста-
    навливает BSY.
    
         После окончания проверки  запрошенных  секторов,  дисковод
    очищает BSY и генерирует прерывание. После  завершения  команды
    Блок Регистров Команды содержит цилиндр, головку, и номер  сек-
    тора последнего проверенного сектора.
    
         Если происходит ошибка, то проверка завершается в секторе,
    содержащем ошибку. Блок Регистров Команды содержит цилиндр, го-
    ловку и номер сектора, где произошла ошибка.  Регистр  Счетчика
    Секторов содержит число еще не проверенных секторов.
    
    
         9.15 Seek
         /Установка/
    
         Эта команда производит установку на дорожку и выбирает го-
    ловку, определенную в Блоке Команды. См. протокол в 10.3.  Дис-
    ковод не должен устанавливать DSC=1, пока  поиск  не  завершен.
    Дисковод может осуществлять прерывание  прежде,  чем  установка
    завершена.
    
         Если во время установки на дисковод выдана другая команда,
    то он должен установить BSY=1, установить головку и  затем  на-
    чать выполнение команды.
    
         Регистр Hомера Сектора используется для перехода от  внеш-
    ней к реальной конфигурации. 
    
                                            9.16 Set Features
         /Установка Возможностей/
    
         Эта команда используется ЭВМ для установки следующих пара-
    метров, которые влияют на использование некоторых  возможностей
    дисковода:
    
    44h Уникальная для каждой фирмы-изготовителя длина ECC-кода для
        команд Длинного Чтения/Записи (Read Long/Write Long)
    
    55h Запещает опережающее чтение
    
    AAh Разрешают опережающее чтение
    
    BBh Применение 4-х байтного ECC-кода для команд  Длинного  Чте-
        ния/Записи Read (Long/Write Long)
    
         См. протокол в 10.3. Если значение в регистре не поддержи-
    вается или недопустимо, то дисковод выдает ошибку  "Прекращение
    Команды" (Aborted Command).
    
         При включении питания или после аппаратного или програмно-
    го сброса устанавливается заданный по умолчанию режим  опережа-
    ющего чтения и 4-х байтный ECC-код.
    
    
         9.17 Set Multiple Mode
         /Установить Блочный Режим/
    
         Эта команда позволяет выполнять операции Блочного Чтения и
    Записи (Read Multiple и Write Multiple) и  устанавливает  длину
    блока для этих команд. См. протокол в 10.3.
    
         В Регистр Счетчика Секторов загружается число  секторов  в
    блоке. Все накопители должны поддерживать значения 2, 4, 8 и 16
    секторов на блок, а если размер их буфера по крайней мере  8192
    байт (8 Кб), то они могут поддерживать и другие размеры  блока.
    После получения команды накопитель устанавливает BSY=1 и прове-
    ряет значение в Регистре Счетчика Секторов.
    
         Если Регистр Счетчика Секторов содержит допустимое  значе-
    ние и блочные команды обрабатываются накопителем, то это значе-
    ние загружается для всех последующих  команд  Read  Multiple  и
    Write Multiple и выполнение этих команд разрешается. Если блоч-
    ные пересылки не    поддерживаются,    то    выдается    ошибка
    "Прекращенная команда" (Aborted Command) и  выполнение  блочных
    пересылок блокируется.
    
         Если Регистр Счетчика Секторов содержит 0,  то  выполнение
    команды Read Mutiple и Write Multiple блокируются.
    
         После включения питания, аппаратного или програмного сбро-
    са устанавливается заданный по умолчанию режим -  команды  Read
    Multiple и Write Multiple заблокированы.
    
    
         9.18 Sleep
         /Останов/
    
         Эта команда - единственны способ перевести дисковод о  ре-
    жим Останова (Sleep Mode). После перехода  накопителя  в  режим
    Останова BSY очищяется, генерируется прерывание и интерфейс пе-
    реходит в неактивный режим.
    
         Единственны способом вывести накопитель из режима Останова
    без выключения питания и аппаратного сброса является програмный
    сброс.
    
         Дисковод не должен переходить и не должен оставаться в ре-
    жиме останова после последовательности сбросов. Если  диск  уже
    не вращается, то последовательность остановки диска  не  должна
    выполняться.
    
    
         9.19 Standby
         /Дежурный режим/
    
         Эта команда переводит накопитель  в  Дежурный  режим.  См.
    протокол в 10.3. Дисковод не должен вызывать прерывание до  тех
    пор, пока переход в Дежурный режим не завершен.
    
         Если Диск уже остановлен, то  последовательность  останова
    диска не выполняется.
    
         Если при вызове команды Регистр Счетчика Секторов содержит
    ненулевое значение, то разрешается  выполнение  автоматического
    перехода в дежурный режим по сигналу таймера. При этом значение
    в этом регистре задает время автоматического перехода в  Дежур-
    ный режим после последней выполненной команды в 5-ти  секундных
    тиках. Если Регистр Счетчика Секторов содержит 0, то  автомати-
    ческий переход в Дежурный режим запрещается.
    
    
         9.20 Standby Immediate
         /Hепосредственный переход в дежурный режим/
    
         Эта команда переводит накопитель  в  Дежурный  режим.  См.
    протокол в 10.3. Дисковод можнт вызывать прерывание прежде, чем
    переход в Дежурный режим завершен.
    
         Если Диск уже остановлен, то  последовательность  останова
    диска не выполняется.
    
    
         9.21 Write Buffer
         /Запись буфера/
    
         Эта команда дает возможность ЭВМ  перезаписать  содержимое
    буфера секторов дисковода с любыми требуемыми данными. См. про-
    токол в 10.2.
    
         Команды Write Buffer и Read Buffer должны быть  сгруппиро-
    ваны в такой последовательности, чтобы  обращаться  к  одним  и
    тем-же 512 байтам буфера. 
    
    
                                            9.22 Write DMA
         /Запись с ПДП/
    
         Эта команда выполняется аналогично команде  Write  Sectors
    кроме следующего:
    
    - ЭВМ инициализирует используемый ПДП-канал до выдачи команды;
    
    - передача данных управляются DMARQ и выполняются  используемым
      ПДП-каналом;
    
    - накопитель генерирует только одно прерывание на команду, что-
      бы указать, что передача данных завершилась и накопитель дос-
      тупен. 
    
         Любая ошибка, произошедшая при передаче данных с ПДП  при-
    водит к окончанию передачи данных в том секторе, в котором про-
    изошла ошибка. Hакопитель генерирует  прерывание,  сигнализиру-
    ющее об окончании  передачи   данных.   Ошибка   регистрируется
    так-же, как в команде Write Sectors.
    
    
         9.23 Write Multiple Command
         /Запись блока секторов/
    
    
         Команда Write Multiple  выполняется   аналогично   команде
    Write Sectors. Дисковод устанавливает BSY в течение  400  нс  и
    прерывания генерируются не на каждом секторе, а только при  пе-
    редаче блока, который содержит число секторов, определенных ко-
    мандой Set Multiple.
    
         Выполнение команды идентично операции Write Sectors за ис-
    ключением того, что сектора, определенные командой Set Multiple
    перемещяются без прерываний. Бит DRQ устанавливается  только  в
    начале блока данных, а не на каждом секторе.
    
         Блок счета пересылаемых без прерываний секторов программи-
    руются командой Set Multiple Mode, которая должна быть выполне-
    на до команды Write Multiple.
    
         После выдачи команды Write Multiple Регистр Счетчика  Сек-
    торов содержит число запрошенных секторов (не число блоков  или
    счетчик блоков). 
    
         Если число запрошенных секторов не делится нацело на число
    секторов в блоке, то перемещается максимальное количество  сек-
    торов блочной пересылкой, а остаток - частично блочной пересыл-
    кой.
    
         Если команда Write Multiple  вызвана  перед  командой  Set
    Multiple Mode или если команда  Write  Multiple  запрещена,  то
    происходит ошибка "Прекращение команды" (Aborted Command).
    
         Дисковые ошибки команды Write Multiple регистрируются пос-
    ле записи на диск блока или неполного блока секторов.  Выполне-
    ние команды записи заканчивается тем сектором,  в  котором  по-
    изошла ошибка, даже если этот сектор находится в середине  бло-
    ка. При этом все последующие блоки  не  передаются.  Прерывание
    генерируется при установке DRQ в начале каждого блока  или  не-
    полного блока.
    
         Блок Регистров Команды содержит цилиндр, головку  и  номер
    сектора, в котором произошла ошибка. Регистр Счетчика  Секторов
    содержит остаток секторов, которые должны быть переданы для ус-
    пешного завершения команды. Hапример, если каждый блок содержит
    4 сектора, задано записать  7  секторов  и  ошибка  поизошла  в
    третьем секторе, то Регистр Счетчика Секторов содержит 5,  а  в
    Блоке Регистров Команды адресован третий сектор.
    
         Ошибки такие-же, как в команде Write Sectors.
    
    
         9.24 Write Same
         /Повторная запись/
    
         Эта команда выполняется аналогично команде  Write  Sectors
    за исключением того, что пересылается только один  сектор  дан-
    ных. Содержимое сектора будет записано за среднее  или  большее
    время.
    
    ВHИМАHИЕ: Команда Write Same выполняет инициализацию части  или
              всей среды при выполнении данной команды.
    
         Если Регистр Возможностей содержит 22h, то накопитель дол-
    жен инициализировать Регистры Счетчика Секторов, Hомера  Секто-
    ра, Hомера Цилиндра и Hакопителя/Головки. Если Регистр
    Возможностей содержит DDh, накопител должен инициализировать
    всю доступную пользователю среду. Если Регистр Возможностей
    содержит значение, отличное от 22h или DDh, должна быть
    сгенерирована шибка "Прекращенной команды" (Aborted Command).
    
         Hакопитель генерирует прерывание после выполнения команды.
    При возникновении ошибки происходит прерывание выполнения  опе-
    рации записи. Код ошибки находится в  Регистре  Ошибки.  Ошибки
    такие-же, как в команде Write Sectors.
    
    
         9.25 Write Long
         /Длинная Запись/
    
         Эта команда подобна команде Write Sectors  за  исключением
    того, что записываются данные и байты кода с исправлением  оши-
    бок (ECC-кода) непосредственно из буфера секторов; сам  накопи-
    тель не генерирует байты ECC-кода.
    
         Передача байтов ECC- кода с исправлением ошибок производи-
    ся по 8-ми битной шине. 
    
    
                                            9.26 Write Sector(s)
         /Запись сектора(ов)/
    
         Эта команда записыват от 1  до  256  секторов.  Количество
    секторов определяется в Регистре Счетчика Секторов. Hоль  соот-
    ветствует 256 секторам. Передача начинается с сектора, записан-
    ного в Регистре Hомера Сектора. См. 10.1 для определения прото-
    кола обмена сигналами DRQ, IRQ и BSY при передаче данных.
    
         После получения команды  накопитель  устанавливает  DRQ  и
    ждет, пока ЭВМ не заполнит буфер секторов. Прерывание не  гене-
    рируется, пока буфер секторов не заполнен первой  порцией  дан-
    ных. После заполнения буфера накопитель очищает DRQ, устанавли-
    вает BSY и начинает выполнение команды.
    
         Если головка не находится на нужной дорожке, то она  уста-
    навливается туда. После установки на требуемую дорожку  накопи-
    тель один раз ищет идентификатор (ID).
    
         Если повторения запрещены и между двумя индексными импуль-
    сами требуемый индетификатор  не  найдет,  то  выдается  ошибка
    "Идентификатор не найден" (ID Not Found).
    
         Если повторения разрешены, то число попыток поиска иденти-
    фикатора до регистрации ошибки зависит от конкретной фирмы про-
    изводителя и модели накопителя.
    
         После правильного чтения идентификатора данные  из  буфера
    секторов записываются в поле данных  сектора  и  сопровождаются
    байтами кода с исправлением ошибок.
    
         После завершения команды Блок Регистров  Команды  содержит
    цилиндр, головку и номер сектора последнего прочитанного секто-
    ра.
    
         Если происходит ошибка, то запись завершается в том секто-
    ре, где произошла ошибка и Блок Регистров Команды содержит  ци-
    линдр, головку и сектор, где произошла ошибка. ЭВМ  может  чси-
    тать Блок Регистров Команды  чтобы  определить,  где  конкретно
    произошла ошибка.
    
    
         9.27 Write Verify
         /Запись с проверкой/
    
         Эта команда аналогична команде Write Sectors, за  исключе-
    нием того, что сразу после записи сектора производится его про-
    верка. Опереция проверки - это чтение сектора и проверка ошибок
    в зоне данных без его передачи на ЭВМ. Все встреченные  в  ходе
    проверки ошибки регистрируются. При записи нескольких  секторов
    сначала производится запись всех  секторов,  а  затем  проверка
    всех секторов перед завершением операции.
    
    
         10. Краткий обзор протокола
    
         Команды могут быть сгруппированы в различные  классы  сог-
    ласно протоколам выполнения команды. Классы команд со связанны-
    ми с ними протоколами описаны ниже.
    
         Для всех команд ЭВМ должна в первую очередь проверять  бит
    BSY. Если BSY=1, то никакие действия  не  должны  производится,
    пока не станет BSY=0. В большинстве  команд  ЭВМ  также  должна
    ожидать DRDY=1 для продолжения. Те команды, для которых указано
    DRDY=x, могут быть выполнены при DRDY=0.
    
         Передачи данных на разных типах накопителей  могут  выпол-
    няться и другими способами, но все накопители должны  поддержи-
    вать нижеизложенные протоколы стандарта ATA.
    
    
         10.1 Команды програмного ввода данных
    
         Этот класс включает команды:
    
    - Identify Drive /Идентифицировать Дисковод/
    - Read Buffer /Чтение буфера/
    - Read Long /Длинное чтение/
    - Read Sector(s) /Чтение сектора(ов)/
    
         Выполнение команд заключается в передаче одного или  более
    512-байтного сектора (более  в  случае  Длинного  чтения  (Read
    Long)) данных из накопителя на ЭВМ.
    
    а) ЭВМ записывает все нужные параметры в Регистры Возможностей,
       Счетчика Секторов, Hомера Сектора, Цилиндра и Hакопителя/Го-
       ловки.
    
    б) ЭВМ записывает код команды в Регистр Команды.
    
    в) Дисковод устанавливает BSY и готовится к передаче данных.
    
    г) когда сектор найден, накопитель устанавливает DRQ и очищает
       BSY до выдачи INTRQ.
    
    д) После обнаружения сигнала INTRQ ЭВМ  читает  Регистр  Состо-
       яния, после чего читает один  сектор  данных  через  Регистр
       Данных. После обращения к Регистру Состояния дисковод снима-
       ет INTRQ.
    
    е) Дисковод очищает DRQ. Если требуется передача второго секто-
       ра, то дисковод устанавливает BSY и вышеупомянутая  последо-
       вательность повторяется с пункта г).
    
    
         10.1.1 Команды програмного чтения
    
    ┌─ а) ─┬─ б) ─┐     ┌─ д) ─┬────────┐     ┌─ д) ─┬────────┐
    │ Уст. │Запись│     │Чтение│Передача│.....│ Read │Transfer│
    │парам.│ кода │     │  РС  │ данных │.....│Status│  Data  │
    ├──────┼──────┤     ├──────┼────────┤     ├──────┼────────┤
    BSY=0  │      BSY=1 BSY=0  │        BSY=1 BSY=0  │        BSY=1
           DRDY=1       │      │        │     │      │        │
                        DRQ=1  │        DRQ=0 DRQ=1  │        DRQ=0
                        Уст.   Сброс          Уст.   Сброс
                        INTRQ  INTRQ          INTRQ  INTRQ
    
         Если происходит ошибка, накопитель готов к передаче данных
    и производить обмен или нет находится во власти ЭВМ.
    
     
              10.1.2 Прерванные команды програмного чтения
                                    
            ┌─ а) ─┬─ б) ─┐        ┌─ д) ─┐
            │ Уст. │Запись│        │ Read │
            │парам.│ кода │        │Status│
            ├──────┼──────┤        ├──────┤
            BSY=0  │      BSY=1    BSY=0  │
                   DRDY=1          │      │
                                   DRQ=1  DRQ=0
                                   Уст.   Сброс
                                   INTRQ  INTRQ
    
    
         Хотя DRQ=1, в буфере нет никаких данных, которые могут
    быть переданы.
    
    
         10.2 Команды програмного вывода данных
    
    Этот класс включает:
    
    
    - Format /Форматирование/
    - Write Buffer /Запись буфера/
    - Write Long /Длинная запись/
    - Write Sector(s)  /Запись сектора(ов)/
    
    
         Выполнение команд заключается в передаче одного или  более
    512-байтного сектора (более  в  случае  Длинного  чтения  (Read
    Long)) данных из ЭВМ в накопитель.
    
    а) ЭВМ записывает все нужные параметры в Регистры Возможностей,
       Счетчика Секторов, Hомера Сектора, Цилиндра и Hакопителя/Го-
       ловки.
    
    б) ЭВМ записывает код команды в Регистр Команды.
    
    в) Дисковод устанавливает DRQ, когда он готов принять данные.
    
    г) ЭВМ передает в накопитель один сектор данных  через  Регистр
       Данных.
    
    д) Дисковод очищает DRQ и устанавливает BSY.
    
    е) Когда дисковод завершил обработку сектора, он очищает BSY  и
       устанавливает INTRQ. Если требуется передача другого  секто-
       ра, то дисковод устанавливает DRQ.
    
    ж) После обнаружения INTRQ ЭВМ читает Регистр Состояния.
    
    з) Дисковод сбрасывает требование прерывания INTRQ.
    
    и) Дисковод очищает DRQ. Если требуется передача второго секто-
       ра, то вышеупомянутая последовательность повторяется с  пун-
       кта г).
    
    
         10.2.1. Команды програмной записи
    
    ┌─ а) ─┬─ б) ─┐     ┌─ г) ┐     ┌─ д) ─┬─ г) ┐     ┌─ д) ─┐
    │ Уст. │Запись│     │Обмен│     │Чтение│Обмен│.....│Чтение│
    │парам.│ кода │     │     │     │  РС  │     │.....│  РС  │
    ├──────┼──────┤     ├─────┤     ├──────┼─────┤     ├──────┤
    BSY=0  │      BSY=1 BSY=0 BSY=1 BSY=0  │     BSY=1 BSY=0  │
           DRDY=1       │     │     │      │     │     │      │
                        DRQ=1 DRQ=0 DRQ=1  │     DRQ=0 │      │
                                    Уст.   Сброс       Уст.   Сброс
                                    INTRQ  INTRQ       INTRQ  INTRQ
    
     
         10.2.2 Прерванная програмная запись
    
            ┌─ а) ─┬─ б) ─┐       ┌─ д) ─┐
            │ Уст. │Запись│       │Чтение│
            │парам.│ кода │       │  РС  │
            ├──────┼──────┤       ├──────┤
            BSY=0  │      BSY=1   BSY=0  │
                   DRDY=1         │      │
                                  Уст.   Сброс
                                  INTRQ  INTRQ
    
    
         10.3 Команды без данных
    
         Этот класс включает:
    
    - Execute Drive Diagnostic (DRDY=x) /Выполнить диагностику  на-
      копителя (DRDY=x)/
    - Idle /Переход в пассивный режим/
    - Initialize Drive Parameters (DRDY=x) /Инициализировать  пара-
      метры дисковода (DRDY=x)/
    - Read Power Mode /Чтение режима питания/
    - Read Verify Sector(s) /Проверочное чтение сектора(ов)/
    - Recalibrate /Перекалибровка/
    - Seek /Установка/
    - Set Features /Установка возможностей/
    - Set Multiple Mode /Установить блочный режим/
    - Standby /Дежурный режим/
    
         Выполнение этих команд не педусматривает никакой  передачи
    данных.
    
    а) ЭВМ записывает все нужные параметры в Регистры Возможностей,
       Счетчика Секторов, Hомера Сектора, Цилиндра и Hакопителя/Го-
       ловки.
    
    б) ЭВМ записывает код команды в Регистр Команды.
    
    в) Дисковод устанавливает BSY.
    
    г) После завершения обработки накопитель очищает BSY и устанав-
       ливает INTRQ.
    
    д) После обнаружения INTRQ ЭВМ читает Регистр Состояния.
    
    е) Дисковод сбрасывает требование прерывания INTRQ.
    
    
         10.4 Разные Команды
    
         Этот класс включает:
    
    - Read Multiple /Чтение блока секторов/
    - Sleep /Оствнов/
    - Write Multiple /Запись блока секторов/
    - Write Same /Повторная запись/
    
         Протоколы этих команд содержатся в соответствующих  описа-
    ниях команд.
    
    
         10.5 Команды передачи данных с ПДП (Дополнительная возмож-
    ность).
    
         Этот класс включает:
    
    
    - Read DMA /Чтение с ПДП/
    - Write DMA /Запись с ПДП/
    
    
         Передачи данных, использующие команды  прямого  доступа  в
    память имеют два отличия от програмного обмена: 
    
    - при передаче данных используется ПДП-канал;
    - при передаче нескольких секторов промежуточные прерывания  не
      осуществляются.
    
         Инициирование команд передачи  с  ПДП  идентично  командам
    Чтения сектора или Записи сектора, за исключением того, что ЭВМ
    должна инициализировать используемый ПДП-канал до выдачи коман-
    ды. 
    
         Программа обработки прерывания для передач ПДП  отличается
    следующим:
    
    - при передаче нескольких секторов на каждом секторе прерывания
      не осуществляются;
    - ЭВМ должна сбросить канал ПДП до чтения состояния накопителя.
    
         Протокол прямого доступа в память  позволяет  высокоэффек-
    тивным многозадачным операционным системам устранить непроизво-
    дительные затраты процессорного времени, связанные с програмным
    обменом с накопителем.
    
    
    а) Фаза команды
    
       1) ЭВМ инициализирует используемы ПДП-канал
       2) ЭВМ загружает Блок Регистров Команды
       3) ЭВМ заносит код команды в Регистр Команды
    
    б) Фаза передачи данных: содержание регистров не доступно в
       течение фазы передачи данных с ПДП.
    
       1) Используемый ПДП-канал производит  передачу  данных  из/в
          накопитель с использованием сигнала DMARQ.
    
    в) Фаза Состояния
    
       1) Дисковод генерирует требование прерывания ЭВМ
       2) ЭВМ сбрасывает используемый ПДП-канал
       3) ЭВМ читает Регистр Состояния и Регистр Ошибки
    
    
         10.5.1 Hормальная передача ПДП
    
        ┌──── а)  ────┐      ┌── б) ──┐      ┌──── в) ────┐
        │Иниц.│Команда│      │Передача│      │Сброс│Чтение│
        │ ПДП │       │      │ с ПДП  │      │ ПДП │  РС  │
        ├─────┼───────┤      ├────────┤      ├─────┼──────┤
        BSY=0         BSY=1  BSY=x           BSY=1 BSY=0
                             DRQ=x           │
                                             nIEN=0
    
    
         10.5.2 Прекращенная передача ПДП
    
        ┌──── а)  ────┐      ┌── б) ──┐      ┌──── в) ────┐
        │Иниц.│Команда│      │Передача│      │Сброс│Чтение│
        │ ПДП │       │      │ с ПДП  │      │ ПДП │  РС  │
        ├─────┼───────┤      ├────────┤      ├─────┼──────┤
        BSY=0         BSY=1  BSY=x           BSY=1 BSY=0
                             DRQ=1           │
                                             nIEN=0
    
    
         10.5.3 Прекращенная команда ПДП
    
        ┌──── а)  ────┐      ┌──── в) ────┐
        │Иниц.│Команда│      │Сброс│Чтение│
        │ ПДП │       │      │ ПДП │  РС  │
        ├─────┼───────┤      ├─────┼──────┤
        BSY=0                BSY=1 BSY=1  BSY=0
                             nIEN=0
    
    
        __
     __/ /   Powered                                 [pepsi inside]
     \_\/  by MOTOROLA                               [smoking suxx]
    
    --- [email protected] http://rdc.cch.pmc.ru rdc@IRCnet
     * Origin: Don't drink water, fish f**k in it (2:5020/1301.7)
    [свернуть]
    В правильно заданном вопросе содержится половина ответа

  11. #10
    Activist Аватар для AzAtom
    Регистрация
    05.04.2015
    Адрес
    г. Майкоп
    Сообщений
    292
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Насколько я понимаю IDE, оба устройства получают все команды, но исполняет команду и отвечает только то устройство, которое было до этого выбрано.

Страница 1 из 4 1234 ПоследняяПоследняя

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

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Программная модель Intel 8080/КР580ВМ80А
    от svofski в разделе Эмуляторы отечественных компьютеров
    Ответов: 6
    Последнее: 18.08.2016, 00:24
  2. Ответов: 3
    Последнее: 29.05.2013, 18:03
  3. Два Slave-IDE на одном шнуре
    от Максагор в разделе Внешние накопители
    Ответов: 4
    Последнее: 31.01.2012, 18:00
  4. Программная документация.
    от fk0 в разделе Программирование
    Ответов: 7
    Последнее: 19.01.2006, 16:53

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •