Введение

Интегрированная схема

Комплексный интерфейсный адаптер 6526/8520 (CIA) — это интегрированная схема, разработанная компанией MOS Technology. Она служила контроллером портов ввода-вывода для семейства микропроцессоров 6502, обеспечивая возможности параллельного и последовательного ввода-вывода, а также таймеры и часы реального времени (TOD). Наиболее широкое применение устройство получило в компьютерах Commodore 64 и Commodore 128(D), каждый из которых содержал два чипа CIA. На дисководах Commodore 1570 и Commodore 1571 был установлен один чип CIA. Кроме того, в домашних компьютерах Amiga и дисководе Commodore 1581 использовалась модифицированная версия схемы CIA под названием 8520. 8520 функционально эквивалентна 6526, за исключением упрощенной схемы TOD. Предшественником CIA была PIA.

Параллельные вводы и выводы

У ЦРУ было два 8-битных двунаправленных параллельных порта ввода-вывода. Каждый порт имел соответствующий регистр направления данных, позволявший устанавливать каждую линию данных индивидуально в режим ввода или режим вывода. Чтение этих портов всегда возвращало состояние отдельных линий, независимо от установленного направления данных.

Серийные вводы и выводы

Внутренний двунаправленный 8-битный регистр сдвига позволял микросхеме ЦП (CIA) обрабатывать последовательный ввод-вывод. Микросхема могла принимать последовательный вход, синхронизированный от внешнего источника, и передавать последовательный выход, синхронизированный одним из встроенных программируемых таймеров. Прерывание генерировалось после завершения 8-битной последовательной передачи. Была возможность создать простую "сеть", соединив регистры сдвига и выходы тактирования нескольких компьютеров. Максимальная скорость передачи данных составляет 500 кбит/с для 2-мегагерцовой версии. В ЦП (CIA) реализовано исправление ошибки в последовательном регистре сдвига, присутствовавшей в более ранней микросхеме 6522 VIA. Изначально ЦП (CIA) разрабатывалась для обеспечения быстрой связи с дисководом, но в итоге её использование оказалось невозможным из-за стремления сохранить совместимость дисководов с VIC 20; на практике прошивку дисковода 1541 пришлось замедлить ещё больше, чем у предшественника на VIC 20, чтобы обойти поведение видеопроцессора C64, который во время отрисовки экрана отключал процессор на 40 микросекунд каждые 512 микросекунд и в этот момент не мог отслеживать шину, рискуя пропустить бит.

Интервальные таймеры

Были доступны два программируемых интервальных таймера, каждый с точностью до долей микросекунды. Каждый таймер состоял из 16-битного счетчика обратного отсчета, доступного только для чтения и с возможностью предварительной установки, и соответствующего 16-битного регистра, доступного только для записи. При запуске таймера содержимое регистра автоматически копировалось в счетчик, который затем уменьшался с каждым тактовым циклом до переполнения, при котором генерировалось прерывание, если контроллер CIA был настроен на это. Таймер мог работать в режиме "один раз", останавливаясь после переполнения, или в режиме "непрерывный", перезагружая значение регистра и начиная новый цикл отсчета. Помимо генерации прерываний, выход таймера также можно было подключить ко второму порту ввода/вывода. В компьютерах Commodore 64 и Commodore 128 время работы контроллера CIA определялось системным тактовым сигналом Ø2, номинально равным 1 МГц. Это означало, что таймеры уменьшали значение примерно с интервалом в одну микросекунду, точная продолжительность которого зависела от того, использовался ли видеостандарт NTSC или PAL. В Commodore 128 использовалась схема растяжения тактовой частоты, поэтому время работы контроллера CIA не зависело от того, работала ли система в медленном (SLOW) или быстром (FAST) режиме. Можно было создавать относительно большие интервалы времени, программируя таймер B на подсчет переполнений таймера A. Если оба таймера были загружены максимальным значением интервала – 65535, то результирующий интервал времени составлял один час, 11 минут и 34 секунды.

Часы времени суток (TOD)

В ЦРУ встроены часы реального времени, обеспечивающие устройство измерения времени, более удобное для человеческих нужд, чем микросекундная точность интервальных таймеров. Время отображается в американском 12-часовом формате AM/PM. Часы TOD состоят из четырех регистров чтения/записи: часы (с битом 7 в качестве флага AM/PM), минуты, секунды и десятые доли секунды. Все регистры считываются в формате BCD, что упрощает процесс кодирования/декодирования. Чтение регистров всегда возвращает текущее время суток. Чтобы избежать ошибки при считывании времени, чтение часового регистра немедленно останавливает обновление регистров, не влияя на внутреннюю точность хода времени. После чтения регистра десятых долей секунды обновление возобновляется. Можно читать любой регистр, кроме часового, "на лету", что делает использование работающих часов TOD в качестве таймера практичным применением. Однако, если читается часовой регистр, необходимо впоследствии прочитать регистр десятых долей секунды. В противном случае, все регистры TOD останутся "замороженными". Установка времени включает запись соответствующих значений BCD в регистры. Запись в часовой регистр полностью останавливает часы. Часы не начнут работу снова, пока не будет записано значение в регистр десятых долей секунды. Благодаря порядку расположения регистров в карте памяти системы, для записи регистров в правильном порядке достаточно простого цикла. Допустимо записывать только в регистр десятых долей секунды, чтобы "подтолкнуть" часы к работе, после чего, после аппаратного сброса, часы начнут отсчет с 1:00:00.0. Помимо функций измерения времени, TOD может быть настроен для работы в качестве будильника, генерируя запрос на прерывание в любое заданное время. Из-за ошибки во многих 6526 (см. также примечания ниже), запрос на прерывание будильника не всегда происходил, когда компонент секунды времени будильника был точно равен нулю. Решением является установка значения десятых долей секунды будильника в 0,1 секунды. Внутренняя схема часов TOD рассчитана на работу от синусоидального сигнала частотой 50 или 60 Гц. Как в C 64 и C 128(D), блок питания компьютера подавал такой сигнал от сети, обеспечивая стабильный таймер с незначительным долгосрочным отклонением. Возможность работы с обеими частотами сети позволила использовать единую версию 6526 в компьютерах, работающих в странах с напряжением 50 или 60 Гц. Важно отметить, что вопреки распространенному мнению, видеостандарты NTSC или PAL не связаны напрямую с частотой сети. Кроме того, некоторые компьютеры не получали тактовую частоту TOD от источника питания сети. Например, как NTSC, так и PAL-варианты Commodore SX 64 используют 60 Гц TOD-часы, обеспечиваемые специальным кварцевым генератором. Операционная система KERNAL в Commodore 64, например, определяет видеостандарт при загрузке системы, но не пытается определить подаваемую частоту TOD-часов и правильно инициализировать ЦРУ на машинах с частотой 50 Гц. Таким образом, любое программное обеспечение, желающее использовать функцию TOD ЦРУ, должно самостоятельно определить подаваемую частоту и установить соответствующий флаг ЦРУ. В противном случае часы могут быстро отклониться от правильного времени. Ревизия 8520 ЦРУ, используемая в Amiga и дисководе Commodore 1581, изменила часы реального времени на 24-битный двоичный счетчик, заменив формат BCD 6526. Однако другое поведение осталось схожим.

Версии

CIA выпускался в версиях с частотой 1 МГц (6526), 2 МГц (6526A) и 3 МГц (6526B). Корпус представлял собой 40-выводной керамический или пластиковый DIP, соответствующий стандарту JEDEC. 8520 CIA, с его модифицированным тактовым генератором времени, использовался в компьютерах Amiga. Commodore интегрировал упрощенную (всего 4 регистра) логику, аналогичную CIA, для снижения стоимости Commodore 1571 внутри C128DCR (см. Commodore 128) в виде интегральной схемы 5710, которая также содержит другие функции. В 5710 CIA тактовый сигнал для быстрого последовательного интерфейса жестко задан эквивалентным таймеру A CIA6526 со значением 5, что обеспечивает время на бит 5 мкс при передаче. Это отличается от значения таймера A, равного 6, в 6526 CIA в оригинальном Commodore 1571. 5710 CIA не содержит таймеров или регистров управления таймерами. Он содержит только два регистров порта и регистр для управления последовательным сдвигом и его событием.

Эрара

В дополнение к вышеупомянутой ошибке прерывания будильника, многие микросхемы ЦИА имели дефект, из-за которого компонент не генерировал аппаратное прерывание таймера B, если регистр управления прерываниями (ICR) считывался за один-два тактовых цикла до момента, когда прерывание должно было произойти. Этот дефект, а также логические ошибки в 8-битной операционной системе, поставляемой Commodore, приводили к частым ложным ошибкам RS 232 в компьютерах Commodore 64 и Commodore 128 при работе на более высоких скоростях передачи данных.