Корвет/Радио 03-89/Оперативная память и графический дисплей
Данный материал защищён авторскими правами!
Использование материала заявлено как добросовестное, исключительно для образовательных некоммерческих целей. Автор: С. АХМАНОВ, Н. РОЙ, А. СКУРИХИН Источник: http://rkgames.h11.ru/infopk/doc/korvet_radio/doc2.htm |
Как мы уже отмечали в предыдущей статье, объем памяти «Корвета» может достигать 353 Кбайт; 96 Кбайт отводится под ПЗУ, 257 Кбайт занимает ОЗУ. При этом оперативная память делится следующим образом: 64 Кбайт - собственно ОЗУ микропроцессора, 192 Кбайт - ОЗУ графического дисплея (ГЗУ) и 1 Кбайт - память алфавитно-цифрового дисплея. Кроме того, все регистры контроллеров и адаптеров, установленных на плате «Корвета» (далее будем именовать их устройствами вода - вывода - УВВ), так же адресуются, как ячейки памяти. Итак, мы видим, что объем памяти ЭВМ существенно превышает 64 Кбайта, к которым процессор КР580ВМ80А может обращаться непосредственно.
Для того чтобы иметь возможность работать с такой памятью, имея всего 16 адресных линий, в «Корвете» предусмотрено специальное устройство — диспетчер памяти. Его задача формировать сигналы, разрешающие обращаться к тем или иным областям ОЗУ. Такой режим работы называется страничным.
Минимальный объем страницы памяти составляет 256 байт, она может быть и большего размера, максимальные параметры которого строго не регламентируются. Обычно устройства УВВ и ОЗУ алфавитно-цифрового дисплея сводятся на одну страницу объемом 2 Кбайт, а обращение к ГЗУ производится через окошко объемом 16 Кбайт.
Какие преимущества дает страничный режим работы ОЗУ в нашей ЭВМ?
Во-первых, вы можете легко изменять карту памяти, перемещая страницы в адресном пространстве. Это бывает необходимо при использовании на ПЭВМ различных операционных систем.
Во-вторых, вы можете отключать одни и подключать другие области памяти в ходе выполнения программы. Таким образом, например, создают электронный диск. В «Корвете» под электронный диск используется часть ГЗУ объемом 144 Кбайт.
В-третьих, бывают случаи, когда ваша программа настолько велика, что не умещается в 64 Кбайтах памяти. В этом случае удается размещать отдельные функции в других страницах ОЗУ и подключать их к основной программе по мере надобности.
Рассмотрим наиболее часто используемые конфигурации адресного пространства в «Корвете». Первая из них это конфигурация, необходимая для нормальной работы операционной системы СР/М-80. В этом случае карта памяти составляется так, чтобы в нее входили ресурсы УВВ и часть ОЗУ. Под УВВ отводится область адресного пространства емкостью 2 Кбайт от адреса F800H до адреса FFFFH (буква Н в конце числа означает, что это число шестнадцатеричное). Остальное адресное пространство емкостью 62 Кбайта отводится под ОЗУ, т, е. оно занимает адрес от 0 до F7FFH.
Другая часто используемая конфигурация относится к языку Бейсик. Поскольку Бейсик в основном располагается в ПЗУ, то нам необходимо включить его в карту памяти, которая будет иметь следующий вид: ПЗУ займет в ней объем 24 Кбайт с адреса 0 по 5FFFH; ОЗУ — от 6000Н по F7FFH, а УВВ — с F800H по FFFFH.
Если мы хотим использовать Бейсик, включающий в себя графические функции, то нам необходимо подключить к адресному пространству ГЗУ. В этом случае используется следующая карта памяти: ПЗУ с объемом 24 Кбайт от 0 по 5FFFH; ОЗУ—от 6000Н по BEFFH; УВВ — от BF00H по BFFFH и ГЗУ — от С000Н по FFFFH.
Обратите внимание, что в последнем случае в область УВВ не включена страница ОЗУ алфавитно-цифрового дисплея.
Теперь займемся вопросом: каким образом в «Корвете» происходит переключение карты памяти? В нем имеется довольно большое число устройств, подключенных к одним и тем же адресным линиям. Чтобы они не вступали в «конфликт» при обращении к ним процессора, в машине предусмотрен дешифратор старшего байта адреса, который и выбирает то или иное устройство, причем только одно.
Этот дешифратор программируемый. Это означает, что мы можем программно изменять те сочетания битов в старшем байте адреса, которые приводят к выбору того или иного устройства. Другими словами, в этом дешифраторе имеется несколько наборов ключей, которые обеспечивают доступ к устройствам «Корвета». Их может быть 32. Какой набор нам нужен в данном случае, определяет так называемый системный регистр.
Итак, чтобы изменить карту памяти, следует записать в системный регистр соответствующий номер. А где располагается этот регистр? Ведь мы говорили, что регистры «Корвета» также являются частью памяти машины и, следовательно, их адреса меняются при изменении карты памяти.
Так, например, системный регистр для конфигураций СР/М-80 и Бейсика, о которых мы вели речь выше, расположен по адресу FA7FH, для графического Бейсика — по адресу BF7FH.
Как мы видим, младший байт адреса системного регистра одинаков для всех конфигураций. Отличается только старший байт, который определяет адрес страницы.
Таким образом, в «Корвете» адресуются различные области памяти. Перейдем теперь к организации графического дисплея.
Прежде всего вспомним информационную емкость экранов. Для алфавитно-цифрового дисплея она составляет 64Х16 символов. Емкость графического дисплея 512Х256 точек. Для того чтобы иметь возможность совмещать изображение с графикой на одном экране, размер матрицы для изображения символов принят 8Х16 точек. Таким образом, мы видим, что количество точек на обоих дисплеях совпадает.
Раз мы изображаем на экране* дисплея 64Х16 символов, то для этого нам потребуется 1 Кбайт памяти. ОЗУ А/Ц дисплея, в зависимости от конфигурации памяти, лежит на разных страницах, для наших примеров с СР/М и Бейсика — с адресом FC00H. В некоторых конфигурациях ОЗУ дисплея может быть вообще отключено. Для формирования изображения символа используется знакогенератор объемом 8 Кбайт, в котором хранятся два набора из 256 символов,
При отображении символов на экране иногда возникает необходимость видоизменять изображение. Для этой цели обычно в алфавитно-цифровой дисплей передают вместе с кодом символа код его атрибута*. В «Корвете» атрибут служит для инвертирования изображения символа. Поэтому А/Ц ОЗУ имеет емкость не 1 Кбайт, а 1К девятиразрядных слов. Девятый бит и является атрибутом.
Атрибут переписывается автоматически при записи кода символа А/Ц ОЗУ из специального триггера инверсии. Для работы с атрибутом и контроля выводимой на экран информации служат два регистра: регистр управления отображением (его адрес на странице периферийных регистров ЗАН) и регистр состояния атрибута видеоинверсии (адрес 381-1 на той же странице).
Периферийные регистры размещены на странице с адресом FB00H для СР/М и Бейсика BF00H для графического Бейсика.
Назначение отдельных битов регистра управления отображением приведено на рис. 1.
Перейдем теперь к работе графического дисплея. Это устройство намного сложнее. Достаточно сказать, что объем памяти у него составляет 192 Кбайт. Сначала разберемся с памятью. ГЗУ содержит три банка памяти по 64 Кбайт в каждом. Они образуют три плоскости изображения. Реальная точка на экране дисплея получается из комбинации трех бит из этих плоскостей. Такое построение позволяет получать изображение восьми различных цветов. Поскольку число точек, одновременно изображенных на экране, равно 512Х256= 16 Кбайт и, следовательно, три плоскости занимают 48 Кбайт, то в ГЗУ могут разместиться четыре страницы, т. е. четыре независимых экрана. Их можно практически мгновенно переключать, изменяя два младших бита в регистре управления изображением.
Графическая память включается в адресное пространство «Корвета», как страница объемом 16 Кбайт. Ее начальный адрес может быть в зависимости от конфигурации 4000Н или С000Н. Эта память доступна как для чтения, так и для записи.
Рассмотрим процесс обращения к видеопамяти. Допустим, что мы хотим зажечь точку на экране, не повредив ничего остального. Как это сделать, если просто работать с видеопамятью? Для этого необходимо проделать следующие операции:
- Переключить карту памяти и подключить к адресному пространству требуемую плоскость ГЗУ.
- Считать байт, в котором находится бит, отвечающий за требуемую точку.
- Изменить с помощью логических операций содержимое этого бита так, чтобы получилась точка нужного цвета.
- Записать байт обратно в ГЗУ.
- Опять переключить карту памяти.
Эту последовательность операций необходимо проделать для каждой плоскости, поскольку точка на экране формируется битами трех плоскостей одновременно. Для уменьшения времени доступа к графическому дисплею стало необходимым применить аппаратную поддержку процесса зажигания точек и уменьшить требуемое для этой цели число команд процессора.
Какие же имеются механизмы ускорения работы с графикой? Мы располагаем двумя режимами: цветовым и послойным. В цветовом режиме обращение происходит ко всем трем плоскостям одновременно, а в послойном — отдельно к каждой плоскости.
Рассмотрим цветовой режим как основной при работе с графическим дисплеем. Каким образом можно работать одновременно с тремя плоскостями? Для этого служит специальный регистр цвета, структура которого приведена на рис. 2. Этот регистр расположен на той же странице, что и системный регистр. Его адрес на странице — BFH. Назначение разрядов регистра цвета в цветовом режиме следующее: бит 0—не используется; биты 1—3— задают маску логического цвета при записи в ГЗУ; биты 4—6—при чтении; бит 7—определяет цветовой режим.
Итак, прежде чем что-либо записывать в ГЗУ, мы должны внести в регистр цвета информацию о том, каким цветом мы хотим рисовать. При чтении изображений с экрана — аналогичным образом записать в регистр маску цвета чтения.
Познакомимся с процессом записи в ГЗУ. Предположим, что предстоит зажечь точку логического цвета номер 5. Это значит, что нам необходимо записать в регистр цвета двоичное число 1000101ХB. Здесь младший бит не имеет значения и обозначен как X, а буква В после числа означает, что оно двоичное. Биты 1—3 содержат двоичное представление числа 5 (5=101 В). Через маску логического цвета контроллеру графического дисплея передается, что в плоскость 0 будет записываться единица, в плоскость 1 — ноль, а в плоскость 2 — опять единица. Теперь мы выдаем байт от микропроцессора, в котором установлены биты единичного состояния, соответствующие тем точкам, которые нужно зажечь. При этом происходит следующее. Биты в ГЗУ, которые соответствуют зажигаемым точкам, изменят свое состояние. Остальные биты не изменят своего состояния. Таким образом, мы экономим по сравнению с процедурой непосредственного обращения к ГЗУ, описанной выше, сразу несколько операций микропроцессора. Таким образом, процесс рисования существенно убыстряется.
Кроме рисования, существует еще процедура закраски площади, ограниченной некоторой кривой заданного цвета. Здесь без чтения из ГЗУ не обойтись. Нам необходимо знать, дошли мы до границы или нет. Чтобы ускорить процедуру чтения из ГЗУ в «Корвете», также применен ряд аппаратных средств.
При процессе чтения из ГЗУ считывается одновременно по байту из каждой плоскости. Вслед за этим происходит аппаратное сравнение цвета каждой из восьми точек с цветовой маской, заданной в регистре цвета битами 4—6.
В результате формируется байт, содержащий информацию о результатах сравнения. Теперь легко проводить процесс закраски объекта. Мы записываем в регистр цвета маску для чтения, соответствующую цвету закраски. После этого считывается байт, определяющий цвет внутренней области. Если он равен нулю, то, значит граница не достигнута и можно продолжать закраску. Применение такого способа приводит к тому, что скорость закраски достигает трех миллионов точек в секунду.
Рассмотрим теперь послойный режим обращения к ГЗУ. Назначение битов регистра цвета приведены на рис. 3.
В данном случае бит 0—это маска значения бите, записываемого в ГЗУ; биты 1—3—выбор плоскостей при записи; биты 4—6 — для чтения; бит 7 — послойный режим (должен быть записан 0).
При этом, если мы хотим выбрать плоскость для записи, то соответствующий бит регистра цвета устанавливается на ноль, при чтении — на единицу.
Если для записи выбрано несколько плоскостей, то информация будет записана во все выбранные плоскости. При одновременном считывании из нескольких плоскостей информация объединяется.
В послойном режиме данные, поступающие из микропроцессора, также как и в цветовом, играют роль маски. Отличие заключается лишь в том, что маска в данном случае состоит из одного бита. Это младший бит регистра цвета. Допустим, что мы хотим в ГЗУ записать двоичное число 10011011В. При этом в соответствующем байте в ГЗУ биты 7, 4, 3, 1, 0 примут значения младшего бите в регистре цвета, а биты 6, 5, 2 не изменят своего состояния.
Как видно из блок-схемы, приведенной на рис. 4, несмотря на то, что системы отображения алфавитно-цифровой и графической информации у «Корвета» независимы, мы можем информацию выводить на один экран. Это достигается благодаря наличию специального устройства, называемого просмотровой таблицей. На нее подается последовательность битов из знакогенератора А/Ц дисплея и биты из трех плоскостей ГЗУ. При этом формируются четыре стандартных телевизионных сигнала R, G, В, I, которые подаются на видеоусилители монитора. Первые три сигнала (R — красный, G — зеленый, В — синий) определяют цвет точки. Интенсивность I позволяет накладывать поверх цветной точки изображение точек, формирующих символ. Таким образом, реально мы можем наблюдать на экране не 8, а 16 цветов. Отметим интересную особенность цветного дисплея «Корвета». При работе с ГЗУ мы имеем дело только с логическими цветами от 0 до 7. Присваивание физического цвета логическому происходит в просмотровой таблице.
Просмотровая таблица представляет собой скоростное ОЗУ, имеющее емкость 16 ячеек по четыре бита каждая. Для нормальной работы просмотровой таблицы в нее нужно занести 16 четырехразрядных слов, определяющих 16 физических цветов. Заполнение просмотровой таблицы происходит через специальный регистр. Расположен он на той же странице, что и системный регистр. Его относительный адрес на странице — FBH. Назначение битов этого регистра следующее: биты 0—3 — номера ячеек просмотровой таблицы; биты 4— 7 — содержание ячейки.
При этом бит 0 соответствует плоскости 0 в ГЗУ, бит 1 — плоскости 1, бит 2— плоскости 2, в бит 3 соответствует А/Ц ЗУ.
Последнее, что нам осталось рассмотреть, это, какие источники видеосигнала имеются в «Корвете». Их три. К каждому можно, в принципе, подключить телевизор.
Первый источник — это выход черно-белого алфавитно-цифрового дисплея. На этом выходе мы имеем стандартный видеосигнал, который можно подать на видеовход любого черно-белого телевизора. Второй источник — это выход на цветной графический дисплей. Сюда поступают четыре сигнала с просмотровой таблицы и синхроимпульсы. К этому выходу подключается цветной монитор. Третий источник имеет на выходе, также как и первый, стандартный видеосигнал с той лишь разницей, что синхроимпульсы здесь смешаны с сигналом, поступающим с выхода четырехразрядного цифроаналогового преобразователя, на вход которого поступают сигналы RGBI с просмотровой таблицы. Если подключить к этому источнику черно-белый телевизор, то можно будет выводить на него черно-белую графическую информацию в градациях яркости.
С. АХМАНОВ, Н. РОЙ, А. СКУРИХИН
Сканирование и обработка: А. Болтаевский, 24.06.2000