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. |