Motorola 6845 , или MC6845 , — это контроллер дисплея , который широко использовался в 8-разрядных компьютерах в 1980-х годах. [1] [2] Первоначально предназначенный для конструкций на базе ЦП Motorola 6800 и имеющий соответствующий номер детали, он более широко использовался вместе с различными другими процессорами и чаще всего встречался в машинах на базе Zilog Z80 и MOS 6502 .
6845 не является полным решением для отображения; основная функция чипа заключается в правильном хронометрировании доступа к памяти дисплея и вычислении адреса памяти следующей части, которая будет отрисована. Затем другие схемы в машине используют адрес, предоставленный 6845, для извлечения шаблона и его последующей отрисовки. Реализация этого оборудования полностью зависит от разработчика и широко варьируется в зависимости от машины. 6845 предназначен для отображения символов, но может также использоваться для пиксельной графики с некоторым умным программированием.
Среди наиболее известных применений — видеокарты BBC Micro , Amstrad CPC и Videx VideoTerm для Apple II . [1] Он также является частью многих ранних графических адаптеров для IBM PC , включая MDA , Hercules Graphics Card (HGC), Color Graphics Adapter (CGA) и Plantronics Colorplus . [3] Его функциональность была продублирована и расширена специальными схемами в видеоадаптерах EGA и VGA для ПК.
Первоначально разработанный Hitachi как HD46505 , [4] версии, созданные Hitachi, используются в самых разных японских компьютерах от Sony, Sharp, Panasonic и Casio. Позднее клонированный как MB89321A компанией Fujitsu. [5] Он также известен как 6845 CRTC или CRTC6845 , что означает « контроллер электронно-лучевой трубки ». Эта версия использовалась в Apricot PC и Victor 9000 для обеспечения разрешения монохромного дисплея 800x400.
Распространенным клоном этого контроллера ЭЛТ является контроллер ЭЛТ UM6845E от United Microelectronics Corporation (UMC) . Во время технологических эмбарго холодной войны 6845 был клонирован в Болгарии под обозначением CM607 . 6845 был очень похож и связан с более поздним 6545, произведенным MOS Technology (Commodore Semiconductor Group) и Rockwell (в двух версиях).
[6]
Чип генерирует сигналы, необходимые для взаимодействия с растровым дисплеем , но не генерирует фактические пиксели , хотя он вносит информацию о курсоре и видеогашении в сигналы пиксельного видео (интенсивности). Он используется для создания правильно синхронизированной горизонтальной и вертикальной синхронизации и предоставления адреса в памяти, с которого должен быть считан следующий пиксель или набор пикселей. Процесс считывания этого значения, преобразования его в пиксели и отправки его на ЭЛТ оставлен другим схемам. Из-за этого системы, использующие 6845, могут иметь очень разные числа и значения цветов или могут вообще не поддерживать цвет. [6]
Поддерживаются чересстрочные и нечередующиеся режимы вывода, а также аппаратный текстовый курсор. Генерация синхронизации включает генерацию горизонтальных и вертикальных видеосигналов гашения, которые используются для кондиционирования внешних схем генерации пикселей. Кроме того, предусмотрена внутренняя защелка, которая при срабатывании дублирует и сохраняет копию видеоадреса, чтобы ее позже мог считать ЦП. Это полезно для световых перьев и световых пистолетов , которые могут функционировать, отправляя импульс на 6845 при прохождении электронного луча, позволяя работающей программе считывать указанное местоположение. Из-за этой функции большинство компьютерных видеоадаптеров, использующих 6845, включали интерфейс светового пера, хотя обычно это был внутренний разъем на самой плате, а не снаружи компьютера, и он обычно не документировался в руководстве пользователя.
Поскольку все аспекты видеосинхронизации программируются, одна машина может переключаться между 50 Гц и 60 Гц таймингами в программном обеспечении (или, конечно, любыми другими частотами обновления в пределах возможностей чипа). 6845 может использоваться для управления мониторами или любым другим растровым дисплеем.
Чип имеет в общей сложности 18 8-битных регистров, управляющих всеми аспектами видеотайминга. Только два адреса доступны внешним компонентам — один для выбора внутреннего регистра для чтения или записи, а другой для доступа к этому регистру. [7]
6845 предназначен для символьных дисплеев. Каждый генерируемый им адрес состоит из двух частей — 14-битного адреса символа и 5-битного адреса строки. Адрес символа увеличивается линейно. Когда чип подает сигнал горизонтальной синхронизации, он увеличивает адрес строки. Если адрес строки не равен программно установленному количеству строк на символ, то адрес символа сбрасывается на значение, которое он имел в начале только что завершенной строки сканирования. В противном случае адрес строки сбрасывается на ноль, а адрес памяти продолжает линейно увеличиваться. Это приводит к повторному считыванию из памяти той же последовательности значений символов для каждой растровой строки каждой строки символа, прежде чем 6845 переместит адрес памяти на следующую строку символа и повторит тот же шаблон.
Если адрес символа используется для поиска ссылки на символ в RAM , а адрес строки — для индексации таблицы графики символов в ROM, то создается обычный текстовый режим отображения. Ссылка на символ, считанная из памяти, должна быть объединена с адресом строки для формирования адреса для ROM графики символов, при этом ссылка на символ выбирает набор шаблонов строк развертки, который формирует один символ, а адрес строки индексируется в этом наборе для выбора одной строки развертки. Другими словами, адрес ROM делится на две части для использования ROM как двумерного массива: первое измерение выбирает символ, а второе — строку графического шаблона этого символа.
Однако 6845 предоставил разработчику свободу маршрутизировать биты памяти и адреса строк в видеопамять по своему усмотрению. По этой причине слово, адресуемое 6845, не обязательно должно быть равно одному пикселю или одному символу. В алфавитно-цифровом (текстовом) режиме CGA на символ приходится два байта, к которым 6845 обращается последовательно: первый байт — это байт кода символа, а второй байт — байт атрибута символа, и плата использует содержимое байтов вместе с адресом строки для чтения данных шрифта из ПЗУ и генерации пикселей.
Для эмуляции кадрового буфера можно использовать другую маршрутизацию битов, исключая символьное ПЗУ. Из-за ограничения в 128 строк 6845 не может предоставлять линейные большие линейные кадровые буферы. Решением было объединить адрес строки и адрес символа для предоставления линейных строк развертки в нелинейном буфере. Это имеет преимущества более простого программирования для несимвольного отображения и легкой плавной горизонтальной прокрутки, но может препятствовать плавной вертикальной прокрутке. Например, графический режим IBM CGA использует размер слова в один байт, и каждое слово представляет четыре или восемь пикселей (в графических режимах среднего или высокого разрешения соответственно); 6845 настроен на высоту символа в 2 пикселя, а бит адреса строки RA0 используется для бита 13 адреса кадрового буфера. Таким образом, можно использовать 200 вертикальных пикселей, несмотря на ограничение в 128 строк. Графический режим в других системах использовал похожий трюк: в графической карте Hercules биты 12-13 адреса буфера кадра брались из бит адреса строки RA0-RA1, обеспечивая вертикальное разрешение 348 пикселей из 87 «строк» высотой в четыре пикселя; Amstrad CPC использовал высоту строки 8, как и в текстовом режиме, сопоставляя адрес строки RA0-RA2 с адресом памяти MA11-MA13, а адрес символа CA0-CA10 с адресом памяти MA0-MA10.
Эти режимы работы были возможны, поскольку 6845 не выполнял никакой буферизации символьных данных. В 1970-х, 1980-х и в меньшей степени в 1990-х годах память была дорогой, особенно быстрая память, и это было важной проблемой. В 1970-х и в начале-середине 1980-х годов плотность схем чипа также была не очень высокой, и размещение 80-байтового или большего символьного буфера в чипе, таком как 6845, могло увеличить кристалл чипа на 50-100%, что, в свою очередь, сделало его дороже в несколько раз из-за экспоненциального роста уровня дефектов чипа и последующего снижения выхода продукции с размером кристалла.
С другой стороны, 6845 возлагает на своих пользователей бремя предоставления достаточной пропускной способности памяти для поддержки перечитывания данных в каждой строке. Если символ занимает одно «слово» в видеобуфере, отображение l строк и c столбцов символов с s строками сканирования на символ требует l × c слов памяти для представления полного экрана символов, но требует в s раз больше обращений к памяти для завершения одного цикла обновления: каждая строка слов символов повторно считывается s раз, прежде чем будет считана следующая строка. Это означает, что символьные дисплеи, использующие 6845, требуют высокой пропускной способности памяти порядка пропускной способности, необходимой для графических дисплеев с адресацией по всем точкам того же разрешения.
Другой контроллер видеодисплея, который буферизует одну целую строку данных символов внутри, может избежать этого повторного чтения каждой строки символов из ОЗУ буфера дисплея, уменьшая требуемую пропускную способность памяти и позволяя либо использовать более медленные, менее дорогие чипы памяти, либо больше времени для системного ЦП для доступа к памяти, либо комбинировать и то, и другое. Добавление такого буфера символов в 6845 считалось неэкономичным подходом, когда чип был представлен; однако всего несколько лет спустя чип VIC-II , используемый в Commodore 64, действительно включал такой кэш строки символов.
Используя полный диапазон адресов RA0-RA4:CA0-CA13, 6845 может адресовать 2 14+5 = 524 288 слов памяти. Слово может быть любым числом бит, выбранным разработчиком системы в качестве ширины памяти: хотя число уникальных адресов, которые может адресовать 6845, ограничено 524 288 , объем памяти, который может адресовать 6845, может быть значительно больше, чем можно было бы предположить, поскольку 6845 не накладывает ограничений на размер каждой ячейки памяти, к которой он обращается. Если размер слова составляет один байт, как это часто бывает, 6845 может адресовать 512 КБ . Если размер слова составляет 32 бита, например, для 32-битной цветной графики с одним пикселем на слово, то 6845 может адресовать 2048 КБ; для 64-битных слов он может адресовать в два раза больше. Эти ограничения возникают из-за сочетания 6845 и конструкции внешней памяти, подключенной к нему, а не только из-за 6845.
Как уже было сказано, 6845 обычно не может обеспечить большие линейные буферы кадров. Одна конструкция могла использовать только 14-битную адресацию символов и устанавливать количество строк на символ равным 1, но была бы ограничена 128 строками и 16 КБ адресуемой памяти.
Несмотря на полную совместимость, между 6845 и 6545 существует ряд небольших различий.
Самое большое отличие в том, что 6545 может быть сконфигурирован так, чтобы иметь единственный доступ к адресной шине для видеопамяти. Включены два дополнительных регистра для установки любого адреса, который ЦП хочет прочитать, и чип попеременно выдает адреса для генерации дисплея и дисплей, установленный для доступа ЦП. [8]
Менее существенные изменения заключаются в том, что технология MOS и одна из разновидностей Rockwell 6545 не поддерживают чересстрочный выход, а все 6545 включают опциональный перекос адреса, который задерживает включение дисплея на один цикл символа, если он установлен. Эта вторая функция была включена в более поздние разновидности Motorola 6845. 6545 может быть настроен на работу в линейном 14-битном режиме с использованием бита состояния. На 6845 то же самое требует регулировки высоты символа. [9]
6845 считывает начальный адрес для своего дисплея один раз за кадр . Однако, если внутренние значения синхронизации на чипе изменяются в правильное время, его можно заставить подготовиться к новому кадру, не завершая текущий, создавая прерывистый разрыв в сгенерированных адресах на полпути через дисплей. Это обычно используется в демонстрациях и гораздо реже в играх, чтобы обеспечить одну движущуюся область дисплея (обычно игровое поле) и одну статическую (обычно отображение статуса).
Вертикальная прокрутка кажется ограниченной, поскольку можно задать только начальный адрес символа, а адрес строки всегда обнуляется в начале кадра, но, регулируя время границ, можно смещать положение, в котором буфер кадра отображается на растровом дисплее для приращений между целыми символами. С помощью рисования пустых пикселей по краям экрана это можно сделать невидимым для пользователя, создав лишь иллюзию плавной вертикальной прокрутки.