THE COMPLETE AMIGA HARDWARE
REFERENCE MANUAL

                               ПРИЛОЖЕНИЕ F

                       COMPLEX INTERFACE ADAPTERS

Это приложение содержит информацию об адапторах 8520 CIA.


ЧИПЫ 8520 CIA

У каждой Амиги есть два чипа 8520 CIA - CIAA и CIAB. Каждый чип  имеет
16 битный порт универсального ввода-вывода, последовательный сдвиговый
регистр, три таймера, импульсный  вывод.  В  Амиге  возможности  чипов
используются различными задачами.

Карта памяти CIAA
-----------------
Адрес      Имя                Биты данных
байта    Регистра    7     6     5    4    3     2     1    0
------------------------------------------------------------------
BFE001    pra      /FIR1 /FIR0 /RDY /TK0 /WPRO /CHNG /LED OVL
BFE101    prb      Параллельный порт
BFE201    ddra     Направление  для  порта A (BFE001);1 вывод (установ
                   0x03)
BFE301    ddrb     Направление для  порта  B  (BFE101); 1 вывод (может
                   быть ввод/вывод)
BFE401    talo     Младший байт таймера А порта CIAA (.715909 Mhz NTSC
                   .709379 Mhz PAL)
BFE501    tahi     Старший байт таймера А порта CIAA
BFE601    tblo     Младший байт таймера B порта CIAA (.715909 Mhz NTSC
                   .709379 Mhz PAL)
BFE701    tbhi     Старший байт таймера B порта CIAA
BFE801    todlo    50/60 Hz счетчик событий биты 7-0 (VSync или тик по
                   строкам)
BFE901    todmid   50/60 Hz счетчик событий биты 15-8
BFEA01    todhi    50/60 Hz счетчик событий биты 23-16
BFEB01             не используется
BFEC01    sdr      CIAA последовательный регистр данных (присоединен к
                   клавиатуре)
BFED01    icr      CIAA регистр управления прерываниями
BFEE01    cra      CIAA управляющий регистр A
BFEF01    crb      CIAA управляющий регистр B

Примечание: CIAA может генерировать прерывание INT2.

Карта памяти CIAB
-----------------

Адрес      Имя                Биты данных
байта    Регистра    7     6     5    4    3     2     1    0
------------------------------------------------------------------
BFD000    pra      /DTR /RTS  /CD   /CTS  /DSR  SEL   POUT BUSY
BFD100    prb      /MTR /SEL3 /SEL2 /SEL1 /SEL0 /SIDE DIR  /STEP
BFD200    ddra     Направление  для  порта  A (BFD000);1 - вывод
                   (установ 0xFF)
BFD300    ddrb     Направление  для  порта  B (BFD100);1 - вывод
                   (установ 0xFF)
BFD400    talo     Младший байт таймера А порта CIAB (.715909 Mhz NTSC
                   .709379 Mhz PAL)
BFD500    tahi     Старший байт таймера А порта CIAB
BFD600    tblo     Младший байт таймера B порта CIAB (.715909 Mhz NTSC
                   .709379 Mhz PAL)
BFD700    tbhi     Старший байт таймера B порта CIAB
BFD800    todlo    Счетчик событий гориз. синхронизации, биты 7-0
BFD900    todmid   Счетчик событий гориз. синхронизации, биты  15-8
BFDA00    todhi    Счетчик событий гориз. синхронизации, биты  23-16
BFDB00             не используется
BFDC00    dr       CIAB последовательный регистр данных (не
                   используется)
BFDD00    icr      CIAB регистр управления прерываниями
BFDE00    cra      CIAB управляющий регистр A
BFDF00    crb      CIAB управляющий регистр B

Примечание: CIAB может генерировать прерывание INT6.

КАРТА РЕГИСТРОВ

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

                   Register
RS3 R52 RS1 RS0 (hex) NAME      MEANING
------------------------------------------------------------
0   0   0   0   0     pra       Периферийный регистр данных A
0   0   0   1   1     prb       Периферийный регистр данных B
0   0   1   0   2     ddra      Регистр направления данных A
0   0   1   1   3     ddrb      Регистр направления B
0   1   0   0   4     talo      Таймер A младший регистр
0   1   0   1   5     tahi      Таймер A старший регистр
0   1   1   0   6     tblo      Таймер B младший регистр
0   1   1   1   7     tbhi      Таймер B старший регистр
1   0   0   0   8     todlow    Событие LSB
1   0   0   1   9     todmid    Событие 8-15
1   0   1   D   A     todhi     Событие MSB
1   0   1   1   B               Не присоединен
1   1   0   0   C     sdr       Последовательный регистр данных
1   1   0   1   D     icr       Регистр управления прерываниями
1   1   1   0   E     cra       Управляющий регистр A
I   1   1   1   F     crb       Управляющий регистр B

ПРИМЕЧАНИЕ

Ядро операционной системы уже использует несколько таймеров 8520

CIAA, таймер A - клавиатура (непрерывно используется  для  обнаружения
                 нажатий на клавиши). НЕ ДОСТУПЕН

CIAA, таймер B - Виртуальное таймер-устройство постоянно  используется
                 Exec для переключения задач, прерываний и определения
                 времени.

CIAA, TOD -     Таймер на 50/60Hz,  используемый  timer.device.  A1000
                использует   перепады   питающего   напряжения.   A500
                использует  вертикальную  синхронизацию.  A2000  имеет
                переключатель для выбора устройства.

CIAB, таймер A - не используется

CIAB, таймер B - не используется

CIAB, TOD -     Копия положения видео луча для Graphics.library.  Этот
                таймер    работает    со    скоростью   горизонтальной
                синхронизации,  и   используется   для   синхронизации
                графики с видео лучем.

ФУНКЦИОНАЛЬНОЕ ОПИСАНИЕ РЕГИСТРОВ

ПОРТЫ ВВОДА-ВЫВОДА (PRA, PRB, DDRA, DDRB)

Каждый порт A и B  состоит  из  периферийного  8-ми  битного  регистра
данных (PR) и 8-ми битного регистра направления данных (DDR). Если бит
в  регистре  DDR  установлен,  соответствующий  бит  в   регистре   PR
используется   как   вывод.   Если   бит   в   регистре  DDR  сброшен,
соответствующий бит регистра PR используется как вход.

При считывании регистра PR, считывается фактическое текущее  состояние
контактов   ВВОДА-ВЫВОДА   (PA0-PA7,   PB0-PB7,   независимо  от  того
установлены они как входы или как выводы).

Порты A и B могут работать с устройствами пассивного напряжения также,
как и активного, обеспечивая совместимость с ТТЛ и CMOS.

Кроме нормальных операций ввода-вывода, порты PB6 и PB7 имеют  функции
таймера.

ПОДТВЕРЖДЕНИЕ СВЯЗИ

Подтверждение связи  происходит  при  передачах  данных,  использующих
вывод  PC  и вход FLAG. PC переходит на низкий уровень через три цикла
после  доступа  в  порт  B.  Этот  сигнал  может  использоваться   для
индикации-  "данные готовы" в порте B или "данные приняты" из порта B.
Подтверждение связи при 16 битных передачах (использующих оба порта  A
и  B) возможно считывая или записывая порт А первым. FLAG - негативный
ввод с краевой чувствительностью,  который  может  использоваться  для
получения информации из PC другого 8520 или как универсальный вход для
прерываний. Любой отрицательный переход в FLAG будет устанавливать бит
FLAG прерывания.

РЕГ ИМЯ  D7   D6   D5   D4   D3   D2   D1   D0
--- ---- --   --   --   --   --   --   --   --
0   PRA  PA7  PA6  PA5  PA4  PA3  PA2  PA1  PA0
1   PRB  PB7  PB6  PB5  PB4  PB3  PB2  PB1  PB0
2   DDRA DPA7 DPA6 DPA5 DPA4 DPA3 DPA2 DPA1 DPA0
3   DDRB DPB7 DPB6 DPB5 DPB4 DPB3 DPB2 DPB1 DPB0

ТАЙМЕРЫ (ТАЙМЕР A, ТАЙМЕР B)

Каждый таймер состоит из  16  битного  счетчика  таймера  (только  для
чтения)  и  16  битной  защелки  таймера  (только  для записи). Данные
записанные в таймер - защелкиваютcя в нем, но при чтении  он  свободно
предоставляет содержимое счетчика.

Защелка также называется предскаляром, представляющем собой  значение,
используемое    при    обратном   счете,   равное   делителю   входной
синхро-частоты.   Таймеры   могут   использоваться   независимо    или
объединяться для выполнения операций более широкого профиля. Различные
режимы  таймера  позволяют  получать  длительные  задержки,   импульсы
переменной  ширины, цепочки импульсов, и волны переменной частоты. При
использовании входа CNT, таймеры могут считать  внешние  импульсы  или
измерять частоту, ширину импульса, и время задержки внешнего сигнала.

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

ЗАПУСК/ОСТАНОВКА
Управляющий   бит   позволяет   запускать   и   останавливать   таймер
микропроцессором в любое время.

PB ВКЛ\ВЫКЛ
Этот управляющий бит позволяет делать вывод на линиях PB6 для  таймера
A  и  PB7  для  таймера  B  порта  B.  При  этом  управляющий бит DDRB
отключается и соответствующая линия PB становиться выводом.

ПЕРЕКЛЮЧАТЕЛЬ/ИМПУЛЬС
Этот бит управляет выводом порта B при включенном  бите  PB  ВКЛ\ВЫКЛ.
При   каждом   переполнении   таймера,  вывод  может  или  переключать
полярность   или   генерировать   одиночный   положительный   импульс,
продолжительностью  один цикл. При переключении полярности при запуске
устанавливается высокий уровень, а RES устанавливает низкий уровень.

ОДНОКРАТНЫЙ/НЕПРЕРЫВНЫЙ
Задание режима таймера. В однократном режиме, таймер будет считать  от
значения  защелки  до  нуля,  генерировать  прерывание,  перезагружать
значение защелки и останавливаться. В непрерывном режиме, таймер будет
считать   от   значения  защелки  до  нуля,  генерировать  прерывание,
перезагружать значение защелки, и повторять все сначала.

В однократном режиме, запись в старший таймер (регистр 5  для  таймера
A,  регистр  7  для  Таймера  B) передаст защелку таймера на счетчик и
инициализирует подсчет независимо от стартового бита.

ЗАГРУЗКА  СИЛОЙ
Стробовый бит позволяет защелке таймера  быть  загруженной  в  счетчик
таймера в любое время, независимо от того, работает таймер или нет.

ВХОДНЫЕ РЕЖИМЫ

Использований этих бит позволяет выбрать устройство, используемое  для
уменьшения таймера. Таймер A может считать пары тактовых импульсов или
внешние импульсы на входе CNT. Таймер B может считать пары  импульсов,
внешние  импульсы  на  входе  CNT, импульсы переполнения таймера А или
импульсы переполнения таймера А при высоком уровне на входе CNT

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

Названия бит регистра чтения

РЕГ ИМЯ    D7   D6   D5   D4   D3   D2   D1   D0
--- ----   --   --   --   --   --   --   --   --
4   TALO   TAL7 TAL6 TAL5 TAL4 TAL3 TAL2 TAL1 TAL0
5   TAHI   TAH7 TAH6 TAH5 TAH4 TAH3 TAH2 TAH1 TAH0
6   TBLO   TBL7 TBL6 TBLS TBL4 TBL3 TBL2 TBL1 TBL0
7   TBHI   TBH7 TBH6 TBH5 TBH4 TBH3 TBH2 TBH1 TBH0

Названия бит регистра записи

РИГ ИМЯ    D7   D6   D5   D4   D3   D2   D1   D0
--- ----   --   --   --   --   --   --   --   --
4   TALO   PAL7 PAL6 PAL5 PAL4 PAL3 PAL2 PAL1 PAL0
5   TAHI   PAH7 PAH6 PAH5 PAH4 PAH3 PAH2 PAH1 PAH0
6   TBLO   PBL7 PBL6 PBL5 PBL4 PBL3 PBL2 PBL1 PBL0
7   TBHI   PBH7 PBH6 PBH5 PBH4 PBH3 PBH2 PBH1 PBH0


ЧАСЫ (TOD)

TOD - это 24 битный двоичный счетчик. Счетчик увеличивается по  фронту
положительных импульсов.

Программируемый  сигнал  используется  для  получения   прерывания   в
желаемое  время.  Регистры  сигнала  располагаются  по  тем  же  самым
адресам,  что  и  соответствующие  регистры  TOD.  Доступ  к   сигналу
управляется  битом  регистра управления. Регистры сигнала - только для
записи;  чтение  из  адреса  TOD  будет  давать  время  независимо  от
состояния бита ALARM.

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

Так как переполнение и перенос  разрядов  может  происходить  в  любое
время,  функция  защелки  состоит  в  том,  чтобы сохранять постоянную
информацию в TOD на время чтения. Все регистры TOD  защелкиваются  при
чтении события MSB и остаются защелкнутыми до окончания чтения события
LSB. Часы TOD продолжают считать  при  защелкнутых  регистрах  вывода.
Если надо считать только один регистр, проблема переноса не существует
и регистр может читаться "на лету".

Имена бит для записи ВРЕМЕНИ/СИГНАЛА или чтения ВРЕМЕНИ

РЕГ ИМЯ
--- ----
 8  Событие LSB   E7   E6   E5   E4   E3   E2   E1   E0
 9  Событие 8-15  E15  E14  E13  E12  E11  E10  E9   E8
 A  Событие MSB   E23  E22  E21  E20  E19  E18  E17  E16

ЗАПИСЬ
CRB7 = 0
CRB7 = 1 СИГНАЛ

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

Последовательный порт  буферизирован  8  битным  синхронным  сдвиговым
регистром.  С  помощью  управляющего  бита  выбирается режим ввода или
вывода. В Амиге один сдвиговый регистр используется для клавиатуры,  а
другой   не   назначен   никакому   устройству.   Обратите   Внимание,
последовательный порт, совместимый с RS-232 управляется  чипом  Paula;
подробности см. в главе 8.

РЕЖИМ ВВОДА

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

РЕЖИМ ВЫВОДА

В режиме вывода Таймер A используется в качестве  генератора  скорости
вывода  в  бодах.  Данные  выдвигаются  на  вывод  SP со скоростью 1/2
переполнения Таймера A. Максимально возможная практическая скорость  в
бодах  определяется  загрузкой  линии  и скоростью, с которой приемник
отвечает, принимая данные.

Для начала передачи вы должны установить Таймер A в непрерывный  режим
и  запустить  его.  Передача  начнется после записи в последовательный
регистр данных. Синхро-сигнал таймера появляется на выводе CNT. Данные
из  последовательного регистра данных загружаются в сдвиговый регистр,
а затем, при появлении импульса CNT, выводятся на вывод SP. Выдвинутые
данные  становятся  доступными  во  время  следующего  заднего  фронта
импульса CNT  и  остаются  доступными  до  следующего  заднего  фронта
импульса CNT.

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

Если данные не должны передаваться  после  прихода  восьмого  импульса
CNT,  CNT  будет  переходить  на  высокий  уровень сигнала, а SP будет
оставаться на  том  уровне,  каким  был  последний  переданный  разряд
данных.

ОСОБЕННОСТЬ ДВУНАПРАВЛЕННОГО ВВОДА-ВЫВОДА

Наличие двунаправленного сдвигового регистра ввода-вывода и часов  CNT
позволяет    соединять    большое    количество   чипов   8520   общей
последовательной коммуникационной шиной, на которой один 8520 является
главным,  работая  источником  данных  и синхронизатором, а все другие
чипы 8520 работают как  подчиненные.  Организация  выводов  CNT  и  SP
позволяют   организовать   такую   общую  шину.  Протокол  для  выбора
master/slave  может  передаваться  последовательной   шиной   или   по
специально выделенным линиям.

      РЕГ ИМЯ  D7 D6 D5 D4 D3 D2 D1 D0
      --- ---- -- -- -- -- -- -- -- --
      C   SDR  S7 S6 S5 S4 S3 S2 S1 S0

РЕГИСТР УПРАВЛЕНИЯ ПРЕРЫВАНИЯМИ ICR

В чипе 8520 имеются пять источников прерываний:

   -Переполнение Таймера А (таймер прошел 0)
   -Переполнение Таймера B
   -Сигнал TOD
   -Последовательный порт полный/пустой
   -Флаг

Один  и  тот-же  регистр  обеспечивает  маскировку  и   информацию   о
прерывании.  Регистр  управления прерываниями состоит из регистра MASK
(только для записи) и регистра DATA (только  для  чтения).  Прерывание
устанавливает   соответствующий   бит  в  регистре  DATA.  Разрешенное
прерывание с установленным битом MASK включает бит IR (MSB) в регистре
DATA  и  включает низкий уровень на выводе IRQ. В системе с множеством
чипов бит IR  может  опрашиваться  для  обнаружения  чипа,  пославшего
запрос на прерывание.

Когда  вы  считываете   регистр   DATA,   его   содержимое   очищается
(обнуляется),  и  линия  IRQ возвращается в высокое состояние. Так как
регистр  очищается  при  чтении,  вы  должны  гарантировать  что   ваш
обработчик  прерываний может обрабатывать все биты, которые могут быть
установлены  в  регистре  DATA  во  время  чтения.

Вы можете установить или очистить один или больше  бит  регистра  MASK
без  воздействия  на  текущее  состояние  любого  другого  бита в этом
регистре. Это выполняется установкой в соответствующее состояние  бита
MSBit,   который  называется  битом  установки/очистки.  В  битах  6-0
формируется  маска,  которая  определяет  на  какой  бит   вы   хотите
воздействовать.  После этого, используя бит 7, вы определяете КАК биты
в соответствующих позициях маски должны измениться.

* Если бит 7 = 1, тогда биты, соответствующие включенным битам  6-0  в
регистре  MASK  включатся,  а  биты, соответствующие выключенным битам
останутся без изменений.

* Если бит 7 = 0, тогда биты, соответствующие включенным битам  6-0  в
регистре  MASK  выключатся,  а биты, соответствующие выключенным битам
останутся без изменений.

Если  прерывание  должно  происходить   при   определенных   условиях,
соответствующий бит MASK должен быть равен 1.

Пример: Предположим, что вы хотите установить бит  прерываний  Таймера
(чтобы  включить  прерывание  Таймера), но при этом хотите убедиться в
том,  что  что  все  другие  прерывания  выключатся.  Ниже   приведена
последовательность действий для достижения этой цели.

        INCLUDE "hardware/cia.i"
        XREF   ciaa               ; Из amiga.lib
        lea    ciaa,a0            ; Определено в amiga.lib
        move.b %01111110,ciaicr(a0)

MSB равен 0, это значит, что очищаются все включенные биты  в  остатке
байта.

        INCLUDE "hardware/cia.i"
        XREF   ciaa                ; Из amiga.lib
        lea    ciaa,a0             ; Определено в amiga.lib
        move.b %100000001,ciaicr(a0)

MSB  равен  1,  это  значит,  что  включаются  биты,   соответствующие
включенным битам в остатке байта не затрагивая остальных бит.

ЧТЕНИЕ РЕГИСТРА УПРАВЛЕНИЯ ПРЕРЫВАНИЯМИ

РЕГ ИМЯ        D7   D6   D5   D4   D3   D2   D1   D0
--- ----       --   --   --   --   --   --   --   --
D   ICR        IR   0    0    FLG  SP  ALRM  TB   TA

ЗАПИСЬ МАСКИ УПРАВЛЕНИЯ ПРЕРЫВАНИЯМИ

РЕГ ИМЯ       D7   D6   D5   D4   D3   D2   D1   D0
--- ----      --   --   --   --   --   --   --   --
D   ICR       S/C  x    x    FLG  SP  ALRM  TB   TA

УПРАВЛЯЮЩИЕ РЕГИСТРЫ

В 8520 имеются два регистра управления -  CRA  и  CRB.  CRA  связан  с
Таймером A, а CRB связан с Таймером B. Формат регистров следующий:

УПРАВЛЯЮЩИЙ РЕГИСТР А

БИТ ИМЯ     ФУНКЦИЯ

0  START    1 = Запуск Таймера A, 0 - Остановка Таймера  A.  Этот  бит
            автоматически  сбрасывается  (=0)  в  случае переполнения,
            происходящего в однократном режиме.

1  PBON     1 = Вывод таймера A на PB6, 0 = PB6 в нормальном режиме.

2  OUTMODE  1 = переключение, 0 = импульсы.

3  RUNMODE  1 = однократный режим, 0 = непрерывный режим.

4  LOAD     1 = загрузка силой (это строб, данные тут не хранятся; бит
            4  всегда  читается  как 0, а запись нуля не дает никакого
            эффекта).

5  INMODE   1 = Таймер A считает положительные переходы CNT.
            0 = Таймер A считает 02 импульсы.

6  SPMODE   1 = Вывод на последовательный порт (CNT - источник синхро-
            импульсов

            0 = Ввод из  последовательного  порта  (требуется  внешний
            источник синхроимпульсов.

7  UNUSED

БИТОВАЯ КАРТА РЕГИСТРА CRA

РЕГ ИМЯ UNUSED SPMODE  INMODE LOAD   RUNMODE OUTMODE   PBON     START

E   CRA не исп 0=ввод  0=02  1=загр. 0=непр  0=импульс 0=PB6OFF 0=stop
        не исп 1=вывод 1=CNT силой   1=одно- 1=перекл. 1=PB6ON 1=start
                             (строб) кратн.

                        |<--------- Переменные таймера A ----------->|

При записи в неиспользуемые биты регистра ничего не происходит, при их
чтении читается 0

УПРАВЛЯЮЩИЙ РЕГИСТР B

БИТ ИМЯ     ФУНКЦИЯ

0  START    1 = Запуск Таймера B, 0 - Остановка Таймера  B.  Этот  бит
            автоматически  сбрасывается ( = 0 ) в случае переполнения,
            происходящего в однократном режиме.

1  PBON     1 = Вывод таймера B на PB7, 0 = PB7 в нормальном режиме.

2  OUTMODE  1 = переключение, 0 = импульсы.

3  RUNMODE  1 = однократный режим, 0 = непрерывный режим.

4  LOAD     1 = загрузка силой (это строб, данные тут не хранятся; бит
            4  всегда  читается  как 0, а запись нуля не дает никакого
            эффекта).

5,6  INMODE Битами CRB5 и CRB5 выбирается один из 4х возможных режимов
            для таймера B

           CRB6 CRB5  Выбор режима
           ---- ----  --------------------------
           0    0     Таймер B считает 02 импульсы.
           0    1     Таймер B считает положительные переходы CNT.
           1    0     Таймер B считает импульсы переполнения таймера A
           1    1     Таймер B считает импульсы переполнения таймера A
                      пока вывод CNT в высоком состоянии

7  ALARM   1=запись регистров TOD устанавливает сигнал
           0=запись регистров TOD устанавливает часы TOD
           Чтение регистров  TOD  всегда  дает  содержимое  часов  TOD
           независимо от состояния бита ALARM.

БИТОВАЯ КАРТА РЕГИСТРА CRA

РЕГ ИМЯ ALARM   INMODE    LOAD    RUNMODE OUTMODE   PBON     START

F   CRB 0=TOD   00=02     1=загр. 0=непр  0=импульс 0=PB6OFF 0=stop
        1=ALARM 01=CNT    силой   1=одно- 1=перекл. 1=PB6ON  1=start
                10=Таймер (строб) кратн.
                11=CNT+
                   таймер

                |<------------ Переменные таймера B -------------->|

При записи в неиспользуемые биты регистра ничего не происходит, при их
чтении читается 0

ФУНКЦИИ СИГНАЛОВ ПОРТА

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

ПРИМЕЧАНИЕ
В многозадачной операционной системе, множество различных задач  могут
бороться  за  использование  системных ресурсов. Программисты, пишущие
прикладные программы должны соблюдать установленные правила доступа  к
ресурсам, чтобы гарантировать совместимость программ с системой.

Адрес BFEr01   биты данных 7-0   (A12*) (INT2)

PA7..игровой порт 1, вывод 6 (кнопка огонь*)
PA6..игровой порт 0, вывод 6 (кнопка огонь*)
PAS..RDY*        готовность диска*
PA4..TKO*        головка на дорожке 00*
PA3..WPRO*       защита записи*
PA2..CHNG*       смена диска*
PAl..LED*        яркость индикатора питания (0=яркий)
PAO..OVL         бит оверлея памяти
SP...RDAT        данные клавиатуры
CNT..RCLR
PB7..P7          данные 7
PB6..P6          данные 6              Данные
PB5..P5          данные 5     Параллельного интерфейса Centronics
PB4..P4          данные 4
PB3..P3          данные 3
PB2..P2          данные 2
PBl..P1          данные 1
PBO..P0          данные 0
PC...drdy*       Управление параллельным интерфейсом
F....ack*

Адрес BFDrOO   биты данных 15-8   (A13*) (INT6)

PA7..послед. порт. линия DTR*, driven output
PA6..послед. порт. линия RTS*, driven output
PA5..послед. порт. линия carrier detect*
PA4..послед. порт. линия CTS*
PA3..послед. порт. линия DSR*
PA2..SEL         управление centronics
PA1..POUT        нет бумаги ---+
PA0..BUSY        занят  -----+ |
                             | |
SP...BUSY        commodore --+ |
CNT..POUT        commodore ----+

PB7..MTR*        мотор
PB6..SEL3*       выбор 3го внешнего дисковода
PB5..SEL2*       выбор 2го внешнего дисковода
PB4..SEL1*       выбор 1го внешнего дисковода
PB3..SEL0*       выбор внутреннего дисковода
PB2..SIDE*       выбор стороны*
PBl..DIR         направление
PBO..STEP*       шаг* (3.0 миллисекунды минимум)

PC...            не используется
F....INDEX*      индекс диска*

; Пример  отсчета  времени  с  помощью  8520.   Этот   пример   мигает
; индикатором питания  ровно через  3  миллисекунды. В примере берется
; полный контроль над машиной.
;
; Основные частоты Амиги:
;           NTSC    28.63636 MHz
;           PAL     28.37516 MHz
;
; Два 16 битных таймера на чипе 8520 считают со скоростью  1/10  часов
; CPU  или 0.715909  MHz. Это дает 1.3968255 микросекунд на один цикл.
; Под PAL счет немного медленнее, 0.709379 MHz.
;
; Ожидание 1/100 секунды равно  ожиданию  10,000  микросекунд. Регистр
; таймера должен быть равен (10000/1.3968255 = 7159).
;
; Ожидание 3  миллисекунд  равно  ожиданию  3000  микросекунд. Регистр
; таймера равен (3000/1.3968255 = 2148).
;

        INCLUDE "hardware/cia.i"
        INCLUDE "hardware/custom.i"
;
        XREF _ciaa
        XREF _ciab
        XREF _custom
;
        lea  _custom,a3                ; База чипсета
        lea  _ciaa,a4                  ; Базовый адрес CIA-A
;
        move.w S7fff,dmacon(a3)        ; Убиваем все прерывания
;
; Установка. Делается один раз
; Эта часть устанавливает все биты для работы таймера А в однократном
; режиме
;
        move.b ciacra(a4),d0           ;Установка управл рег A на CIAA
        and.b  #%11000000,d0           ;Не разрушьте те биты, которые
        or.b   #%00001000,d0           ;не используете
        move.b d0,ciacra(a4)
        move.b #%01111111,ciaicr(a4)   ;Очищаем все прерывания 8520
;
; Установка времени (младший байт, ЗАТЕМ старший байт)
; Производим операцию And $ff для получения младшего байта
; Сдвигаем на 8 бит вправо для получения старшего байта
;
TIME    equ 2148
        move.b (TIME&$FF),ciatalo(a4)
        move.b (TIME>>8),ciatahi(a4)
;
;       Ждем окончания работы таймера
busy_wait:
;
     btst.b #0,ciaicr(a4)           ;Ждем флаг истечения времени
     beq.s  busy wait
     bchg.b #CIAB LED,ciapra(a4)    ;Мигаем индикатором
     bset.b #0,ciacra(a4)           ;Перезапускаем таймер
     bra.s  busy_wait

     END

ПОДРОБНОСТИ ПОДКЛЮЧЕНИЯ ЖЕЛЕЗА

Выборка адресов CIA происходит, когда верхние три адресных бита  равны
101.  CIAA  выбирается  когда  A12 - на низком уровне, A13 на высоком;
CIAB выбирается когда A12 - на высоком уровне,  A13  на  низком.  CIAA
работает с разрядами данных 7-0, CIAB с разрядами 15-8.

Адресные биты A11, A10, A9, и A8 используются для  определения  одного
из 16 внутренних регистров, к которому идет обращение. Это указывается
буквой "r" в обозначении  адреса. Все другие биты не  имеют  значения.
Таким  образом, CIAA выбирается следующим адресом: 101x xxxx xx01 rrrr
xxxx xxx0. Адрес CIAB: 101x xxxx xx10 rrrr xxxx xxx1

Учитывая  будущее  расширение  памяти,  определены  следующие  адреса:
CIAA=BFEr01,  CIAB=BFDr00.   По   этим   адресам   программы   должен
использоваться только байтовый доступ.

СИГНАЛЫ ИНТЕРФЕЙСА

ВХОД ЧАСОВ

Часы 02 имеют ТТЛ  совместимый  ввод,  используемый  для  операций  со
внутренними  устройствами  и  как  синхронизатор  для  системной  шины
данных. На Амиге эти часы соединяется с часами  "E"  68000.  Часы  "E"
работают  со  скоростью  1/10  CPU  и  дают  0.715909 Mhz для NTSC или
0.709379 Mhz для PAL.

CS - ВХОД ВЫБОРА ЧИПА

Вход CS управляет активностью 8520. Низкий уровень  сигнала  на  CS  в
одновременно с высоким уровнем 02 служит причиной ответа устройства на
сигналы на линиях R/W и адресной линии RS.  Линия  CS  обычно  активна
(низкий уровень) при соответствующей комбинацией адресов 02.

R/W - ВХОД ЧТЕНИЯ/ЗАПИСИ

Сигнал RW обычно выдается микропроцессором  и  управляет  направлением
передачи  данных  8520. Высокий уровень на R/W задает чтение (передача
данных из 8520), а низкий уровень задает  запись  (передача  данных  в
8520).

RSRS0 - ВВОД АДРЕСА

Ввод адреса выбирает внутренние регистры так,  как  описано  на  карте
регистров.

DB7-DB0 - ВВОД/ВЫВОД ШИНЫ ДАННЫХ

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

IRQ - ВЫВОД ЗАПРОСА НА ПРЕРЫВАНИЕ

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

RES - ВХОД СБРОСА

Низкий уровень на  выводе  RES  сбрасывает  все  внутренние  регистры.
Выводы  порта  устанавливаются  на  ввод,  регистры портов - в 0 (хотя
чтение портов будет возвращать высокий уровень).  Регистры  управления
таймера  устанавливаются  обнуляются. Все другие регистры сбрасываются
до нуля.

End.

 


НОМЕ