THE COMPLETE AMIGA HARDWARE
REFERENCE MANUAL

                                ГЛАВА 8

                               ИНТЕРФЕЙСЫ

ВВЕДЕНИЕ

В этой главе описываются внешние интерфейсы Амиги, с  помощью  которых
она общается с внешним миром и рассматриваются следующие устройства:

- Два многоцелевых контроллера порта мыши/джойстика/светового пера **
- Контроллер дисковода (для НГМД и других MFM и GCR устройств)
- Клавиатура
- Параллельный   интерфейс ввода-вывода, совместимый с Centronics (для
принтеров)
- Последовательный   интерфейс   ввода-вывода,  совместимый  с RS232-C
(для внешних модемов и других последовательных устройств)
- Разъем видео вывода (RGB, ч/б, NTSC, RF modulator, видео слот)

** ПРИМЕЧАНИЕ

При переводе этой главы  были  опущены  разделы,  касающиеся  описания
пропорционального  джойстика  и  светового  пера как не представляющие
большого  практического  интереса.  Интересующиеся  могут  найти   эти
сведения  в  оригинальной версии THE COMPLETE AMIGA HARDWARE REFERENCE
MANUAL (1.3), Chapter 8, Interface Hardware.

ПОРТ КОНТРОЛЛЕРА МЫШИ

Любая  Амига  имеет  два  девятиштырьковых разъема, которые могут быть
использованы  для  ввода  и  вывода.  На  рисунке показаны внешний вид
одного из разъемов и вставляемой в разъем части внешнего устройства.



            рис 8-1: Внешний вид разъема контроллера мыши

Таблица 8-1: Назначения выводов разъема контроллера мыши

                     Мышь,
                    Трекбол,    Проп.    X-Y
                   Контроллер    Контроллер       Проп.       Световое
Вывод Джойстик       руля            (Пара)     Джойстик       Перо

1     Вперед       Сигнал-V        ---           Кнопка 3**       ---

2     Назад        Сигнал-H        ---            ---             ---

3     Влево        Сигнал-VQ    Левая кнопка     Кнопка 1         ---

4     Вправо       Сигнал-HQ    Правая кнопка    Кнопка 2         ---

5 *   ---      Средняя кнопка**  Правый POT      POT X         Перо на
                                                               экране

6 *  Кнопка 1    Левая кнопка     ---            ---           Триггер
                                                                луча

7     ---          +5V            +5V           +5V            +5V

8     GND          GND            GND           GND            GND

9 *  Кнопка2**   Правая кнопка  Левый POT       POT Y         Кнопка2**

* Эти контакты могут быть сконфигурированы на вывод
** Эти кнопки могут отсутствовать

                 РЕГИСТРЫ, ИСПОЛЬЗУЕМЫЕ ПОРТОМ КОНТРОЛЛЕРА

JOY0DAT ($DFF00A) Счетчик для цифрового ввода (мышь) (порт 1)
JOY1DAT ($DFF00C) Счетчик для цифрового ввода (мышь) (порт 2)
CIAAPRA ($BFE001) Ввод и вывод для 6 контакта."Огонь" для портов 1 и 2
POT0DAT ($DFF012) Счетчик для пропорционального ввода (порт 1)
POT1DAT ($DFF014) Счетчик для пропорционального ввода (порт 2)
POTGO   ($DFF034) Запись значений и запуск проп. счетчиков
POTGOR  ($DFF016) Чтение значений проп. разъема
BPLCON0 ($DFF100) Бит 3 включает защелку светового пера
VPOSR   ($DFF004) Чтение позиции светового пера (старшие биты)
VHPOSR  ($DFF006) Чтение позиции светового пера (младшие биты)

ЧТЕНИЕ КОНТРОЛЛЕРОВ МЫШИ/ТРЕКБОЛА

При движении мыши возникают горизонтальные  и  вертикальные  импульсы.
Восьмибитные  регистры - счетчики  обеспечивают  перемещение  мыши без
вмешательства процессора.

Импульсы мыши  имеют  прямоугольную форму.  Механические колесики мыши
при перемещении выдают два импульса,  находящиеся в противофазе друг к
другу.  (см.  рис 8-2) Направление перемещения определяется отношением
фаз импульсов.

Счетчики увеличиваются, когда мышь перемещается направо  или  вниз  (к
вам) и уменьшаются при перемещении налево или вверх (от вас).

       КВАДРАТУРА МЫШИ

        V  VQ :  D1 D0
        ----------------
         0  0  :  1  0
         0  1  :  0  1
         1  0  :  1  1
         1  1  :  0  0

 Вариант 1: Счет вверх

         ________            ________            ________            ____
        /        \          /        \          /        \          /
V  ____/          \________/          \________/          \________/
             ________            ________            ________
            /        \          /        \          /        \
VQ ________/          \________/          \________/          \__________
         ____        ____        ____        ____        ____        ____
        /    \      /    \      /  1 \ 0    /    \      /    \      /
D0 ____/      \____/      \____/      \____/      \____/      \____/

D1 ________            ________            ________            _________
           \          /      1 \ 0        /        \          /
            \________/          \________/          \________/


 Вариант 2: Счет вниз
         ________            ________            ________            ____
        /        \          /        \          /        \          /
V  ____/          \________/          \________/          \________/

VQ ________            ________            ________            ________
           \          /        \          /        \          /
            \________/          \________/          \________/
D0 ____        ____        ____        ____        ____        ____
       \      /    \      /    \      /    \      /    \      /    \
        \____/      \____/      \____/      \____/      \____/      \____
             ________            ________            ________
            /        \          /        \          /        \
D1 ________/          \________/          \________/          \________

D2     ____
           \
            \____  и т.д.


                      Рис. 8-2: Квадратура мыши

ЧТЕНИЕ СЧЕТЧИКОВ

Чтение  счетчиков  мыши/трекбола  может  быть   осуществлено   чтением
содержимого   регистров   JOY0DAT   и   JOY1DAT,  содержащих  счетчики
соответственно для первого и второго портов.

Эти регистры имеют следующую раскладку бит:

Биты 15-8 Вертикальный счетчик мыши/трекбола
Биты 7-0 Горизонтальный счетчик мыши/трекбола

ОГРАНИЧЕНИЯ СЧЕТЧИКОВ

Значения, содержащиеся в счетчиках зациклены в  интервале  0-255,  что
соответствует  объему одного байта. Если вы хотите использовать мышь в
вышей программе, вам необходимо  считывать  содержание  счетчиков  как
минимум  один  раз  за  время  вертикальной  развертки  и сохранять их
предыдущее значение. Затем, для определения направления перемещения  и
скорости мыши, надо получить разность предыдущего и текущего значений.

Мышь выдает около 200  импульсов  на  каждый  дюйм  движения  в  любом
направлении. Обратный ход луча происходит каждые 1/60 секунды. Если вы
читаете содержимое счетчиков  мыши  один  раз  за  время  вертикальной
развертки  вы  можете  поймать  различие  в  значениях  счетчиков  (от
предыдущих) не более 127. Счетчики  могут  переполниться  только  если
пользователь  перемещает  мышь со скоростью более 38 дюймов в секунду.
Быстрые игры в жанре Action могут  потребовать  более  частого  чтения
регистров мыши для предотвращения переполнения счетчиков.

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

Простейший   путь   вычисления   скорости   мыши - это   использование
восьмибитовой  знаковой  арифметики.  Новое  значение  счетчика  минус
предыдущее  значение  дает  число  импульсов,  пришедших   с   момента
последней  проверки  счетчика. В таблице 8-2 рассмотрен альтернативный
метод. При этом оба счетчика  представляются  в  качестве  беззнаковых
величин  от  0  до  255.  Изменение значения счетчика на 100 импульсов
определяется в любом случае.

        Табл. 8-2: Определение направления перемещения мыши.

        Предыд.    Текущее     Направление
       Значение    Значение

         200          100      Вверх (Влево)
         100          200      Вниз (Вправо)
         200           45      Вниз *
          45          200      Вверх **

ПРИМЕЧАНИЯ к табл. 8-2

* Поскольку 200-45=155 что больше  127,  правильный  результат  должен
быть 255-(200-45)=100, направление вниз.

**  45-200=-155.  Поскольку  абсолютное  значение  -155  больше   127,
правильный результат должен быть 255+(-155)=100, направление вверх

КНОПКИ МЫШИ

Стандартная  амижная  мышь  имеет   2   кнопки.   Однако,  программное
обеспечение поддерживает до 3х кнопок.

-  Левая  кнопка  мыши  может  быть  прочитана  из  регистра   CIAAPRA
($BFE001).  Кнопка  первого порта соответствует 6 биту, кнопка второго
порта - 7 биту. Для  более  подробной  информации  см.  приложение  F.
Логическое  состояние  1  обозначает "переключатель открыт" Логическое
состояние 0 обозначает "переключатель закрыт"

- Кнопка  2  (правая  кнопка  мыши)  присоединена  к  9  выводу  порта
контроллера,   одному  из  контактов,  используемых  пропорциональными
устройствами. Для более полной информации см. "Цифровой ввод/вывод  на
порт контроллера."

-  Кнопка  3,  когда  используется,  присоединена  к  5  выводу  порта
контроллера,   другому   контакту,   используемому   пропорциональными
устройствами.

ЧТЕНИЕ ЦИФРОВОГО ДЖОЙСТИКА

Цифровой джойстик имеет  4  контакта,  отвечающих  за  направление.  С
помощью   рукоятки   может  быть  активизирован  каждый  контакт.  При
диагональном положении рукоятки активизируются два соседних  контакта.
Из  этого  следует,  что  всего  возможно 8 различных направлений. Все
цифровые джойстики имеют как минимум 1 кнопку.

Джойстик  имеет  нормально  разомкнутые  контакты.   При   активизации
контакта  входная  линия  замыкается  на землю, следовательно открытый
контакт считывается как 1, а замкнутый как 0.

Чтение  состояния  джойстика  осложняется  тем,  что  регистры  данных
джойстика и счетчики мыши это одно и то-же.

Регистры джойстика называются JOY0DAT и JOY1DAT

В таблице 8-3 показано как интерпретируются данные при чтении из этих
регистров. 1 обозначает - контакт замкнут.



                     Рис. 8-2-1: Счетчики мыши

      Табл. 8-3: Интерпретация данных JOY0DAT и JOY1DAT

        Бит данных           Интерпретация

           1          Логическое состояние ИСТИНА - вправо

           9          Логическое состояние ИСТИНА - влево

        1 (XOR) 0     Для получения логического состояния направления
        "назад" необходимо вычислить исключающее ИЛИ бит 1 и 0

        9 (XOR) 8     Для получения логического состояния направления
        "вперед" необходимо вычислить исключающее ИЛИ бит 9 и 8

Кнопка "огонь" для портов 0 и 1 может быть прочитана в  битах  6  и  7
регистра  CIAAPRA  ($BFE001).  Нулевое  значение  обозначает замкнутое
состояние

Некоторые, но не все джойстики имеют вторую кнопку. Эта  кнопка  может
быть  использована  при  наличии дублирования ее на клавиатуре. Вторая
кнопка может быть прочитана так-же, как и правая кнопка мыши.

ЦИФРОВОЙ ВВОД/ВЫВОД НА ПОРТ КОНТРОЛЛЕРА

Amiga может читать и интерпретировать большое количество  различных  и
нестандартных  контроллеров. Управляющие линии, находящиеся в регистре
POTGO, расположенном по адресу $DFF034  могут  переопределять  функции
некоторых выводов порта контроллера

Таблица 8-4 - описание битов регистра POTGO. Регистр POTGO ($DFF034) -
только  для  записи,  POTINP  ($DFF016)  -  только для чтения. Регистр
управления управляет 4х-битным двунаправленным VO портом  использующим
те же самые четыре штырька как на ввод, так и на вывод

Таблица 8-4: Регистры POTGO ($DFF034) и POTINP ($DFF016)

   Номер
    бита    Имя              Функция

    15      OUTRY   Вывод для бита 14 (l=вывод)
    14      DATRY   Данные для порта 2, вывод 9
    13      OUTRX   Вывод для бита 12
    12      DATRX   Данные для порта 2, вывод 5
    11      OUTLY   Вывод для бита 10
    10      DATLY   Данные для порта 1, вывод 9 (правая кнопка мыши)
    09      OUTLX   Вывод для бита 8
    08      DATLX   Данные для порта 1, вывод 5 (средняя кнопка мыши)
    07-01   X       Номер ревизии чипа
    00      START   Начальные установки (dump capacitors, start counters)

Вместо того, чтобы использовать линии в качестве переменных входов, вы
можете   использовать   их   как   4х-битный  порт  ввода-вывода.  Это
обеспечивает вас двумя дополнительными  выводами  на  каждом  из  двух
портов контроллера для универсального ВВОДА - ВЫВОДА.

Если вы установите возможность вывода для линии в 1,  Amiga  отключает
схему  управления  потенциометром,  и  конфигурирует  этот контакт для
вывода. Состояние бита данных управляет логическим уровнем на выходном
контакте.  Регистр  должен записываться по адресу POTGO, и читаться из
адреса POTINP. На этих выводах имеются большие  конденсаторы,  поэтому
изменение  логического состояния может происходить со скоростью до 300
микросекунд.

Чтобы использовать для ввода весь регистр, запишите во все биты  POTGO
нули.  С этого времени вы можете считывать текущее состояние пользуясь
только регистром POTINP. Обратите внимание, что  биты  sct  при  вводе
будет  соединяться  с  пропорциональными счетчиками (См. описание бита
START в POTGO ).

Эти  линии  могут  также  использоваться  как  дополнительные  кнопки.
Кнопка-  обычно  открытый переключатель, который замыкается на землю .
Амига  должна  обеспечивать  сопротивление  на  выходе.   Для   этого,
установите  соответствующий контакт на вывод, и установите OUT и DAT в
1. При чтении POTINP будет выдаваться 0 если кнопка нажата и 1 если не
нажата.

Кнопки огонь джойстика могут также быть сконфигурированы  как  выводы.
CIAADDRA    ($BFE201)   содержит   маску   которая   взаимно-однознач.
соответствует регистру чтения данных, CIAAPRA ($BFE001). Установка 1 в
определенной   позиции   делает   соответствующий   бит  выводом.  Для
подробностей см. приложение F

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

К встроенному контроллеру диска  может  подключаться  до  четырех  MFM
устройств. Обычно это двухсторонние, с двойной плотностью, 3.5" (9Omm)
или 5.25" дисководы. Один дисковод 3.5" установлен в корпусе Амиги

Контроллер чрезвычайно гибок. Он может считать в память с помощью  DMA
всю  дорожку  данных  MFM  без  заголовка  с  помощью  одной операции.
Специальные регистры позволяют синхронизировать  CPU  с  определенными
данными,  или  считывать  входной  байт  одновременно  с его чтением с
диска. Контроллер может считывать и записывать  фактически  любые  MFM
диски  с  двойной  плотностью,  включая  амижный  формат  V1.0, IBM PC
(МС-ДОС 5.25"), IBM PC (МС-ДОС 3.5")  и  кроме  того  CP/M/ITM  диски.
Контроллер  имеет  средства для чтения и записи наибольшего количества
дискового пространства методом Group Coded Recording (GCR), с  помощью
которого  возможна  работа  с  дисками  APPLE II. С помощью управления
скоростью  двигателя,  контроллер  может  читать  и  записывать  диски
формата Commodore 1541/1571.

РЕГИСТРЫ, ИСПОЛЬЗУЕМЫЕ ДИСКОВОЙ ПОДСИСТЕМОЙ

Дисковая подсистема использует два порта в чипах CIA 8520 и два  порта
в чипе Paula.

    CIAAPRA ($BFE001) четыре входных бита наличия диска
    CIABPRB ($BFD100) восемь выходных бит для выбора диска, управления
                      и перемещения головки
    ADKCON  ($DFF09E) Управляющие биты (только для записи)
    ADKCONR ($DFF010) Управляющие биты (только для чтения)
    DSKPTH  ($DFF020) Указатель DMA (32 бита)
    DSKLEN  ($DFF024) Длина блока DMA
    DSKBYTR ($DFFOlA) Байт данных диска и чтения статуса
    DSKSYNC ($DFF07E) Поиск синхронизации диска; хранит слово
                      соответствия







                  См рис 8-7, 8-8: ВременнЫе диаграммы


CIAAPRA/CIABPRB - ВЫБОР ДИСКА, УПРАВЛЕНИЕ И СЧИТЫВАНИЕ

В следующей  таблице  приведен  список  регистров  8520,  используемых
дисковой  подсистемой.  Биты,  помеченные  как  "PA"  - входные биты в
CIAAPRA ($BFE001). Биты, помеченные как "PB" - выходные биты в CIAAPRB
($BFD100). Более подробную информацию об операциях с чипами 8520 можно
найти в приложении F.

Табл. 8-5: Дисковая подсистема.

Бит   Имя         Функция

PA5   DSKRDY *    Готовность  диска  (активный  уровень   -   низкий).
                  Дисковод  будет  выдавать  активный уровень сигнала,
                  когда двигатель работает  с  номинальной  скоростью.
                  Этот   сигнал   действителен   только  тогда,  когда
                  двигатель  ВКЛЮЧЕН,  в  другое   время   тут   может
                  содержаться иная информация.

PA4   DSKTRACK0*  Обнаружена нулевая дорожка. Дисковод будет  выдавать
                  низкий  уровень  сигнала,  когда  головки  дисковода
                  располагаются  на  нулевой  дорожке.  Программа   не
                  должна  пытаться  делать  шаг  на  наружную  сторону
                  диска,  когда  этот  сигнал  находится  в   активном
                  состоянии.  Некоторые  дисководы  будут отказываться
                  шагать, другие будут пытаться сделать шаг, что может
                  вызвать  ошибку  выравнивания.  Все  новые дисководы
                  должны отказываться шагать в этом направлении

PA3   DSKPROT*    Диск защищен от записи (активный уровень - низкий)

PA2   DSKCHANGE*  Диск удален из дисковода.  Сигнал  принимает  низкий
                  уровень  всякий раз, когда диск удаляется и остается
                  на низком уровне, пока диск не вставляется обратно и
                  пока не выдается импульс шага.

PB7   DSKMOTOR*   Управление  двигателем  диска  (активный  уровень  -
                  низкий).  Для Амиги этот сигнал нестандартен. Каждый
                  дисковод будет защелкивать сигнал двигателя во время
                  включения  сигнала выбора. Двигатель дисковода будет
                  оставаться в этом состоянии до тех пор, пока  сигнал
                  выбора  не придет еще раз. DSKMOTOR* также управляет
                  световым индикатором на передней стороне  дисковода.
                  Все  программы,  которые  выбирают  дисководы должны
                  устанавливать сигнал двигателя перед выбором  любого
                  дисковода.   Дисковод   будет   "помнить"  состояние
                  двигателя даже когда не выбран. После сброса системы
                  все    двигатели   дисководов   выключаются.   После
                  включения  двигателя,  программа  должна  выждать  в
                  течение  половины  секунды  (500ms),  или  дождаться
                  сигнала низкого уровня на линии DSKRDY*


PB6    DSKSEL3*   Выбор дисковода 3 (активный уровень  -  низкий)

PB5    DSKSEL2*   Выбор дисковода 2 (активный уровень  -  низкий)

PB4    DSKSEL1*   Выбор дисковода 1 (активный уровень  -  низкий)

PB3    DSKSEL0*   Выбор дисковода 0 (встроенный) (активный  уровень  -
                  низкий)

PB2    DSKSIDE    Определяет головку дисковода для использования  Нуль
                  обозначает  верхнюю  головку.  Перед  началом записи
                  DSKSIDE должен находится в стабильном состоянии  100
                  микросекунд.  Для переключения DSKSIDE, после записи
                  должно пройти как минимум 1.3 миллисекунды

PB1    DSKDIREC   Определяет направление шага головки. Нуль обозначает
                  направление   к   центру   диска.   Нулевая  дорожка
                  располагается на наружной стороне диска.  Эта  линия
                  должна  устанавливаться перед выдачей импульса шага,
                  отдельной записью в регистр.

PB0    DSKSTEP*   Перемещение головки диска. Этот сигнал должен всегда
                  вызываться   следующим   образом:  высокий  уровень,
                  низкий уровень на  очень  короткое  время,  и  снова
                  высокий уровень.

                  Дисководы используемые на Амиге гарантируют  переход
                  на  следующую  дорожку  за 3 миллисекунды. Некоторые
                  дисководы поддерживают более  высокую  скорость,  но
                  некоторые  будут  выдавать  ошибку.  Для  выполнения
                  задержки   неприемлемо   использование   циклов.   В
                  приложении  F  можно  найти более правильное решение
                  этой проблемы.

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

FLAG  DSKINDEX*

                  Индексный импульс  диска  ($BFDD00,  бит  4).  Может
                  Использоваться для создания прерываний 6 уровня. Для
                  более подробной информации см. Приложение F

УПРАВЛЕНИЕ ДИСКОВЫМ DMA

Обычно дисковые операции осуществляются под управлением канала прямого
доступа (DMA). DMA управляется четырьмя параметрами:

- Указателем на область источника или приемника данных
- Длинной области данных
- Направлением трансфера (чтение/запись)
- Включением и выключением DMA

DSKPTH - УКАЗАТЕЛЬ НА ДАННЫЕ

Вы задаете  32х  битный  адрес,  из  которого  или  в  который  должны
перемещаться  данные.  Младший  бит  адреса должен быть равен нулю, и,
кроме того, буфер должен располагаться в ЧИП памяти.  Значение  должно
записываться  в  виде  одиночного  длинного  слова  по  адресу $DFF020
(регистр DSKPTH)

DSKLEN - ДЛИНА, НАПРАВЛЕНИЕ, ВКЛЮЧЕНИЕ DMA

Все управляющие биты собраны в один регистр, называемый DSKLEN (только
для записи)

        Табл. 8-6: Регистр DSKLEN ($DFF024)

      Номер
       Бита     Имя           Назначение

       15       DMAEN     Включение вторичного дискового DMA
       14       WRITE     Запись диска (Если 1, то RAM)
       13-0     LENGTH    Число слов для операции

Для запуска DMA  требуется  специальная  последовательность  действий,
благодаря  чему  предотвращается  случайная  запись  на  диск.  Короче
говоря, для того, чтобы фактически запускать DMA диска,  бит  DMAEN  в
регистре   DSKLEN   должен   включаться  дважды.  Как  образец,  можно
придерживаться следующей последовательности действий:

1. Включите DMA диска в регистре DMACON (Для подробностей см. главу 7)
2. Запишите $4000 в DSKLEN, это выключит DMA диска
3. Установите желаемое значение в регистре DSKLEN.
4. Запишите это значение в регистр DSKLEN еще раз. Это запустит DMA.
5. После завершения работы  DMA,  снова  установите  $4000  в  регистр
DSKLEN. Это предотвратит случайную запись на диск.

Во время перемещения каждого слова счетчик  длины  уменьшается.  После
того,   как   передача  окончена,  увеличивается  значение  указателя.
Указатель после этого указывает на следующее слово данных  для  записи
или   чтения.  Когда  счетчик  длины  становится  0,  передача  данных
заканчивается.

Рекомендуемый метод чтения с  диска  состoит  в  том,  что  необходимо
считать  всю  дорожку в буфер, а затем найти сектор, который вы хотите
использовать.  Использование  регистра   DSKSYNC   (описанного   ниже)
гарантирует  выравнивание  данных  по  словам.  Таким образом чтение с
диска происходит только один раз для всей дорожки. В  высокоскоростном
загрузчике,  шаг  головки  может  происходить  во  время обработки или
проверки контрольной суммы предыдущей дорожки. При использовании этого
метода  нет  никаких  критических по времени моментов в чтении данных,
что позволяет выполняться другим высокоприоритетным подсистемам (таким
как графика или звук)

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

В железе имеется ошибка, из-за которой  теряются  последние  три  бита
данных  посланных на диск. Также, может не приходить последнее слово в
при операции чтения с помощью DMA  (то-есть  может  читаться  на  одно
слово меньше, чем вы запросили).

DSKBYTR - БАЙТ ДАННЫХ ДИСКА И ЧТЕНИЕ СОСТОЯНИЯ (ТОЛЬКО ЧТЕНИЕ)

Этот регистр  -  буфер  данных  дискового  микропроцессора.  В  режиме
чтения,  данные  с диска помещается в этот регистр байт за байтом. Как
только байт помещен в регистр,  устанавливается  бит  DSKBYT.  Очистка
бита DSKBYT происходит при чтении регистра DSKBYTR.

DSKBYTR может использоваться для синхронизации процессора  и  вращения
диска перед выдачей команд чтения или записи под управлением DMA.

Табл. 8-7: Регистр DSKBYTR.

Номер
бита      Имя          Функция

15        DSKBYT      Когда  установлен,  сигнализирует  о   том,  что
                      регистр содержит непрочитанные данные (очищается
                      чтением)

14        DMAON       Указывает, что DMA  действительно  доступно. Все
                      биты включения DMA  должны  быть  включены, т.е.
                      бит DMAEN в регистре DSKLEN и биты DSKEN и DMAEN
                      в регистре DMACON.

13        DISKWRITE   Допускается использование бита записи (в DSKLEN)

12        WORDEQUAL   Указывает,  что   регистр   DISKSYNC   равняется
                      входному дисковому  потоку.  Этот  бит   истинен
                      только тогда, когда входной поток  соответствует
                      регистру синхронизации (две микросекунды ).

11-8                  В  данный момент не используется,  но зависит от
                      данных чтения

7-0       DATA        Данные


ADKCON И ADKCONR - РЕГИСТРЫ УПРАВЛЕНИЯ ЗВУКОМ И ДИСКОМ

Этот регистр имеет 2 адреса: ADKON - только для  записи  и  ADKCONR  -
только для чтения. Не все биты выделены диску. Бит 15 этого регистра -
бит SET/CLR, дающий возможность независимой работы с битами. Если  бит
15  установлен  во  время  записи, то любые включенные биты в позициях
0-14  будут  включать  соответствующий  бит.  Если  бит  15  -   нуль,
соответствующие биты будут выключаться.

Табл. 8-8: Регистры ADKCON и ADKCONR.

Номер
бита      Имя          Функция

15      SET/CLR    Управляющий   бит.   Позволяет   устанавливать  или
                   очищать  отдельные  биты  без  влияния на остальное
                   содержимое регистра

                   Если бит 15 - 1, биты устанавливаются
                   Если бит 15 - 0, биты сбрасываются

14      PRECOMP1   MSB спецификатора прекомпенсации
13      PRECOMP0   LSB спецификатора прекомпенсации

                   Значение 00 не выбирает ничего
                   Значение 01 выбирает 140 ns.
                   Значение 10 выбирает 280 ns.
                   Значение 11 выбирает 560 ns.

12      MFMPREC    Значение 0 выбирает прекомпенсацию GCR.
                   Значение 1 выбирает прекомпенсацию MFM.

10      WORDSYNC   Значение 1 включает  синхронизирование и  запускает
                   DMA  на  чтение  слова  с  диска.  Слово на котором
                   происходит  синхронизация  должно  быть записано по
                   адресу DSKSYNC ($DFF07E).

9       MSBSYNC    Значение 1 включает синхронизацию по старшему  биту
                   входного потока (обычно используется для GCR.

8       FAST       Значение  1  выбирает  две   микросекунды   на  бит
                   (обычно MFM). Данные должны быть в формате MFM raw.
                   0 Выбирает четыре микросекунды на бит (обычно GCR).

Raw  данные  для  MFM  должны  передаваться  контроллеру  в  следующем
формате:

        1 ---> 01
        0 ---> 10;если после 0
        0 ---> 00;если после 1

Таким образом, размер данных увеличивается в 2 раза.

При умном подходе для кодирования и декодирования MFM данных  возможно
использование блиттера.

В  общем  виде,  запись  на  GCR,  каждый  байт  данных  всегда  имеет
включенный старший бит. MSBSYNC, когда 1, заставляет контроллер искать
этот синхро-бит в каждом байте. При чтении GCR диска, программа должна
использовать   таблицу  перекодировки,  называемую  nybbleizer,  чтобы
гарантировать что данные записанные на диск  не  имеет  слишком  много
последовательных 1's или 0's.

DSKSYNC -  ВХОДНОЙ  СИНХРОНИЗАТОР

Регистр DSKSYNC используется для синхронизации  входного  потока.  Это
очень  полезно  при чтении дисков. Если бит WORDSYNC в ADKCON включен,
данные не перемещаются до тех пор, пока во входном потоке  не  найдено
слово, которое соответствует слову в регистре DSKSYNC. При чтении, DMA
будет запускаться со следующим словом с диска. Во время чтения диска с
помощью  DMA,  контроллер  будет  синхронизироваться каждый раз, когда
найдено  соответствующее  слово.  Обычно  в  DSKSYNC   устанавливается
'волшебное' для MFM значение метки- $4489.

Кроме того, бит DSKSYNC в INTREQ устанавливается когда  входной  поток
соответствует  регистру  DSKSYNC.  Бит DSKSYNC в INTREQ независящий от
WORDSYNC включен.

ДИСКОВЫЕ ПРЕРЫВАНИЯ

Контроллер диска может выдавать три вида прерываний:

o DSKSYNC (уровень 5, INTREQ бит 12)  -  входной  поток  соответствует
регистру DSKSYNC

o DSKBLK (уровень 1, INTREQ бит 1) - DMA диска завершил работу

o INDEX (уровень 6, Флаг вывода 8520) - индекс переключен

Прерывания объясняются далее в разделе "Длина, Направление,  Включение
DMA". Для подробностей, касающихся прерываний см. главу 7, "Управление
чипсетом". Для подробностей, касающихся 8520 см. Приложение F

КЛАВИАТУРА

Клавиатура подключена к системе с помощью последовательного сдвигового
регистра  на одном из чипов 8520 CIA. Данные клавиатуры присоединены к
выводу SP, таймер клавиатуры присоединен к выводу  CNT.  Приложение  H
содержит полное описание интерфейса.

КАК ПРИНИМАЮТСЯ ДАННЫЕ ОТ КЛАВИАТУРЫ

Линия CNT используется как таймер для клавиатуры. При  каждом  проходе
этой  линии,  синхронизируется  один бит данных клавиатуры. Клавиатура
посылает этот импульс когда информационный  бит  принимает  устойчивое
состояния  на  линии  SP.  Активный  уровень  этого импульса - низкий.
Растущий край импульса синхронизирует данные.

После того, как  байт  данных  получен  от  клавиатуры,  на  процессор
выдается  прерывание  8520. Перед дальнейшей передачей клавиатура ждет
ответного  сигнала  от  системы.  Этот  сигнал  выдается   процессором
переводом  линии  SP  на  низкий  уровень, а затем на высокий уровень.
Несмотря на то, что некоторые клавиатуры могут  обнаруживать  ответный
импульс  длительностью  1  микросекунду,  для того, чтобы работали все
модели амижных клавиатур, импульс  должен  быть  по  крайней  мере  85
микросекунд.

Если  произошло  нажатие  клавиши  до  того,  как  предыдущее  принято
процессором,  микропроцессор  клавиатуры  задерживает клавиши в буфере
клавиатуры, объемом 10 кодов клавиш.

ТИПЫ ДАННЫХ КЛАВИАТУРЫ

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

Ниже приведен список шестнадцатеричных значений кодов клавиш.  Нажатию
клавиши  соответствует  значение,  указанное здесь. Отпусканию клавиши
соответствует это-же значение плюс $80.  Рисунок  клавиатуры  в  конце
этого  раздела  показывает  соответствие  позиций  клавиш, описанных в
параграфах ниже.

Обратите  Внимание  -  коды  клавиш  обеспечивают  только  позиционную
информацию. Надписи на клавишах могут изменяться от страны к стране.

КОДЫ КЛАВИШ 00-3F HEX

Эти коды клавиш на основной части клавиатуры. Символы,  написанные  на
клавишах   различны  для  каждой  страны;  не  все  страны  используют
расположение клавиш QWERTY. Эти  коды  клавиш  лучше  всего  описывать
позиционно,  как  показано  на  Рисунке  8-9  и  Рисунке  8-10 в конце
раздела. Интернациональные клавиатуры имеют еще две клавиши. Это  $30,
рядом с LeftShift, и $2B, рядом с Enter.

КОДЫ КЛАВИШ --> 40-5F HEX (ОБЩИЕ ДЛЯ ВСЕХ КЛАВИАТУР)

     40     Space
     41     Backspace
     42     Tab
     43     "ENTER" на цифровой клавиатуре
     44     Return
     45     Escape
     46     Delete
     4C     Cursor up
     4D     Cursor down
     4E     Cursor right
     4F     Cursor left
     50-59  Функциональные клавиши F1-F10
     SF     Help


КОДЫ КЛАВИШ --> 60-67 HEX (КОДЫ КЛАВИШ СПЕЦИФИКАТОРОВ)

     60     Left shift
     61     Right shift
     62     Caps lock
     63     Control
     64     Left ALT
     65     Right ALT
     66     Left Amiga (или клавиша Commodore)
     67     Right Amiga

F0-FF HEX

Эти коды клавиш используются  для  связи  клавиатуры  и  68000,  и  не
ассоциируются с нажатием клавиш. Они не имеют флага перехода состояния
клавиши, и, следовательно описываются полными 8 битными кодами

78  Resetwarning.  Нажаты  CTRL-AMIGA-AMIGA.  Клавиатура  будет  ждать
максимум  10 секунд перед сбросом машины. (Доступно не на всех моделях
клавиатур)

F9 Последний переданный код - неправилен. Следующий код будет повтором

FA Переполнен буфер клавиатуры

FC Ошибка автотеста клавиатуры. Также будет мигать лампочка  caps-lock
для  указания  источника  ошибки. Один раз при отказе ROM , дважды при
отказе RAM и три раз если отказался функционировать таймер сторожа.

FD Инициализация потока клавиш (для нажатых  или  увязших  клавиш  при
включении питания)

FE Обрыв потока клавиш при включении питания

Эти коды клавиш обычно фильтруются драйверами клавиатуры.

ОГРАНИЧЕНИЯ КЛАВИАТУРЫ

Клавиатура Амиги - матрица строк и столбцов с переключателем клавиш на
каждом  пересечении  (диаграмму  матрицы  см.  в  приложении H). Из-за
этого, существует явление, называемое "фантомные  нажатия  клавиш."  В
общем  это  не  проблема  для  набора  текста, но игры могут требовать
одновременного нажатия нескольких клавиш. Изучая  матрицу,  вы  можете
определить,  какие клавиши могут сталкиваться друг с другом, и какие -
всегда безопасны.

Фантомные нажатия клавиши  происходят  когда  одновременно  нажимаются
определенные  комбинации  клавиш. Например, нажмите одновременно "A" и
"S". Обратите внимание, что "A" и "S" передаются нормально.  А  теперь
нажмите   "Z".   На   оригинальной   клавиатуре   Амиги   1000   будут
генерироваться "Z" и  фантом  "X"  Начиная  с  Амиги  500,  контроллер
усовершенствовался  и  теперь  способен  исключать  простые  фантомные
ситуации подобно  описанной  выше;  вместо  того,  чтобы  генерировать
фантом,  контроллер будет прекращать посылку символов до тех пор, пока
матрица  не  очистится  (отпускание  "A"  или  "S"  очищает  матрицу).
Некоторые  высококачественные  Амижные  клавиатуры  могут обнаруживать
одновременное нажатие любого количества клавиш .

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

ПРИМЕЧАНИЕ

Семь  клавиш  не  являются  частью  матрицы,  и   никогда   не   будут
способствовать  производству  фантомов.  Эти клавиши: CIRL, два SHIFT,
две Amiga, и две ALT.



  РИСУНОК 8-9: Клавиатура Амиги 1000, Шестнадцатеричные коды клавиш



  РИСУНОК 8-10: Клавиатура Амиги 500/2000,  Шестнадцатеричные  коды
  клавиш

ПАРАЛЛЕЛЬНЫЙ ИНТЕРФЕЙС ВВОДА -ВЫВОДА

Универсальный   двунаправленный   параллельный   интерфейс   -   25-ти
штырьковый разъем на задней стороне компьютера. Обычно он используется
для присоединения параллельного принтера.

Для каждого байта данных записанного в  регистр  параллельного  порта,
железо    автоматически    генерирует    сигнал   готовности.   Сигнал
подтверждения  от  parallel  device  подключается  к   прерыванию.   В
приложениях   E   и   F  можно  найти  распайки  разъема  и  временные
характеристики

ПОСЛЕДОВАТЕЛЬНЫЙ ИНТЕРФЕЙС

25-ти  штырьковый  разъем  на  обратной  стороне  компьютера  является
универсальным последовательным интерфейсом. Он может управлять широким
диапазоном различных периферийных устройств, включая внешний модем или
последовательный принтер.

В приложении E можно найти распайку разъема.

ВВЕДЕНИЕ В ПОСЛЕДОВАТЕЛЬНУЮ СХЕМУ

Чип  Paula  содержит  Универсальный  Асинхронный  ПРИЕМНИК/ПЕРЕДАТЧИК,
сокращенно UART. Этот UART программируется на любую скорость от 110 до
более 1,000,000 битов в секунду. Он может получать или посылать данные
длиной восемь или девять бит.

Реализация UART обеспечивает  высокую  степень  управляемости  софтом.
UART  способен  обнаруживать  ошибку  переполнения, которая происходит
когда некоторая другая система посылает данные быстрее чем  принимаете
их  через  регистр  получения  данных.  Существуют  биты  состояния  и
прерывания, сигнализирующие 'буфер полный' при приеме и 'буфер пустой'
при   передаче.  Есть  еще  дополнительный  бит  состояния  -  который
указывает "все биты посланы". Все это обсуждаются ниже.

УСТАНОВКА СКОРОСТИ В БОДАХ

Скорость передачи (скорость в бодах) управляется содержимым  регистра,
называющегося  SERPER.  Биты  14-0 регистра SERPER - делитель скорости
пересылки данных в бодах.

Выбор времени выполнен на основе "системных часов", которые тикают  со
скоростью 279.36ns на машинах с NTSC и 281.94ns на машинах с PAL. Если
в SERPER установлено значение N, тогда проходит  N  +  1  тиков  между
выборкой  состояния входного разъема (для приема) или между передачами
битов   на   вывод   (для    передачи).    Таким    образом    SERPER=
(3,579,545/baud)-1.  На  машине  с  PAL,  SERPER=  (3,546,895/baud)-1.
Например, значение SERPER, соответствующее 9600 бод на машине с NTSC -
(3,579,545/9600)-1=371.

С кабелем приемлемой длины, максимально надежная скорость находится  в
интервале   150,000-250,000  бод.  Максимальная  скорость  зависит  от
машины. При такой высокой скорости не используются  непроизводительные
затраты  на  прерывания.  Конец  получения  данных должен быть в цикле
чтения. Так может быть сформирована недорогая сеть

УСТАНОВКА РЕЖИМА ПРИЕМА

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

Режим приема устанавливается с помощью бита 15 регистра SERPER (только
для  записи).  Бит  15  равен  1 если вы выбрали девять информационных
разрядов для  данных,  и  0  если  вы  выбрали  восемь  информационных
разрядов.  Нормальное  состояние этого бита для большинства прикладных
программ - 0.

СОДЕРЖИМОЕ РЕГИСТРА ПРИЕМА ДАННЫХ

Регистр  последовательного  ввода  данных  имеет  размер  16  бит.  Он
содержит 8 или 9 бит данных и биты состояния.

Данные  получаются  по  одному  биту  и  перемещаются  во   внутренний
сдвиговый  регистр,  переводящий  данный  в  параллельную форму. Когда
истекает время,  соответствующее  времени  передачи  бита,  содержимое
этого  регистра  перемещается в регистр чтения последовательных данных
SERDATR, описанный в Таблице  8-9,  и  вам  сообщается,  что  для  вас
имеются готовые данные.

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

Таблица 8-9 показывает назначения бит регистра SERDATR.

Таблица 8-9: Регистры SERDATR/ADKCON

                         SERDATR
 Номер
 бита   Имя                       Функция

  15    OVRUN     бит OVERRUN
                  (Зеркало  -  также  появляется  в  регистре  запроса
                  прерывания.)  Указывает  что  другой байт данных был
                  получен  прежде,  чем  предыдущий  байт  был  принят
                  процессором.  Чтобы  предотвращать  это,  необходимо
                  сбрасывать INTF_RBF (бит 11, буфер приема  заполнен)
                  в INTREQ.

  14    RBF       READ BUFFER FULL

                  (Зеркало  -  также  появляется  в  регистре  запроса
                  прерывания.)  Когда  этот  бит  - 1, имеются данные,
                  готовые  для  приема   процессором.   После   чтения
                  содержания регистра данных, вы должны сбрасывать бит
                  INTF_RBF в INTREQ чтобы предотвращать overrun.

  13    TBE       TRANSMIT BUFFER EMPTY

                  (Не  зеркало  прерывания.  Происходит  когда   буфер
                  становится  пустым.)  Когда бит 14 - 1, все данные в
                  регистре  выходных  данных  SERDAT  переместились  в
                  последовательный  сдвиговый  регистр вывода, так что
                  SERDAT готов принять  другое  слово  на  вывод.  Бит
                  также установлен, когда буфер пуст.
                  Этот  бит  обычно  используется  в  режиме   полного
                  дуплекса.

  12    TSRE      TRANSMIT SHIFT REGISTER EMPTY

                  Когда  этот  бит  -  1,  сдвиговый  регистр   вывода
                  завершил  задачу, все данные передались, и регистр -
                  теперь пустой. Если вы останавливаете процесс записи
                  данных в регистр вывода SERDAT, тогда этот бит будет
                  содержать 1 после того,  как  слово,  находящееся  в
                  данный   момент   в   сдвиговом   регистре  и  слово
                  находящееся в SERDAT передались.
                  Этот бит обычно используется в режиме полудуплекса

  11    RXD       Прямое чтение контакта RXD на чипе Paula

  10              Не используется в этой версии.

   9    STP       Стоповый  Бит, если  для  получения  используется  9
                  информационных разрядов.

   8    STP       Стоповый  Бит, если  для  получения  используется  8
                  информационных разрядов.
                                         ИЛИ
        DB 8      9-ый  информационный  разряд  если   для   получения
                  используется 9 бит.

7-0 DB7-DB0       Младшие 8 информационных разрядов полученных данных.
                  Данные  ИСТИННЫ  (считываемые данные расположены так
                  же как и ожидаемые данные).

                    ADKCON

  15 SET/CLR      Позволяет установку или очистку отдельных бит.

                  Если бит 15 - 1 заданные биты устанавливаются.
                  Если бит 15 - 0 заданные биты очищаются.


  11 UARTBRK      Устанавливает уровень сигнала на контакты передачи 0


КАК ПЕРЕДАЮТСЯ ВЫХОДНЫЕ ДАННЫЕ

Вы  посылаете  данные  на  передающие  линии,   используя   запись   в
последовательный регистр вывода данных SERDAT. Этот регистр только для
записи.

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

В начале операции, эти данные перемещается  из  SERDAT  во  встроенный
последовательный сдвиговый регистр. Когда передача на последовательный
сдвиговый регистр завершится, SERDAT  может  принимать  новые  данные;
прерывание TBE сообщает вам об этом

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

SERDAT  -  16-ти  битный  регистр,  позволяющий   управлять   форматом
передаваемых  данных.  Чтобы  сформировать типичную последовательность
данных: один стартовый бит, восемь  информационных  разрядов,  и  один
стоповый  бит,  запишите  в SERDAT то, что показано на Рисунках 8-11 и
8-12.


    15          9 8 7                       0
   -------------------------------------------
    0 0 0 0 0 0 0 1 |<----8 бит данных----->|
   -------------------------------------------
                   -------------------------->
               Данные сдвигаются в эту сторону

      Рисунок 8-11: Начало работы SERDAT и Сдвигового Регистра


    15          9 8 7                       0
   -------------------------------------------
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -------->| 1 |
   -------------------------------------------         1 бит
                      Все нули после последнего сдвига

      Рисунок 8-12: Окончание работы SERDAT и Сдвигового Регистра

Регистр  останавливает  сдвиги  и  сигнализирует  "сдвиговый   регистр
пустой"  (TSRE)  когда  последний выдвинутый из регистра бит = 1 и все
оставшиеся биты сдвигового регистра - нули. Когда  загружается  новое,
отличное от нуля содержимое, снова начинаются сдвиги .

ОПРЕДЕЛЕНИЕ СОДЕРЖИМОГО РЕГИСТРА

Данные  для  передачи  помещаются  в  регистр  вывода  SERDAT.   Кроме
информационных разрядов, 1 бит должен добавляться в качестве стопового
бита. Обычно, посылаются или один или два стоповых бита

Передача стартового бита не зависит от содержания этого регистра. Один
стартовый  бит  автоматически  генерируется  перед  отправкой  первого
информационного разряда (бита 0)

Запись в этот регистр начинает передачу данных. Если регистр  содержит
нули, передача данных не производится

РАЗЪЕМ ВИДЕОВЫВОДА

Все Амиги имеют сзади 23х контактный разъем. Он содержит видео  выводы
и  входы для внешнего генлока. На разъеме доступно два раздельных типа
RGB видео выводов:

* RGB Мониторы ("аналоговые RGB"). Требуют четыре вывода; Красный (R),
Зеленый  (G),  Синий  (B), и Sync (S). Они могут генерировать до 4,096
различных цветов одновременно.

* Цифровые RGB Мониторы. Имеют выводы: Красный (R), Зеленый (G), Синий
(B),  Половинная  интенсивность  (I),  и Sync (S). Все уровни вывода -
логические  (0  или  1).  На  некоторых  мониторах  получается  до  15
возможных  комбинаций  цветов, причем значения 0000 и 0001 дают один и
тот-же цвет (Половина интенсивности  без  цвета  то-же  самое,  что  и
полная   интенсивность   -   отсутствие   цвета).  Некоторые  мониторы
отображают 16 цветов в 16 произвольных цветов.

Обратите Внимание что сигналы 'sync' на выходе  Амиги  небуферизованы.
Для  использования  любого  устройства,  которое дает тяжелую загрузку
выводов 'sync', требуются внешние буфера

АМИГА 500 и 2000 имеют одноцветное видео гнездо  для  использования  с
недорогими   одноцветными  мониторами.  Цвета  АМИГИ  oбъединяются  по
интенсивности, основываясь на следующей таблице:

                Красный Зеленый Синий
                   30%    60%    10%

АМИГА 1000 имеет гнездо RF модулятора. Это адаптер, который  позволяет
Амиге  использовать  телевизор.  Stereo  звук доступен на гнезде, но в
общем будет oбъединяться в моно звук для телевизора

2000 АМИГИ имеет специальный "видео слот" который содержит еще  больше
сигналов,  чем  RGB  разъем:  все  сигналы RGB порта, незакодированное
цифровое видео, световое  перо,  питание,  звук,  цвет,  переключатель
пикселей, sync, сигналы синхронизации, и т.д..

Конец.

 


НОМЕ