реверс

From
Sergey Popkov (2:5020/1799)
To
All
Date
2002-08-16T14:47:55Z
Area
RU.ALGORITHMS
     Здpавствуй, дpагоценный мой All !

вот дока, имхо, лучше всяких сырков. Я там даже цветом выделил, где речь идет о
направлении передачи. Если надо, могу покопаться в архивах - там я писал
тестовую программку для передачи "памать-память" - на С++.


            E2. Контроллер прямого доступа к памятиF

      Контроллер  прямого доступа  к  памяти  (ПДП, DMA  - Direct
 Memory Access) обеспечивает высокоскоростной обмен данными между
 устройствами ввода-вывода  и ОЗУ без  использования центрального
 процессора,  что позволяет  освободить процессор  для выполнения
 вычислений параллельно с обменом  и независимо от него. Наиболее
 часто  возможности  ПДП  используются  при  работе  с  дисковыми
 накопителями,  однако реализовано  использование ПДП  адаптерами
 накопителей  на  магнитной  ленте   и  рядом  других  устройств.
 Ощутимые приемущества дает использование ПДП в процессе обмена с
 устройствами,  принимающими  или  передающими  данные достаточно
 большими порциями с высокой скоростью.

      В  IBM  PC-подобных  компьютерах  функции  контроллера  ПДП
 выполняет  микросхема   8237А  фирмы  INTEL   (советский  аналог
 КР580ВТ57)  или  ее  аналоги  8237А-4  и  8237А-5,  работающие с
 тактовой  частотой   4  и  5   Мгц  соответственно  (стандартная
 микросхема 8237А работает на частоте  3 Мгц). Контроллер имеет 4
 независимых  канала, каждый  из которых  может обслуживать  одно
 периферийное устройство.




                             - 8 -

             E2.1. Принципы работы контроллера ПДПF

      В  работе ПДП  различаются 2  главных цикла:  цикл ожидания
 (Idle  cycle)  и  активный  цикл  (Active  cycle).  Каждый  цикл
 подразделяется  на  ряд  состояний,  занимающих  по времени один
 период  часов (тик).  Из  цикла  ожидания контроллер  может быть
 переведен в состояние программирования (Program Condition) путем
 подачи на  вход RESET сигнала высокого  уровня, длительностью не
 менее 300  нc и следующей  за ним подачи  сигнала низкого уровня
 (уровня  0)  на  вывод  CS  (Chip  Select). В состоянии програм-
 мирования контроллер будет находится до  тех пор, пока на выводе
 CS сохранится сигнал низкого уровня. В процессе программирования
 контроллеру задаются:

      - начальный адрес памяти для обмена;
      - уменьшенное на единицу число передаваемых байтов;
      - *направление обмена*,

 а также устанавливаются  требуемые режимы работы  (разрешить или
 запретить  циклическое изменение приоритетов, автоинициализацию,
 задать направление изменения адреса при обмене и т. д.).

      Загрузка 16-разрядных  регистров контроллера осуществляется
 через  8-разрядные порты  ввода-вывода. Перед  загрузкой первого
 (младшего)  байта должен  быть сброшен  (очищен) триггер-защелка
 (триггер   первый/последний,   First/Last   flip-flop),  который
 изменяет  свое состояние  после вывода  в порт  первого байта  и
 таким образом  дает возможность следующей командой  вывода в тот
 же порт загрузить старший байт соответствующего регистра.

      Запрограммированный  канал  должен  быть  демаскирован (бит
 маски канала устанавливается при этом  в 0), после чего он может
 принимать  сигналы  "Запрос  на  ПДП",  генерируемые тем внешним
 устройством,  которое  обслуживается  через  этот  канал. Сигнал
 "Запрос на ПДП" может быть также инициирован установкой в 1 бита
 запроса  данного канала  в регистре  запросов контроллера. После
 появления сигнала  запроса контроллер входит в  активный цикл, в
 котором выполняется обмен данными.  Обмен может осуществляется в
 одном из четырех режимов:

      1. Режим  одиночной передачи (Signle  Transfer Mode). После
 каждого цикла  передачи контроллер освобождает  шину процессору,
 но  сразу же  начинает проверку  сигналов запроса  и, как только
 обнаруживает активный сигнал  запроса, инициирует следующий цикл
 передачи.

      2.  Режим блочной  передачи (Block  Transfer Mode).  В этом
 режиме  наличие  сигнала  запроса  требуется  только  до момента
 выдачи  контроллером  сигнала  "Подтверждение  запроса  на  ПДП"
 (DACK), после  чего шина не  освобождается вплоть до  завершения
 передачи всего блока.

      3.  Режим передачи  по требованию  (Demand Transfer  Mode).
 Данный  режим   является  промежуточным  между   двумя  первыми:
 передача  идет  непрерывно  до  тех  пор,  пока  активен  сигнал



                             - 9 -

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

      4. Каскадный режим (Cascade Mode). Режим позволяет включить
 в подсистему ПДП  более одного контроллера в  тех случаях, когда
 недостаточно четырех каналов ПДП. В  этом режиме один из каналов
 ведущего   контроллера   используется   для   каскадирования   с
 контроллером  второго уровня.  Для работы  в каскаде  сигнал HRQ
 ("Запрос на захват") ведомого  контроллера подается на вход DREG
 ("Запрос на канал ПДП")  ведущего, а сигнал DACK ("Подтверждение
 запроса")   ведущего  подается   на  вход   HDLA  ("Потверждение
 захвата") ведомого.

      Такая  схема  подключения  аналогична  подключению ведущего
 (первого)   контроллера   к   микропроцессору,   с   которым  он
 обменивается сигналами HRQ и HDLA.




                            - 10 -

                       E2.2. Типы передачF

      1. Передача память-память (Memory-to-memory DMA).
      Используется  для  передачи  блока  данных  из одного места
 памяти  в  другое.  Исходный   адрес  определяется  в  регистрах
 нулевого канала,  выходной - в  регистрах первого канала.  Число
 циклов  обмена (число  байт минус  1) задается  в регистре числа
 циклов канала  1. Передача происходит  с использованием рабочего
 регистра  контроллера   в  качестве  промежуточного   звена  для
 хранения информации. При передачe память-память может быть задан
 специальный  режим фиксации  адреса (Address  hold), при котором
 значение   текущего  адреса   в  регистре   нулевого  канала  не
 изменяется, при этом весь выходной блок памяти заполняется одним
 и тем же элементом данных, находящимся по заданному адресу.

      2. Автоинициализация (автозагрузка, Autoinitialization).
      После завершения обычной  передачи использованный канал ПДП
 маскируется  и  должен  быть  перепрограммирован  для дальнейшей
 работы  с  ним.  При  автоинициализации  маскировка канала после
 окончания передачи  не происходит, а регистры  текущего адреса и
 счетчик  циклов  автоматически  загружаются  из  соответствующих
 регистров с начальными значениями. Таким образом для продолжения
 (повторения) обмена  достаточно выставить сигнал  запроса на ПДП
 по данному каналу.

      3. Режим фиксированных приоритетов.
      В этом режиме канал  0 всегда имеет максимальный приоритет,
 а канал  3 -  минимальный. Это  означает, что  любая передача по
 каналу с более высоким приоритетом будет выполняться раньше, чем
 по каналу с более низким приоритетом.

      4. Циклический сдвиг приоритетов.
      Позволяет  избежать  "забивания"  шины  одним  каналом  при
 одновременной передачe по нескольким каналам. Каждому каналу, по
 которому  прошла  передача,  автоматически  присваивается низший
 приоритет,  после  чего  право  на  передачу  получает  канал  с
 наивысшим  приоритетом, для  которого передача  в данный  момент
 возможна.  Таким  образом,  если  в  начале работы распределение
 приоритетов было обычным (канал 0 - наивысший), и пришли сигналы
 запроса  на  ПДП  по  1-му  и  2-му  каналам,  то  сначала будет
 выполняться передача по первому  каналу, затем он получит низший
 приоритет  (а  канал  2,  соответственно,  высший,  т.  к. сдвиг
 приоритетов циклический)  и передача выполнится  по 2-му каналу,
 который  затем  получит  низший  приоритет,  а  высший приоритет
 получит,  сответственно,  канал  3,  который  и  будет  обладать
 преимущественным правом на передачу.

      5. Сжатие времени передачи (Compressed transfer timing).
      В  случае,  если  временные  характеристики  быстродействия
 обменивающихся  устройств совпадают,  ПДП может  сократить время
 выполнения  каждого  такта  передачи  на  2  цикла часов за счет
 тактов ожидания, входящих в каждый цикл передачи.




                            - 11 -

            E2.3. Описание внутренних регистров ПДПF

      Контроллер имеет 344 бита внутренней памяти, организованной
 в виде регистров. Описание внутренних  регистров ПДП приведено в
 таблице.

 ┌───────────────────────────────────┬──────────────┬───────────┐
 │          Наименование             │ Разрядность  │   Число   │
 │            регистра               │    (бит)     │ регистров │
 ├───────────────────────────────────┼──────────────┼───────────┤
 │ Регистр начального адреса         │     16       │     4     │
 │ (Base Address Register)           │              │           │
 │                                   │              │           │
 │ Регистр начального счетчика циклов│     16       │     4     │
 │ (Base Word Count Register)        │              │           │
 │                                   │              │           │
 │ Регистр текущего адреса           │     16       │     4     │
 │ (Current Address Register)        │              │           │
 │                                   │              │           │
 │ Регистр текущего счетчика циклов  │     16       │     4     │
 │ (Current Word Count Register)     │              │           │
 │                                   │              │           │
 │ Рабочий регистр адреса            │     16       │     1     │
 │ (Temporary Address Register)      │              │           │
 │                                   │              │           │
 │ Рабочий регистр счетчика циклов   │     16       │     1     │
 │ (Temporary Word Count Register)   │              │           │
 │                                   │              │           │
 │ Регистр состояния                 │     8        │     1     │
 │ (Status Register)                 │              │           │
 │                                   │              │           │
 │ Регистр команд                    │     8        │     1     │
 │ (Command Register)                │              │           │
 │                                   │              │           │
 │ Регистр режима (Mode Register)    │     6        │     4     │
 │                                   │              │           │
 │ Рабочий регистр                   │     8        │     1     │
 │ (Temporary Register)              │              │           │
 │                                   │              │           │
 │ Регистр масок (Mask Register)     │     4        │     1     │
 │                                   │              │           │
 │ Регистр запросов                  │     4        │     1     │
 │ (Request Register)                │              │           │
 └───────────────────────────────────┴──────────────┴───────────┘

      Регистр начального адреса (Base Address Register).
      В этом  регистре задается стартовый  адрес ОЗУ, с  которого
 начинается передача.  Регистр содержит 16  разрядов и определяет
 адрес  внутри  заданной  страницы  памяти  размером 64К. Задание
 номера   страницы   памяти   осуществляется   через  специальные
 страничные  регистры  (Page  Registers),  поддерживаемые внешней
 логикой. Каждый канал ПДП имеет свой регистр начального адреса и
 страничный  регистр.   Такое  деление  памяти   на  страницы  не
 позволяет  осуществить  обмен  с  блоком  памяти, находящимся на
 пересечении   двух   страниц.   Каждая   страница  начинается  с



                            - 12 -

 сегментного  адреса,  кратного  1000h  (0,  1000h,  2000h,  ...,
 9000h).

      Регистр  начального   счетчика  циклов  (Base   Word  Count
 Register).
      В  этом регистре  задается начальное  число циклов передачи
 для программируемого  канала. Фактическое число  передаваемых во
 время работы ПДП элементов  данных на единицу превышает заданное
 число  циклов, т.  е. если   Вы задаете  100 циклов  передачи, а
 размер элемента  будет равен 1  байту, то за  сеанс обмена будет
 передан 101 байт информации.

      Регистр текущего адреса (Current Address Register).
      Начальное значение заносится в  этот регистр одновременно с
 регистром  начального  адреса.  В  дальнейшем  в  ходе  передачи
 значение   текущего  адреса   автоматически  увеличивается   или
 уменьшается  (конкретное  направление   изменения  задается  при
 программировании  в  регистре  режима).  Если разрешена автоини-
 циализация, то после окончания  передачи в регистр автоматически
 устанавливается значение из регистра начального адреса.

      Регистр  текущего  счетчика   циклов  (Current  Word  Count
 Register).
      Регистр  содержит текущее  значение счетчика  циклов (число
 оставшихся  циклов передачи).  Отображаемое в  нем число  циклов
 всегда  на  единицу  меньше  числа  еще  не переданных элементов
 данных, так как изменение значения в этом регистре проиводится в
 конце  цикла передачи,  уже после  фактической передачи элемента
 данных,  а  конец  передачи  фиксируется  в  момент переполнения
 счетчика (изменение его значения с 0 на 0FFFFh).

     *Регистр режима (Mode Register).*
     Данный   регистр   задает   режимы   работы   своего  канала
 контроллера.

  7 6 5  4  3  2  1  0
 ┌─┬─┬──┬──┬──┬──┬──┬──┐
 │X│X│     │  │  │     │ Биты:
 └─┴─┴──┼──┴┬─┴┬─┴──┬──┘ ─────
        │   │  │    └────> 0-1: Режим работы: 00=проверка,
        │   │  │                01=запись (в память),
        │   │  │                10=чтение (из памяти),
        │   │  │                11=недопустимая комбинация
        │   │  └─────────> 2: Автоинициализация: 1=разрешена,
        │   │                                    0=запрещена
        │   └────────────> 3: *Изменение текущего адреса при*
        │                     *обмене: 0=увеличение, 1=уменьшение*
        └────────────────> 4-5: Тип передачи:
                                00=Режим передачи по требованию,
                                01=Режим одиночной передачи,
                                10=Режим блочной передачи,
                                11=Каскадный режим.

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



                            - 13 -

 общих для всех каналов.

       Регистр команд (Command Register).
       Этот  8-битный регистр  управляет работой  контроллера. Он
 программируется,   когда   контроллер   находится   в  состоянии
 программирования и очищается командами  сброса "Reset" и "Master
 Clear". Назначение битов регистра команд приведено на рисунке.

  7  6  5  4  3  2  1  0
 ┌──┬──┬──┬──┬──┬──┬──┬──┐
 │  │  │  │  │  │  │  │  │ Бит:
 └┬─┴┬─┴┬─┴┬─┴┬─┴┬─┴┬─┴┬─┘ ───
  │  │  │  │  │  │  │  └─> 0: 0=запретить передачу память-память,
  │  │  │  │  │  │  │         1=разрешить
  │  │  │  │  │  │  └────> 1: 0=запретить фиксацию адреса в канале
  │  │  │  │  │  │            0, 1=разрешить
  │  │  │  │  │  └───────> 2: 0=разблокировать, 1=заблокировать
  │  │  │  │  │               контроллер
  │  │  │  │  └──────────> 3: 0=нормальная временная диаграмма,
  │  │  │  │                  1=сжатие времени передачи; если бит
  │  │  │  │                  0 установлен, то игнорируется
  │  │  │  └─────────────> 4: 0=режим фиксированных приоритетов,
  │  │  │                     1=режим циклического сдвига
  │  │  │                       приоритетов
  │  │  └────────────────> 5: 1=Режим расширенной записи,
  │  │                        0=задержки при записи; если бит 3
  │  │                        установлен, то игнорируется
  │  └───────────────────> 6: 0=активным считается высокий уровень
  │                           сигнала запроса (DREQ), 1=низкий
  └──────────────────────> 7: активным считается высокий уровень
                              сигнала подтверждения запроса на
                              ПДП (DACK), 1=низкий

      Регистр состояния (Status Register).
      Регистр  отражает текущее  состояние запросов  и передач по
 всем четырем каналам. Биты 0 - 3 устанавливаются в единицу после
 завершения передачи по каналам  0 - 3 (бит 0 - канал  0, бит 1 -
 канал 1 и т.д.), если не задан режим автоинициализации. Эти биты
 очищаются  после  команды  сброса  контроллера  и  после  каждой
 операции считывания состояния из регистра  состояния. Биты 4 - 7
 указывают по  какому из каналов 0  - 3 активен в  текущий момент
 сигнал запроса на ПДП.

      Регистр масок (Mask Register).
      Каждый бит этого  4-битового регистра маскирует/демаскирует
 свой канал ПДП, при этом  значение 1 маскирует канал, значение 0
 демаскирует  канал и  разрешает прием  сигнала запроса  по этому
 каналу.

      Регистр запросов (Request Register).
      Сигнал  запроса   на  ПДП  (DREQ)  может   быть  издан  как
 обслуживаемым  устройством, так  и программно.  Для программного
 издания сигнала запроса по одному  из 4-х каналов ПДП необходимо
 установить соответствующий бит  в 4-разрядном регистре запросов.
 Запрос  на ПДП  может быть  отменен записью  нулевого значения в



                            - 14 -

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

      Рабочий регистр (Temporary Register).
      Этот   8-разрядный   регистр   используется   для  хранения
 элемента  данных, передаваемого  в режиме  фиксированного адреса
 при   передаче   память-память   или   для  временного  хранения
 передаваемого байта при всех остальных режимах передачи.




                            - 15 -

         E2.4. Программное управление контроллером ПДПF

      Программное  управление   контроллером  ПДП  осуществляется
 через порты ввода-вывода. Доступ  к каждому регистру контроллера
 может быть осуществлен через свои порты ввода-вывода. В разделах
 2.4.1 и  2.4.2 описывается программное  управление контроллерами
 на XT- и АТ-подобных ПЭВМ соответственно.

      E2.4.1. Организация и управление ПДП на XT-подобных ПЭВМF

      IBM  PC XT  и  XT-совместимые  ПЭВМ имеют  один 4-канальный
 контроллер ПДП 8237А. Назначение каналов следующее:

      0 - обмен память-память;
      1 - свободен (может использоваться сетевыми адаптерами);
      2 - обмен с контроллером гибких дисков;
      3 - обмен с контроллером жестких дисков.

      В   таблице   приведено   описание   портов   ввода-вывода,
 предназначенных для управления контроллером ПДП.

 ┌──────┬────────┬─────────────────────────────────────────────┐
 │ Порт │ Режим  │       Назначение                            │
 ├──────┼────────┼─────────────────────────────────────────────┤
 │ 0h   │ запись │ Запись начального адреса в регистр начально-│
 │      │        │ го адреса и регистр текущего адреса канала 0│
 │      │        │                                             │
 │ 2h   │ запись │ то же для канала 1                          │
 │      │        │                                             │
 │ 4h   │ запись │ то же для канала 2                          │
 │      │        │                                             │
 │ 6h   │ запись │ то же для канала 3                          │
 │      │        │                                             │
 │ 0h   │ чтение │ Чтение начального адреса из регистра началь-│
 │      │        │ ного адреса канала 0                        │
 │      │        │                                             │
 │ 2h   │ чтение │ то же для канала 1                          │
 │      │        │                                             │
 │ 4h   │ чтение │ то же для канала 2                          │
 │      │        │                                             │
 │ 6h   │ чтение │ то же для канала 3                          │
 │      │        │                                             │
 │ 1h   │ запись │ Запись в регистр начального счетчика циклов │
 │      │        │и в регистр текущего счетчика циклов канала 0│
 │      │        │                                             │
 │ 3h   │ запись │ то же для канала 1                          │
 │      │        │                                             │
 │ 5h   │ запись │ то же для канала 2                          │
 │      │        │                                             │
 │ 7h   │ запись │ то же для канала 3                          │
 └──────┴────────┴─────────────────────────────────────────────┘




                            - 16 -

 ┌──────┬────────┬─────────────────────────────────────────────┐
 │ Порт │ Режим  │       Назначение                            │
 ├──────┼────────┼─────────────────────────────────────────────┤
 │      │        │                                             │
 │ 1h   │ чтение │ Чтение текущего значения из регистра теку-  │
 │      │        │ щего счетчика циклов канала 0               │
 │      │        │                                             │
 │ 3h   │ чтение │ то же для канала 1                          │
 │      │        │                                             │
 │ 5h   │ чтение │ то же для канала 2                          │
 │      │        │                                             │
 │ 7h   │ чтение │ то же для канала 3                          │
 │      │        │                                             │
 │ 8h   │ запись │ Запись регистра команд ПДП                  │
 │      │        │                                             │
 │ 8h   │ чтение │ Чтение регистра состояния ПДП               │
 │      │        │                                             │
 │ 9h   │ запись │ Запись в регистр запросов ПДП               │
 │      │        │                                             │
 │ 0Ah  │ запись │ Запись бита маски для одного из каналов ПДП │
 │      │        │                                             │
 │ 0Bh  │ запись │ Запись регистра режимов для одного из       │
 │      │        │ каналов ПДП                                 │
 │      │        │                                             │
 │ 0Ch  │ запись │ Очистка (сброс) триггера-защелки (триггера  │
 │      │        │ первого/последнего)                         │
 │      │        │                                             │
 │ 0Dh  │ запись │ Программный сброс контроллера               │
 │      │        │                                             │
 │ 0Eh  │ запись │ Очистка битов масок всех 4-х каналов        │
 │      │        │                                             │
 │ 0Fh  │ запись │ Запись регистра масок для всех 4-х каналов  │
 │      │        │                                             │
 │ 0Dh  │        │                                             │
 │ или  │ чтение │ Чтение рабочего регистра ПДП                │
 │ 0Fh  │        │                                             │
 ├──────┼────────┼─────────────────────────────────────────────┤
 │ 81h  │ запись │ Задание номера страницы для канала 2        │
 │      │        │                                             │
 │ 82h  │ запись │ то же для канала 3                          │
 │      │        │                                             │
 │ 83h  │ запись │ то же для канала 1                          │
 │      │        │                                             │
 │ 87h  │ запись │ то же для канала 0                          │
 └──────┴────────┴─────────────────────────────────────────────┘

      Порты 0h - 7h предназначены  для записи исходных значений в
 регистры  начального и  текущего адреса,  начального и  текущего
 счетчика   циклов  для   всех   4-х   каналов.  Так   как  порты
 восьмиразрядные,  а  регистры,  в  которые  через  них заносятся
 данные, 16-разрядные, то запись производится в два приема. Перед
 первой  командой  вывода  в  требуемый  порт необходимо сбросить
 триггер-защелку,    для   чего    выполняется   команда   вывода
 произвольного значения  в порт 0Ch, после  чего в требуемый порт
 выводится  младший байт  16-разрядного значения  и затем старший



                            - 17 -

 байт следующей команды вывода в тот же порт.

      Вывод в порт 8h позволяет занести значение в регистр команд
 ПДП. Описание битов регистра команд приведено в п.2.3.

      Чтение  из  порта   8h  считывает  регистр  состояния  ПДП.
 Описание битов регистра состояния приведено в п.2.3.

      Запись  в порт  9h  позволяет  установить или  сбросить бит
 запроса в регистр запросов для одного из каналов. Формат команды
 следующий:

  7  6  5  4  3  2  1  0
 ┌──┬──┬──┬──┬──┬──┬──┬──┐
 │X  X  X  X  X │  │     │ Биты:
 └──┴──┴──┴──┴──┴┬─┴┬─┴┬─┘ ─────
 не используются │  └──┴──> 0-1: выбор канала 00 - 0
                 │                            01 - 1
                 │                            10 - 2
                 │                            11 - 3
                 └────────> 2: 1=установить бит запроса на ПДП
                               0=сбросить бит запроса на ПДП

      Запись  в порт  0Ah позволяет  установить или  сбросить бит
 маски в регистре масок для одного из каналов. Формат команды:

  7  6  5  4  3  2  1  0
 ┌──┬──┬──┬──┬──┬──┬──┬──┐
 │X  X  X  X  X │  │     │ Биты:
 └──┴──┴──┴──┴──┴┬─┴┬─┴┬─┘ ─────
 не используются │  └──┴──> 0-1: выбор канала 00 - 0
                 │                            01 - 1
                 │                            10 - 2
                 │                            11 - 3
                 └────────> 2: 1=установить бит маски
                               0=сбросить бит маски

      Запись в порт 0Bh устанавливает значение в регистре режимов
 одного из 4-х каналов ПДП. Биты 0  и 1 задают номер канала (00 -
 0, 01  - 1, 10 -  2, 11 - 3).  В биты 2 -  7 заносятся значения,
 передаваемые  соответственно  в  биты  0  -  6 регистра режимов.
 Описание битов регистра режимов приведено в п. 2.3.

      Запись  в  порт  0Dh  задает  программный сброс контроллера
 (Master  Clear). Вывод  любого байта  в этот  порт имеет  тот же
 эффект,  что  и  аппаратный  сброс  контроллера. При программном
 сбросе очищаются регистры команд,  состояния, запросов и рабочий
 регистр. Так  же сбрасывается триггер-защелка  и устанавливается
 все  биты  масок  в  регистре  масок.  После программного сброса
 контроллер переходит в цикл ожидания.

      Вывод  любого  байта  в  порт  0Eh  очищает регистр масок -
 сбрасывает  биты  масок  всех  4-х  каналов  ПДП и таким образом
 разрешает прием запросов на ПДП по всем каналам.




                            - 18 -

      Через порт 0Fh можно  задать произвольное значение регистра
 масок  ПДП. Для  этого необходимо  в  битах  0 -  3 регистра  AL
 установить требуемое значение масок каналов 0 - 3 соответственно
 и вывести это значение в порт.

      Страничные регистры ПДП предназначены для задания параметра
 страницы памяти, с которой будет производится обмен. Под номером
 страницы  понимаются старшие  4 бита  полного 20-битового адреса
 ОЗУ, т.е. начальные сегментные адреса страниц будут кратны 1000h
 (0,  1000h, 2000h,  ..., 9000h).  Напомним, что  архитектура ПДП
 позволяет работать  только со страницей  памяти размером 64К,  а
 логика,  обеспечивающая переключение  страниц устроена  так, что
 страницы  имеют  жесткие  границы,  описанные  выше.  Из-за этой
 особенности невозможно с помощью ПДП осуществить обмен с блоками
 памяти, пересекающими границу между двумя такими страницами.

      E2.4.2. Организация и управление ПДП на AT-подобных ПЭВМF

      IBM  PC AT  и AT-подобные  ПЭВМ имеют  два контроллера  ПДП
 8237А, работающиe в каскадном режиме.

      Назначение каналов следующие:

      0 - свободен;
      1 - адаптер SDLC;
      2 - контроллер накопителей на гибких дисках;
      3 - контроллер накопителей на жестких дисках;
      4 - каскад с первым контроллером ПДП;
      5, 6, 7 - свободны.

      Управление каналами 0 -  3 осуществляется аналогично PC/ХТ.
 Каналы 4  - 7 предназначены для  обмена 16-разрядными словами. В
 связи с этим возникает ряд отличий в работе с этими каналами:

      -  бит  0  в  данных,  заносимых  в  регистры  начального и
 текущего адреса, всегда подразумевается  равным 0, поэтому через
 эти регистры передаются биты 1 - 16 полного 23-разрядного адреса
 (а  не  биты  0  -  15  полного  20-разрядного  адреса,  как это
 реализовано  на   ХТ-подобных  ПЭВМ),  по  этой   же  причине  в
 страничные регистры каналов 4 - 7 заносятся биты 17 - 23 полного
 адреса, а  не биты 16  - 23, как  это надо сделать  при работе с
 каналами 0 - 3;

      - поскольку передача  осуществляется 16-разрядными словами,
 в регистры  текущего и  начального счетчика  циклов заносится не
 число байт, а число слов, уменьшенное на единицу;

      - размеры страниц памяти, в пределах которых возможен обмен
 в течение одной передачи составляют 2000h байтов.

      В   таблице   приведено   описание   портов   ввода-вывода,
 предназначенных для управления вторым контроллером ПДП.




                            - 19 -

 ┌──────┬────────┬─────────────────────────────────────────────┐
 │ Порт │ Режим  │       Назначение                            │
 ├──────┼────────┼─────────────────────────────────────────────┤
 │ 0C0h │ запись │ Запись начального адреса в регистр начально-│
 │      │        │ го адреса и регистр текущего адреса канала 4│
 │      │        │                                             │
 │ 0C4h │ запись │ то же для канала 5                          │
 │      │        │                                             │
 │ 0C8h │ запись │ то же для канала 6                          │
 │      │        │                                             │
 │ 0CCh │ запись │ то же для канала 7                          │
 │      │        │                                             │
 │ 0C0h │ чтение │ Чтение начального адреса из регистра началь-│
 │      │        │ ного адреса канала 4                        │
 │      │        │                                             │
 │ 0C4h │ чтение │ то же для канала 5                          │
 │      │        │                                             │
 │ 0C8h │ чтение │ то же для канала 6                          │
 │      │        │                                             │
 │ 0CCh │ чтение │ то же для канала 7                          │
 │      │        │                                             │
 │ 0C2h │ запись │ Запись в регистр начального счетчика циклов │
 │      │        │и в регистр текущего счетчика циклов канала 4│
 │      │        │                                             │
 │ 0C6h │ запись │ то же для канала 5                          │
 │      │        │                                             │
 │ 0CAh │ запись │ то же для канала 6                          │
 │      │        │                                             │
 │ 0CEh │ запись │ то же для канала 7                          │
 │      │        │                                             │
 │ 0C2h │ чтение │ Чтение текущего значения из регистра теку-  │
 │      │        │ щего счетчика циклов канала 4               │
 │      │        │                                             │
 │ 0C6h │ чтение │ то же для канала 5                          │
 │      │        │                                             │
 │ 0Cah │ чтение │ то же для канала 6                          │
 │      │        │                                             │
 │ 0CCh │ чтение │ то же для канала 7                          │
 │      │        │                                             │
 │ 89h  │ запись │ Задание номера страницы для канала 6        │
 │      │        │                                             │
 │ 8Bh  │ запись │ то же для канала 5                          │
 │      │        │                                             │
 │ 8Ah  │ запись │ то же для канала 7                          │
 │      │        │                                             │
 │ 8Fh  │ запись │ то же для канала 4                          │
 └──────┴────────┴─────────────────────────────────────────────┘

      В  следующей таблице  приведено описание  назначения портов
 второго контроллера  ПДП с указанием  аналогичных портов первого
 контроллера. Форматы данных,  вводимых/выводимых через эти порты
 совпадают   с  форматами   данных  аналогичных   портов  первого
 контроллера.   При  работе   с  этими   портами  следует  только
 учитывать,  что  нумерация  каналов  начинается  не  с  0, как у
 первого  контроллера, а  с 4  (канал  4  - это  канал 0  второго



                            - 20 -

 контроллера, канал 5 - это его канал 1 и т. д.).

 ┌──────┬────────┬───────────────────────────────────┬─────────┐
 │ Порт │        │                                   │ Аналог. │
 │      │ Режим  │        Назначение                 │  порт   │
 │ ПДП-2│        │                                   │  ПДП-1  │
 ├──────┼────────┼───────────────────────────────────┼─────────┤
 │ 0D0h │ запись │ Запись регистра команд ПДП        │   8h    │
 │      │        │                                   │         │
 │ 0D0h │ чтение │ Чтение регистра состояния ПДП     │   8h    │
 │      │        │                                   │         │
 │ 0D2h │ запись │ Запись в регистр запросов ПДП     │   9h    │
 │      │        │                                   │         │
 │ 0D4h │ запись │ Запись бита маски для одного из ка│   0Ah   │
 │      │        │ каналов ПДП                       │         │
 │      │        │                                   │         │
 │ 0D6h │ запись │ Запись регистра режимов для одного│   0Bh   │
 │      │        │ из каналов ПДП                    │         │
 │      │        │                                   │         │
 │ 0D8h │ запись │ Очистка (сброс) триггера-защелки  │   0Ch   │
 │      │        │ (триггера первого/последнего)     │         │
 │      │        │                                   │         │
 │ 0DAh │ запись │ Программный сброс контроллера     │   0Dh   │
 │      │        │                                   │         │
 │ 0DCh │ запись │ Очистка битов масок всех  каналов │   0Eh   │
 │      │        │                                   │         │
 │ 0DEh │ запись │ Запись регистра масок для всех 4-х│   0Fh   │
 │      │        │ каналов                           │         │
 │      │        │                                   │         │
 │ 0DAh │ чтение │ Чтение рабочего регистра ПДП      │   0Dh   │
 │      │        │                                   │         │
 └──────┴────────┴───────────────────────────────────┴─────────┘



══────────────────────────────────────────────────── Кусать тут ─══
                                       С наилучшими пожеланиями, Sergey

... У-у-у-у !!! Как все запущено !!!
--- Насколько проще была бы жизнь,если бы она была в исходниках!
 * Origin: - Лучшая пpическа- это полное ее отсутствие! (2:5020/1799)