Контроллер алфавитно-цифрового дисплея КР580ВГ75
(Отечественный аналог Intel i8275)
Вадим Кудрявцев
В первых компьютерах применялись алфавитно-цифровые дисплеи. В них использовался метод отображения информации, при котором каждому символу соответствовал один байт (код символа) или два байта (код символа и атрибуты) в видеопамяти, что позволяло обойтись всего лишь несколькими килобайтами видеопамяти. Разумеется, полноценные графики на таких компьютерах построить было невозможно, однако для расчетов и написания текстов программ этого было более чем достаточно.
В серии К580 выпускался контроллер алфавитно-цифрового дисплея КР580ВГ75.
Этот контроллер позволял кроме отображения черного и белого цветов выделять символы повышенной яркостью, подчеркиванием, генерировать некоторые символы псевдографики.
Основные возможности контроллера алфавитно-цифрового дисплея КР580ВГ75 таковы:
- программируемый экранный и строчный формат;
- 11 графических символов;
- 4 возможных вида курсора;
- распознавание и запоминание положения светового пера;
- 2 символьных буфера;
- программируемый режим прямого доступа к памяти (ПДП);
- 40-выводной DIP-корпус.
Рис. 1. Структура микросхемы КР580ВГ75
Назначение выводов контроллера
LC0-LC3 | Выходы | Line Count (счетчик строк). Этот выход используется для адресации номера строки отображаемого символа в знакогенераторе |
DRQ | Выход | DMA Request (Запрос ПДП) |
/DACK | Вход | DMA Acknowledge (Подтверждение ПДП) |
HRTC | Выход | Horizontal Retrace (обратный ход по строкам) Выходной сигнал, который является активным во время запрограммированного обратного хода по строкам. В это время VSP=1 и LTEN=0 |
VRTC | Выход | Vertical Retrace (обратный ход по кадрам) Выходной сигнал, который является активным во время запрограммированного обратного хода по кадрам. В это время VSP=1 и LTEN=0 |
/RD | Вход | Read (Читать). Управляющий сигнал, позволяющий прочитать регистры |
/WR | Вход | Write (Запись). Этот управляющий сигнал показывает запись команды в регистр управления или запись данных в счетчик строк во время цикла ПДП |
LPEN | Выход | Light Pen (Световое перо). Входной сигнал системы управления экраном, позволяющий распознать световое перо |
DB0-DB7 | Входы/выходы | Двунаправленная шина данных с тремя состояниями |
LA0,LA1 | Выходы | Line Attributes Codes (Коды атрибутов строк). Эти коды могут быть декодированы при помощи внешней логики и использованы для отображения символов псевдографики |
LTEN | Выход | Light Enable (Разрешение выхода видеосигнала). Выходной сигнал для разрешения видеосигнала |
RVV | Выход | Reverse Video (Инвертирование видеосигнала) |
VSP | Выход |
Video Suppression (Видеоподчеркивание) Выходной сигнал для коммутации видеосигнала. Этот сигнал является активным: - во время обратного хода по строкам и кадрам; - во время строк сверху и снизу символа, если такие запрограммированы; - если распознаны конец строки или экрана; - если происходит процесс ПДП; - регулярно (1/16 частоты кадров для курсора, 1/32 частоты кадров для управления символами и полями) |
GPA1, GPA2 | Выход | General Purpose Attribute Codes (Коды атрибутов общего назначения) |
HLGT | Выход | Highlight (Повышенная яркость) Выходной сигнал для увеличения яркости отдельных символов |
IRQ | Выход | Interrupt Request (Запрос прерывания) |
CCLK | Вход | Character Clock (Тактовые импульсы). Эти тактовые импульсы образуются с помощью внешней логики |
CC0-CC6 | Вход | Chip Select (Выбор микросхемы) |
A0 | Вход | Port Address (Адрес порта) A0=0 выбирает регистр параметров, A0=1 выбирает регистр статуса или команд |
Программирование
В КР580ВГ75 имеются два программируемых регистра: регистр команд (CREG) и регистр параметров (PREG), а также регистр статуса (SREG). Регистр команд доступен только по записи, регистр статуса - только по чтению. Указанные регистры адресуются следующим образом:
A0 | Операция | Регистр |
---|---|---|
0 | Чт | PREG |
0 | Зп | PREG |
1 | Чт | SREG |
1 | Зп | CREG |
Контроллер ожидает приема команды и следующей за ней последовательности от 0 до 4 параметров в зависимости от команды. Если к приему следующей команды не были приняты все параметры, устанавливается флаг статуса, который указывает на некорректную команду.
Список команд
Набор команд контроллера состоит из восьми команд:
Команда | Число байтов-параметров |
---|---|
1. Сброс | 4 |
2. Старт дисплей | 0 |
3. Стоп дисплей | 0 |
4. Читать световое перо | 2 |
5. Загрузить курсор | 2 |
6. Разрешить прерывание | 0 |
7. Запретить прерывание | 0 |
8. Установить счетчик | 0 |
1. Сброс
Операция | A0 | Данные | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
Ст. б. | Мл. б. | |||||||||
Команда | Зп | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Параметры | Зп | 0 | S | H | H | H | H | H | H | H |
Зп | 0 | V | V | R | R | R | R | R | R | |
Зп | 0 | U | U | U | U | L | L | L | L | |
Зп | 0 | M | F | C | C | Z | Z | Z | Z |
Параметры:
S | Функция |
---|---|
0 | Нормальные символы |
1 | Недоступные (закрытые) символы |
H | H | H | H | H | H | H | H | Число символов в строке |
---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 2 |
0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 3 |
. | . | . | . | . | . | . | . | |
1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 80 |
1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | |
. | . | . | . | . | . | . | . | Не определено |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
V | V | Число строк в кадровом синхроимпульсе |
---|---|---|
0 | 0 | 1 |
0 | 1 | 2 |
1 | 0 | 3 |
1 | 1 | 4 |
R | R | R | R | R | R | Число строк на экране |
---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 1 |
0 | 0 | 0 | 0 | 0 | 1 | 2 |
0 | 0 | 0 | 0 | 1 | 0 | 3 |
: | ||||||
1 | 1 | 1 | 1 | 1 | 1 | 64 |
U | U | U | U | Высота линии подчеркивания |
---|---|---|---|---|
0 | 0 | 0 | 0 | 1 |
0 | 0 | 0 | 1 | 2 |
0 | 0 | 1 | 0 | 3 |
: | ||||
1 | 1 | 1 | 1 | 16 |
L | L | L | L | Число горизонтальных линий в строке (высота символа в пикселах) |
---|---|---|---|---|
0 | 0 | 0 | 0 | 1 |
0 | 0 | 0 | 1 | 2 |
0 | 0 | 1 | 0 | 3 |
: | ||||
1 | 1 | 1 | 1 | 16 |
C | C | Формат курсора |
---|---|---|
0 | 0 | Мигающий блок-символ* |
0 | 1 | Мигающий штрих под символом |
1 | 0 | Немигающий блок-символ* |
1 | 1 | Немигающий штрих под символом |
(*) Если экран темный и символы светлые, то в позиции курсора экран светлый и символы темные
Z | Z | Z | Z | Число символов в строчном синхроимпульсе |
---|---|---|---|---|
0 | 0 | 0 | 0 | 2 |
0 | 0 | 0 | 1 | 4 |
0 | 0 | 1 | 0 | 6 |
: | ||||
1 | 1 | 1 | 1 | 32 |
2. Старт дисплей (начать отображение)
Операция | A0 | Данные | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
Ст. б. | Мл. б. | |||||||||
Команда | Зп | 1 | 0 | 0 | 1 | S | S | S | B | B |
S | S | S | Число тактов между запросами ПДП |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 0 | 1 | 7 |
0 | 1 | 0 | 15 |
0 | 1 | 1 | 23 |
1 | 0 | 0 | 31 |
1 | 0 | 1 | 39 |
1 | 1 | 0 | 47 |
1 | 1 | 1 | 55 |
B | B | Число циклов ПДП в течение одного сеанса |
---|---|---|
0 | 0 | 1 |
0 | 1 | 2 |
1 | 0 | 4 |
1 | 1 | 8 |
Если разрешены прерывания со стороны контроллера, то начинаются запросы ПДП; если разрешен видеосигнал, то устанавливаются флаги разрешения прерывания и разрешения видео в регистре статуса.
3. Стоп дисплей (запретить отображение)
Операция | A0 | Данные | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
Ст. б. | Мл. б. | |||||||||
Команда | Зп | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
Видеосигнал запрещен. Строчные и кадровые импульсы присутствуют, сбрасывается флаг разрешения видео в регистре статуса. Требуется ввести команду начала отображения для возобновления отображения на экране.
4. Читать световое перо
Операция | A0 | Данные | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
Ст. б. | Мл. б. | |||||||||
Команда | Зп | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 |
Параметры | Чт | 0 | Позиция символа в строке | |||||||
Чт | 0 | Номер строки |
Контроллер определяет положение светового пера в следующих двух циклах чтения регистра параметров. Флаги регистра статуса не изменяются.
5. Загрузить курсор
Операция | A0 | Данные | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
Ст. б. | Мл. б. | |||||||||
Команда | Зп | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Параметры | Зп | 0 | Позиция курсора в строке | |||||||
Зп | 0 | Номер строки |
Контроллер загружает два байта-параметра в регистр положения курсора. Флаги регистра статуса не изменяются.
6. Разрешить прерывания
Операция | A0 | Данные | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
Ст. б. | Мл. б. | |||||||||
Команда | Зп | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
Устанавливается флаг разрешения прерывания регистра статуса. Прерывания разрешены.
7. Запретить прерывание
Операция | A0 | Данные | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
Ст. б. | Мл. б. | |||||||||
Команда | Зп | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
Сбрасывается флаг разрешения прерывания регистра статуса. Прерывания невозможны.
8. Установить счетчик
Операция | A0 | Данные | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
Ст. б. | Мл. б. | |||||||||
Команда | Зп | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 |
Устанавливается внутренний счетчик в соответствии с положением курсора в верхнем левом углу. Для этой операции зарезервированы два тактовых импульса.
Построение регистра статуса
Операция | A0 | Данные | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
Ст. б. | Мл. б. | |||||||||
Команда | Чт | 1 | 0 | IE | IR | LP | IC | VE | DU | FO |
IE (Interrupt Enable) - устанавливается и сбрасывается после команд разрешения и запрета прерываний. Также устанавливается после команды разрешения отображения и сбрасывается после команды сброс.
IR (Interrupt Request) - этот флаг устанавливается в начале последней строки на экране при условии, что установлен флаг разрешения прерывания. Сбрасывается после чтения регистра статуса.
LP - этот флаг устанавливается, если на входе светового пера присутствует активный уровень и загружен регистр светового пера. Сбрасывается после чтения регистра статуса.
IC (Improper Command) - этот флаг устанавливается, если количество параметров для команды велико или мало. Сбрасывается после чтения регистра статуса.
VE (Video Enable) - этот флаг показывает, что видеооперации с экраном разрешены. Устанавливается после команды разрешения отображения и сбрасывается после команды сброс.
DU (DMA Underrun) - этот флаг устанавливается при потере данных во время процесса ПДП. В этом случае процесс ПДП прерывается и экран затемняется после кадрового синхроимпульса. Сбрасывается после чтения регистра статуса.
FO (FIFO Overrun) - этот флаг устанавливается при переполнении буфера FIFO. Сбрасывается после чтения регистра статуса.
Функционирование
Управляющие символы из видеопамяти поступают в контроллер в виде восьмибитных символов. Однако отображаемый символ определяется только младшими семью битами. Это позволяет иметь знакогенератор только со 128-ю символами. Старший бит имеет специальную функцию: он определяет режим отображения - нормальное отображение (ст. б.=0); псевдографика или специальные коды (ст. б.=1). Существует два типа кодов управления символами: символьные атрибуты и атрибуты поля.
Под управлением выходных сигналов LA0, LA1, VSP и LTEN с помощью символьных атрибутов могут быть отображены псевдографические символы. Эти символы могут при помощи программирования (аналогично курсору) мигать или иметь повышенную яркость свечения. Частота мигания равна частоте кадров, деленной на 32. Повышенная яркость свечения активируется сигналом логической 1 на выходе HGLT контроллера.
Структура символьного атрибута
Ст. б. | Мл. б. | ||||||
---|---|---|---|---|---|---|---|
1 | 1 | C | C | C | C | B | H |
мигание | Повышенная яркость |
Символы псевдографики
Код символа CCCC | Выходы | Символ | ||||
---|---|---|---|---|---|---|
LA1 | LA0 | VSP | LTEN | |||
0000 | -1- | 0 | 0 | 1 | 0 | + |
-2- | 1 | 0 | 0 | 0 | ||
-3- | 0 | 1 | 0 | 0 | ||
верхний левый угол | ||||||
0001 | -1- | 0 | 0 | 1 | 0 | + |
-2- | 1 | 1 | 0 | 0 | ||
-3- | 0 | 1 | 0 | 0 | ||
верхний правый угол | ||||||
0010 | -1- | 0 | 0 | 1 | 0 | + |
-2- | 1 | 0 | 0 | 0 | ||
-3- | 0 | 0 | 1 | 0 | ||
нижний левый угол | ||||||
0011 | -1- | 0 | 0 | 1 | 0 | + |
-2- | 1 | 1 | 0 | 0 | ||
-3- | 0 | 0 | 1 | 0 | ||
нижний правый угол | ||||||
0100 | -1- | 0 | 0 | 1 | 0 | - |
-2- | 0 | 0 | 0 | 1 | ||
-3- | 0 | 1 | 0 | 0 | ||
верхнее ответвление | ||||||
0101 | -1- | 0 | 0 | 1 | 0 | ¦ |
-2- | 1 | 1 | 0 | 0 | ||
-3- | 0 | 1 | 0 | 0 | ||
правое ответвление | ||||||
0110 | -1- | 0 | 0 | 1 | 0 | + |
-2- | 1 | 0 | 0 | 0 | ||
-3- | 0 | 1 | 0 | 0 | ||
левое ответвление | ||||||
0111 | -1- | 0 | 1 | 0 | 0 | - |
-2- | 0 | 0 | 0 | 1 | ||
-3- | 0 | 0 | 1 | 0 | ||
нижнее ответвление | ||||||
1000 | -1- | 0 | 0 | 1 | 0 | - |
-2- | 0 | 0 | 0 | 1 | ||
-3- | 0 | 0 | 1 | 0 | ||
горизонтальная линия | ||||||
1001 | -1- | 0 | 1 | 0 | 0 | ¦ |
-2- | 0 | 1 | 0 | 0 | ||
-3- | 0 | 1 | 0 | 0 | ||
вертикальная линия | ||||||
1010 | -1- | 0 | 1 | 0 | 0 | + |
-2- | 0 | 0 | 0 | 1 | ||
-3- | 0 | 1 | 0 | 0 | ||
пересечение | ||||||
1011 | -1- | 0 | 0 | 0 | 0 | не определено |
-2- | 0 | 0 | 0 | 0 | ||
-3- | 0 | 0 | 0 | 0 | ||
1100 | -1- | 0 | 0 | 1 | 0 | специальный код |
-2- | 0 | 0 | 1 | 0 | ||
-3- | 0 | 0 | 1 | 0 |
Коды 1101, 1110 и 1111 запрещены.
Мигание активно при B=1, повышенная яркость - при H=1.
Указание относительного положения символа:
-1- над линией подчеркивания
-2- на линии подчеркивания
-3- под линией подчеркивания
Специальные коды
Специальные коды применяются для уменьшения затрат на память программ или на управление процессом ПДП.
Ст.б. | Мл.б. | ||||||
---|---|---|---|---|---|---|---|
1 | 1 | 1 | 1 | 0 | 0 | S | S |
S | S | Функция |
---|---|---|
0 | 0 | Конец строки |
0 | 1 | Конец строки, стоп ПДП |
1 | 0 | Конец экрана |
1 | 1 | Конец экрана, стоп ПДП |
Структура "атрибута поля"
Ст.б. | Мл.б. | ||||||
---|---|---|---|---|---|---|---|
1 | 0 | U | R | G | G | B | H |
H=1 повышенная яркость
B=1 мигание
U=1 инверсия видео
GG - GPA1, GPA0
Формат экрана
КР580ВГ75 может быть запрограммирован в режиме от 1 до 80 символов в строке и от 1 до 64 строк в кадре. Контроллер позволяет организовать чересстрочное отображение информации, при котором отображаются 1, 3 и т. д. строки, при этом 2, 4, и т. д. строки затемняются.
Формат символа
Высота символа программируется от 1 до 16. Счетчик строк может быть запрограммирован в двух режимах. В первом режиме (MODE 0) содержимое счетчика соответствует номеру строки, во втором (MODE 1) - всегда на единицу меньше. Режим MODE 0 используется со знакогенераторами, в которых адрес начинается с единицы и заканчивается нулем; режим MODE 1 - со знакогенераторами, в которых адрес начинается с нуля.
Положение линии подчеркивания также программируется (по высоте от 0 до 15). Если линия подчеркивания в строке установлена выше 7 (ст. б.=1), верхняя и нижняя строки затемняются. Если линия подчеркивания установлена выше высоты символа, она не видна.
Пример программирования
В одноплатном компьютере "Радио-86РК", описанном в журнале "Радио", контроллер программируется следующим образом.
1. Команда сброс.
A0 | Операция | Регистр | Данные | Комментарий |
---|---|---|---|---|
1 | Зп | CREG | 00000000 (00H) | Команда сброс |
0 | Зп | PREG | 01001101 (4DH) | 1-й параметр: нормальные символы, 80 символов в строке |
0 | Зп | PREG | 00011101 (1DH) | 2-й параметр: 1 строка в кадровом синхроимпульсе, 30 строк на экране |
0 | Зп | PREG | 10011001 (99H) | 3-й параметр: высота линии подчеркивания - 10, высота символа - 10 |
0 | Зп | PREG | 10010011 (93H) | 4-й параметр: режим MODE1, формат курсора -мигающий штрих под символом, 8 символов в строчном синхроимпульсе |
2. Команда запуска изображения на экране.
A0 | Операция | Регистр | Данные | Комментарий |
---|---|---|---|---|
1 | Зп | CREG | 00100111 (27H) | Команда начать отображение: 7 тактов между запросами ПДП, 8 циклов ПДП за один сеанс |
3. Теперь постоянно читаем регистр статуса и ждем, когда флаг IR, означающий начало последней строки, установится в 1.
A0 | Операция | Регистр | Данные | Комментарий |
---|---|---|---|---|
1 | Чт | SREG | Читаем регистр статуса в цикле и выходим из него по условию IR=1 |
4. Теперь за время хода последней строки надо успеть настроить контроллер ПДП, но это уже другая история.