Ega vga что это
Смена режима, как правило, выполняется через BIOS, так как эта операция не критична ко времени выполнения, но весьма трудна для программирования. Графическая плата IBM поддерживает два типа режимов. Вопервых, алфавитно-цифровой режим (называемый также "альфа" или "текстовым"), который позволяет вывести только 256 различных символов (при использовании специальных методов программирования EGA позволяет вывести до 512 символов одновременно). Во-вторых, графический режим, позволяющий осуществить индивидуальный вывод на экран любого элемента изображения (пикселя), а также 256 предопределенных символа. Графический режим иногда называют APA (All Point Addressable - адресующий все точки), поскольку он поддерживает индивидуальное управление всеми элементами изображения (пикселями).
EGA имеет 5 текстовых и 7 графических режимов. Текстовые режимы имеют номера 0 - 3 и 7. Режимы 0 - 3 не отличаются от режимов 0 - 3 CGA, а режим 7 близок к режиму 7 монохромного адаптера. Графические режимы 4 - 6 EGA не отличаются от режимов 4 - 6 CGA. Новые графические режимы (предусматривающие высокое разрешение и/или большее количество цветов) пронумерованы 0dh - 10h. После установки режима информация может быть записана на экран (или считана с него) с помощью вызова функций BIOS или непосредственного доступа к видеопамяти.
VGA позволяет расширить приведенный список еще на три дополнительных режима: монохромный и цветной высокого разрешения и цветной графический с низким разрешением, но допускающий использование 256 цветов. Несмотря на то, что 256-цветный режим имеет низкое разрешение, при его использовании некоторые изображения выглядят более реалистично, поскольку за счет большого количества цветов возможно отображение мелких деталей изображения. Эффективное применение таких деталей может повысить кажущееся разрешение изображения.
IBM сохраняет совместимость между обращениями к BIOS и адресацией памяти для пронумерованных режимов, поэтому использование имеющихся режимов возможно в любом случае. За счет применения режимов 0 - 7 и параметров, которые приводятся в таблицах настоящего руководства, написанные программы будут совместимы со всеми типами существующих адаптеров и теми адаптерами, которые предполагается производить.
В этой главе описаны обращения к функциям 0 - 7, то есть функциям, которые устанавливают состояние экрана и его окружения (режим, размещение курсора, и т.д.). Эти функции являются общими для всех типов видеоадаптеров IBM, кроме того, EGA и VGA позволяют несколько расширить возможности. Например, эти адаптеры позволяют использовать дополнительные страницы дисплея.
Архитектура VGA
Как и его собрат EGA, интерфейс VGA включает в себя следующие подсистемы, они выступают в роли главных:
- Графический контроллер. Он обеспечивает обмен данными, осуществляющийся между центральным процессором и видео-памятью. Также может выполнять битовые операции над передаваемыми данными.
- Видеопамять. В ней размещаются данные, которые отображаются на мониторе. 256 кБ DRAM разделились на четыре цветовых слоя: по 64 кБ.
- Последовательный преобразователь. Осуществляет функцию преобразования данных из видеопамяти в поток битов, который передается непосредственно контроллеру.
- Контроллер атрибутов. Преобразует входные данные в цветовые значения, используя палитру.
- Синхронизатор. Берет на себя контроль над временны́ми параметрами видеоадаптера, а также осуществляет переключение цветовых слоев.
- КонтроллерЭЛТ (CRT). Производит генерацию сигналов синхронизации для ЭЛТ.
EGA, в отличие от CGA, а также его главные подсистемы, располагается в единой микросхеме, что, в свою очередь, позволяет уменьшить размер видеоадаптера. В ПК с интерфейсом PS/2 VGA-адаптер вмонтирован непосредственно в материнскую плату.
Стандартные режимы
- 320×200 пикселов, 4 цвета.
- 320×200 пикселов, 16 цветов.
- 320×200 пикселов, 256 цветов (новый для VGA).
- 640×200 пикселов, 2 цвета.
- 640×200 пикселов, 16 цветов.
- 640×350 пикселов, монохромный.
- 640×350 пикселов, 16 цветов.
- 640×480 пикселов, 2 цвета. При разрешении 640×480 пиксел имеет пропорции 1:1.
- 640×480 пикселов, 16 цветов.
Исходные данные
Регистры (устанавливаются до вызова функции):
- AH: устанавливается 1
- CH: номер начальной строки (линии развертки в текстовой строке)
- CL: номер конечной строки (линии развертки в текстовой строке)
С помощью приведенной ниже программы формируется изображение курсора, состоящее из двух верхних линий области расположения символа.
VGA (Video Graphics Array) — стандарт, разработанный для видеоадаптеров и мониторов. Стандарт был создан компанией IBM в 1987 году, предназначался для компьютеров PS/2 Model 50, а также более старшей линейки. Стандарту VGA следовало большинство производителей видеоадаптеров.
В отличие от всех предыдущих видеоадаптеров IBM (MDA, CGA, EGA), видеоадаптер VGA использует аналоговый сигнал для передачи цветовой информации. Такой переход был обусловлен необходимостью создания нового кабеля с меньшим числом проводов. Кроме того, аналоговый сигнал дает возможность использовать VGA-мониторы с последующими видеоадаптерами, с возможностью вывода большего количества цветов.
Стандартом-последователем VGA официально считается стандарт IBM XGA. По факту, он был замещен различными расширениями к VGA. Эти расширения получили название SVGA.
Кроме того, понятие VGA зачастую используется и в качестве обозначения разрешения 640×480, вне зависимости от аппаратного обеспечения по выводу изображения. Впрочем, это не совсем правильно (так, режим 640х480 с 16-, 24- и 32-битной глубиной цвета не имеет поддержки адаптером VGA, но при этом он может быть сформирован на мониторе, поддерживающем адаптеры VGA. Это возможно реализовать благодаря SVGA-адаптерам. Кроме того, данный термин применяется для обозначения 15-контактного D-subminiature разъема VGA, который предназначен для передачи аналоговых видеосигналов с разными разрешениями.
Пример на ассемблере:
IV Контроллер ЭЛТ
Контроллер атрибутов - в графических режимах управляет цветами. Значениям цветовых атрибутов ставится в соответствие определенный цвет при помощи таблицы цветовой палитры. Эта таблица ставит в соответствие четырем битам из видеопамяти шесть битов цветовой информации. Для ЕGA эта информация поступает непосредственно на дисплей, а для VGA - преобразуется в соответствии с таблицей цветов тремя ЦАП в RGB-сигнал и передается на дисплей. Контроллер ЭЛТ выполняет следующие функции: вырабатывает сигналы управления работой ЭЛТ, определяет формат экрана и символлов текста, определяет форму курсора, управляет световым пером, управляет скроллингом содержимого экрана. Синхронизатор управляет всеми временными параметрами видеоадаптера.
Ограниченные возможности цветного графического адаптера IBM (CGA) стали очевидны после того, как графика стала играть все большую роль в деловых применениях PC. CGA был разработан для дешевых и широко распространенных бытовых телевизоров и композитных мониторов. Вертикальное разрешение CGA равно 200 строк. Горизонтальное разрешение 320 строк, хотя на композитных и RGB-мониторах можно использовать 640 строк.
Из-за высокой стоимости памяти разработчики были вынуждены ограничить ее размер. CGA снабжен достаточной памятью (16 К) для поддержки 4 цветов при разрешении 320х200 (такое разрешение наилучшим образом используется на бытовых телевизорах). При этом, однако, 16К не хватает для того, чтобы использовать более 2 цветов в режиме разрешения 640х200, кроме того, в этом случае один из цветов должен быть черный. Даже 4-цветный режим ограничивает пользователя 2 наборами по 4 цвета в каждом, хотя для фона может использоваться любой из цветов.
Когда стоимость микросхем памяти и прочих компонентов компьютеров стала снижаться и микрокомпьютеры пришли на смену большим системам, пользователей перестал устраивать ограниченный выбор цветов CGA. Длительная работа с экранным разрешением 320х200 утомительна для глаза, поэтому большинство графических систем снабжается вторым монитором (с неграфическим разрешением 720х350) для работы с текстом. В результате некоторые фирмы приступили к разработке плат для поддержки высокого графического разрешения с использованием 16 и более цветов. Компания Hercules Computer Technologies выпустила плату Hercules Card, позволяющую использовать для монохромной графики монохромный монитор высокого разрешения.
Нестандартные режимы (X-режимы)
Путем перепрограммирования VGA можно было достичь более высоких разрешений, по сравнению со стандартными режимами интерфейса. Наиболее распространенными «нештатными» режимами являлись:
- 320×200, 256 цветов, 4 страницы. Ничем внешне не отличается от режима 13h (320×200, 256 цветов), режим имеет четыре видеостраницы, что позволяет реализовать двойную и даже тройную буферизацию.
- 320×240, 256 цветов, 2 страницы. В данном режиме страниц меньше, но квадратные пиксели.
- 360×480, 256 цветов, 1 страница. Максимальное разрешение на 256 цветах, возможное для реализации в рамках VGA.
Все вышеперечисленные режимы используют плоскостную организацию видеопамяти, похожую на используемую в 16-цветных режимах. Однако она использует для формирования цвета по 2 бита из каждой плоскости, а не по одному. Такая организация видеопамяти позволяет задействовать всю видеопамять карты, а не только плоскость 0 в 64К, для формирования 256-цветной картинки. А это, в свою очередь, дает возможность использования высоких разрешений/многих страниц. Для работы с этой памятью используется тот же секвенсер, что и в 16-цветных режимах.
Однако, ввиду особенностей контроллера видеопамяти, процесс копирования данных в видеопамять происходит вчетверо быстрее, чем в режиме 13h.
Термин «X-режим» (Mode X) был введен Майклом Абрашем в 1991 году. Он применялся для обозначения нестандартного режима 320×240 с 256 цветами. Данный режим был открыт, путем изучения закрытой документации компании IBM, различными программистами независимо друг от друга. Термин получил известность благодаря статьям Майкла Абраша в журнале «Dr. Dobb’s Journal».
ООО "Альтербит", 197183, Санкт-Петербург, Комендантский проспект, 2 схема проезда
Телефон: (812) 309-2602 ← Звони если хочешь купить сервер, схд, компьютер
Привет хабр — в этой статье я собираюсь поделиться своими успехами в освоении ПЛИС Altera Cyclone III. После мигания лампочками и игр со счетчиками — решил сделать что то более серьезное. Сделал я простейший VGA адаптер. Об основных его частях и пойдет речь. Статья больше ориентирована на начинающих, так как для опытных эта задача не составит труда, но для освоения, на мой взгляд — хорошая тренировочная задача. Эксперименты я свои провожу на отладочной плате Altera DE0. Описывать схему я буду на Verilog, Среда — Quartus II v 12.0. Итак — добро пожаловать под кат:
- Графический контроллер (Graphics Controller), посредством которого происходит обмен данными между центральным процессором и видеопамятью. Имеет возможность выполнять битовые операции над передаваемыми данными.
- Видеопамять (Display Memory), в которой размещаются данные, отображаемые на экране монитора. 256 кБ DRAM разделены на четыре цветовых слоя по 64 кБ.
- Последовательный преобразователь (Serializer или Sequencer) — преобразует данные из видеопамяти в поток битов, передаваемый контроллеру атрибутов.
- Контроллер атрибутов (Attribute Controller) — с помощью палитры преобразует входные данные в цветовые значения.
- Синхронизатор (Sequencer) — управляет временны́ми параметрами видеоадаптера и переключением цветовых слоёв.
- Контроллер ЭЛТ (CRT Controller) — генерирует сигналы синхронизации для ЭЛТ.
- Синхронизатор — частота 50 мегагерц для нас не очень удобна, поэтому её придется немного изменить
- Контроллер ЭЛТ, который будет выдавать сигналы синхронизации в соответствии с требованиями стандарта VGA
- Генератор картинки — будем использовать для отладки — блок будет рисовать простейшую картинку и выдавать её контроллеру ЭЛТ
Синхронизатор
Начнем с того, что лезем на Английскую Вики и смотрим Signal timings для VGA, откуда узнаём, что частота синхрогенератора должна быть 25,175 МГц.
Вот нам и первая задача — сделать из 50 МГц — 25.175 МГц. Поможет нам в этом деле PLL или ФАПЧ.
При помощи Mega Wizard'а создаём наш PLL с нужными настройками. Для этого идем Tools/MegaWizard Plug-InManager. Там выбираем тип выходного файла Verilog HDL I/O ALTPLL и настраиваем его — устанавливаем входную частоту и затем её преобразовываем. Нам нужно получить частоту 25,175 МГц, при этом мы можем только умножать и делить на целое число, то есть нам нужно перевести число 0,5035 в дробь. Можно умножить на 5035 и поделить на 10000, но заметим, что можно сократить оба числа на 5. Получаем дробь 1007 / 2000. При этом визард сам приблизит требуемый множитель доступной ему дробью. Включаем полученный модуль в проект подключаем на его вход наш клок с платы, а для выхода создаём wire, который потом куда нибудь заведем, главная цель этого пункта достигнута — получить частоту 25,175 МГц.
Контроллер ЭЛТ
Генераторы синхроимпульсов
Двигаемся дальше. Теперь нам нужно создать модули, которые выдают синхросигналы, удовлетворяющие таймингам горизонтальной и вертикальной синхронизации, то есть вот этому для горизонтальной синхрониции:
То есть мы должны перед выдачей данных подержать линию синхронизации в высоком состоянии время А, потом прижать к земле на время B, потом перевести в высокое состояние, подождать время C и только потом идет поток данных — лучик начинает пробегать строчку за время D и мы за это время должны успеть установить все пиксели с частотой 25,175 мегагерц и так для каждой строки. Вертикальная синхронизация работает почти так же, только вместо пикселей мы передаём строчки и за один период синхроимпульса отрисовываем весь кадр.
Задача определилась — создать блок, который реализует описанную выше последовательность, принимая на вход частоту VGA_CLK, из входов еще добавим, пожалуй, сигнал сброса. Реализация такого блока не проста, а очень проста:
При периоде 1/VGA_CLK = 0,03972194637537239324726911618669 микросекунд нам нужно 24 такта на A, 95 на B, 48 на C, и 640 на D. То же самое и для вертикальной синхронизации, но тут удобнее тактироваться не по тактам частоты в 25.175 мегагерц, а по восходящим фронтам сигнала горизонтальной синхронизации, тогда все задержки можно считать в периодах отрисовки строчки. Кроме того у нас есть область «холостого хода» на экране, реально — по тактам экран чуть больше, а рисовать мы должны только в видимой области, поэтому желательно еще, чтобы модуль нам сообщал текущие координаты лучика, да и если мы собираемся назначать каждому пикселю какой то цвет — без знания текущей позиции луча не обойтись.
Модуль вывода
Собственно импульсы сгенерированы, координаты точки известны, осталось только вовремя включать нужный цвет, пока лучик пробегает строчку — для этого создадим модуль, которому на вход идут сигналы синхронизации, частота 25,175 МГц, 3 шины цвета и координаты, а выход — 4х битный R-2R ЦАП для каждого цвета, ну и далее — VGA разъем
Для проверки системы — сгенерируем какую нибудь картинку — этот блок описан не мной, взял его из экзамплов алтеровских, ну тут в общем то не с чем разбираться — нам от этого модуля нужна только картинка
Получилась вот такая вот структурная схема:
Ну и видео работы:
В общем — первый шаг с созданию своей видеокарты сделан — осталось приделать видеопамять и связать это всё с внешним контроллером — например STM32. В перспективе хочется сделать, чтобы контроллер генерировал видеопоток и посылал его видеоадаптеру, а тот выводил на экран. О практическом смысле этого всего говорить конечно не стоит — вещи уже устаревшие и довольно примитивные, всё делалось лишь с целью обучения и закрепления навыков, где то конечно тут набыдлокодил, так что если есть какие то вопросы, советы и замечания — пишите в комментариях
Изначально персональные компьютеры IBM PC комплектовались видеоадаптером MDA с монохромным диплеем. Этот адаптер имел небольшую разрешающую способность, не мог оторажать графическую информацию и был монохромным. Через некоторое время небольшая фирма Hercules Computer Technology выпустила монохромный видеоадаптер Hercules, который имел возможность вывода графики и имел большую разрешающую способность. CGA стал первым цветным видеоадаптером фирмы IBM. Он уже обеспечивал возможность отбражать цветную графическую и текстовую информацию, но имел слишком маленькую разрешающую способность. Затем IBM выпустила два, наиболее распространенных в настоящее время видеоадаптера EGA и VGA. Они созданы на другой элементной базе и имеют лучшую, чем у CGA, разрешающую способность при большем числе отображаемых цветов.
В последнее время различные фирмы - производители видеоадаптеров выпустили большое количество плат, превосходящи по своим возможностям VGA. Эти платы, которые можно объединить под общмим названием Super VGA, не имеют пока единого стандарта. Фирма IBM начала выпуск нового видеоадаптера XGA, который, как предполагается, станет новым стандартом для компьютеров на базе процессоров Intel 386/486.
Видеоадаптер содержит встроенный графический процессор, значительно увеличивающий его возможности и скорость работы. XGA аппаратно поддерживает перерисовку изображений в окнах экрана. При обмене данными между видеопамятью и основной памятью сам XGA вместо цетрального процессора реализует управление шиной данных, что позволяет быстро передавать изображение на экран. Следует также отметить, что предусмотрена совместимость видеоадаптеров VGA и XGA на уровне регистров. Базовая конфигурация XGA содержит 512 Кбайт видеопамяти, что обеспечивает разрешение 1024*768 пикселов при 16 цветах. Увеличение объема видеопамяти до 1 Мбайта при той же разрешающей способности позволяет получить 256 цветов.
Исходные данные
Использование комбинации EGA/монохромный монитор возможно только для режимов 7 и 0fh (эти режимы могут не поддерживать комбинацию EGA/ цветной монитор).
При необходимости сохранения экранной памяти при переустановке режима следует задать значение старшего бита регистра AL равным 1. Это делается путем увеличения номера режима на 80h.
Программа, приведенная ниже, позволяет установить цветной графический режим с разрешением 640х350 и изобразить линию от левой до правой границы экрана вдоль строки 10 всеми возможными цветами (вызов функции ch BIOS). Режим 10h будет сохранен после выполнения программы. Для возвращения в текстовый режим следует дать команду MODE CO80.
В чем отличие VGA от EGA?
VGA аналогичен EGA, учитывая плоскостную видеопамять в 16-цветных режимах и секвенсор для доступа процессора к ней. Однако, имеются и исключения, отличающие два этих стандарта:
АРХИТЕКТУРА ВИДЕОАДАПТЕРОВ EGA И VGA
ВИДЕОАДАПТЕРЫ EGA И VGA УСЛОВНО ДЕЛЯТСЯ НА ШЕСТЬ ЛОГИЧЕСКИХ БЛОКОВ, ОПИСАНИЕ КОТОРЫХ ПРИВЕДЕНЫ НИЖЕ
II Графический контроллер
Графический контроллер осуществляет обмен данными между видеопамятью и процессором. Он может выполнять над данными, поступающими в видеопамять, простейшие логические операции: И, ИЛИ, ИСКЛЮЧАЮЩЕЕ ИЛИ, циклический сдвиг. Таким образом, видеоадаптер может выполнять часть работы по обработке видеоданных. Хотя процессор может читать данные только из одного цветового слоя, запись данных в регистры-защелки происходит из всех цветовых слоев. Эту особенность можно использовать для быстрого копирования областей экрана. Во время цикла чтения данных из видеопамяти, графический контроллер может выполнять операцию сравнения цветов. В отличие от обычной операции чтения. когда читается только один цветовой слой, при операции сравнения цветов графический контроллер имеет доступ ко всем четырем слоям одновременно. В случае совпадения вырабатывается определенный сигнал.
Совместимость с ранними моделями адаптеров
Самой большой проблемой среди ранних моделей графических плат высокого разрешения является отсутствие стандарта и возможности работать в режиме CGA. Кроме того, методы программирования, которые применялись в этих платах, отличаются от методов, используемых CGA. Адресация EGA является следствием и совместима с CGA, снабжена расширением доступной памяти и дополнительной поддержкой BIOS для обеспечения высокого разрешения. Однако EGA тоже не лишен недостатков. Большое число регистров и режимов работы затрудняет программирование, если не полагаться исключительно на программы BIOS, которые характеризуются низким быстродействием. Большинство регистров доступно только для записи; часто бывает невозможно определить текущее состояние адаптера. Указанные трудности мешают разработке многозадачных систем и резидентных программ, которые требуют сохранения видеосостояния до переключения задачи. Так же как и плата Hercules, EGA с монохромным монитором не поддерживает графику CGA.
В апреле 1987 года IBM объявила о начале выпуска компьютеров серии PS/2. Эти компьютеры оснащены новым графическим устройством, называемым VGA. VGA очень похож на EGA. VGA позволяет расширить некоторые функции EGA и дополнить несколькими режимами высокого разрешения и режимом низкого разрешения, позволяющим использовать 256 цветов. Однако для программистов наиболее важным отличием является использование регистров чтения и записи. VGA позволяет работать с аналоговыми мониторами, тогда как EGA использует дисплеи цифрового типа.
ПРИМЕЧАНИЕ:
Это отличие, которому автор уделил всего одну фразу, на самом деле является революционным шагом в видеотехнике. Если при цифровом кодировании цветовых сигналов, выдаваемых адаптером на вход монитора, набор цветов и оттенков определяется исключительно возможностями монитора, то при аналоговом представлении видеосигналов, когда каждая из цветовых составляющих (R - красная, G - зеленая и B - синяя) представляется уровнем напряжения в диапазоне от 0 до 1В, а мониторы снабжаются прецизионными видеоусилителями, диапазон отображаемых цветов и оттенков ограничивается исключи тельно возможностями видеоадаптеров. Так как мониторы аналогового типа обладают значительным запасом точности отображения цвета, появляется возможность при появлении новых моделей адаптеров с более высоким разрешением и цветовым диапазоном использовать те же самые мониторы. Иными словами, аналоговые мониторы становятся инвариантными к типу видеоадаптеров.
Так же как и EGA, VGA поддерживает работу в монохромном и CGA-совместимом режимах. Более того, эти режимы поддерживаются как на монохромных, так и на цветных мониторах.
Степень совместимости режимов EGA/VGA может быть определена по поддержке EGA программ BIOS, выполняемых по прерыванию INT 10h. Оригинальные программы BIOS настраиваются на прерывание INT 42h, тогда как EGA помещает свой код BIOS по прерыванию INT 10h. BIOS EGA использует старые программы для поддержки отдельных функций, поэтому правильнее говорить о расширении BIOS, а не о замене старых функций новыми. Прежние обращения к BIOS поддерживаются полностью, а выполнение новых не противоречит старым.
Обращения к BIOS, как правило, совместимы между различными типами IBM-(и совместимых с IBM) адаптеров, при этом отличия обусловлены различными аппаратными реализациями интерфейсных портов. Архитектуры адаптеров Монохромного/CGA и EGA/VGA совершенно различны. Оригинальные адаптеры основаны на графическом контроллере Motorola 6845, в то время как EGA и VGA используют микросхемы разработки IBM. Конечно, многие изготовители разработали свои наборы микросхем, которые почти идентичны. Несколько регистров EGA/VGA имитируют работу микросхемы 6845; те, которые отличаются, описаны в главах по программированию регистров.
Несмотря на некоторые различия среди адаптеров (обусловленные в основном типом дисплея), IBM включает поддержку для режимов эмуляции CGA и MDA, которые позволяют работать с большинством функций и реализовать большинство особенностей. Например, алфавитно-цифровой монохромный режим EGA преобразует набор символов в такой же, как у MDA. И если VGA в режиме CGA использует сдвоенную развертку (чтобы из 400 линий адресуемыми были только 200), EGA обладает возможностью переключения в режим обычного монитора с кадровым разрешением 200 строк.
Графические режимы
В отличие от своих предшественников (CGA и EGA), видеоадаптер VGA обладал видеорежимом с квадратными пикселами (экран с соотношением сторон 4:3). Адаптеры CGA и EGA имели вытянутые по вертикали пикселы.
Комментарии
Эта функция позволяет установить размер курсора. Предусмотрено определение первой и последней линий (имеются в виду линии или строки развертки), ограничивающие область расположения символа (установка начальной линии вверху области, а конечной - внизу области необязательна, то есть курсор может быть установлен в середине описанной области). Следует отметить, что в графическом режиме курсор отсутствует.
Для определения начальной и конечной линий требуются только 4 младших бита. Значения битов 5 и 6 всегда устанавливаются равными 0. Линия 0 является самой верхней линией области расположения символа. Курсор может быть отключен установкой первой и последней строки ниже об
ласти расположения символа. При работе с EGA установка значения начальной строки, большего значения конечной строки, приводит к "перевороту" курсора, в результате чего отображается двойная линия (это напоминает инверсное отображение курсора на поле символа). VGA не поддерживает сдвоенный курсор; при установке номера начальной строки, большего номера конечной строки, курсор на VGA просто не отображается.
Текстовые режимы
Символы в стандартном тестовом режиме формируются в ячейке 9×16 пикселов, впрочем, допускается использование шрифтов и других размеров: 8—9 пикселов в ширину и 1—32 пиксела в высоту. Обычно, размеры самих символов меньше, поскольку часть пространства уходит на создание зазора между символами. Функция по выбору размера шрифта в BIOS отделена от функции по выбору видеорежима, это позволяет использовать различные комбинации режимов со шрифтами. Допускается загрузка восьми и одновременный вывод на монитор двух различных шрифтов.
VGA BIOS содержит следующие виды шрифтов, а также функции для их загрузки/активации:
- 8×16 пикселов (стандартный шрифт VGA),
- 8×14 (для совместимости с EGA),
- 8×8 (для совместимости с CGA).
Обычно, данные шрифты соответствуют кодовой странице CP437. Также имеется поддержка программной загрузки шрифтов. Это позволяет использовать ее, к примеру, для русификации.
Обращения к BIOS.
BIOS EGA предусматривает 20 основных программ для работы с экраном. Эти функции пронумерованы от 0 до 13h. Для доступа к функции необходимо поместить ее номер в регистр AH, после чего выполнить прерывание INT 10h. Для работы большинства программ требуются дополнительные исходные данные, которые должны быть помещены в регистры AL, BX, CX и/или DX. В главах 2, 3 и 4 дано подробное описание каждой функции, а также приведены замечания о работе таблицы состояний регистров и примеры программ на языках ассемблера и Turbo-Pascal. Описаны также различия между старыми (CGA) и новыми обращениями. Как уже отмечалось ранее, использование вызовов BIOS в виде макрокоманд может помочь переходу к регистровому программированию и другим операционным системам.
Каждая программа, написанная на ассемблере, является выполняемой, поэтому преобразование EXE-файла в COM-файл не требуется. Программа на языке Turbo-Pascal дает тот же результат, что и версия на ассемблере, однако структура программы может отличаться. Простота работы с вызовами BIOS объясняется тем, что для обращения достаточно установить соответствующие значения всех необходимых регистров и выполнить прерывание INT 10h. Загрузка каждого из требующихся регистров со значениями обязательна. При наличии опыта программирования BIOS для CGA можно совершить ошибку, пропустив требуемый регистр, особенно номер страницы в графических режимах, поскольку CGA не поддерживает графические страницы.
Стандартные режимы:
- 40×25 символов, 16 цветов, разрешение 360×400 пикселов.
- 80×25 символов, 16 цветов, разрешение 720×400 пикселов.
- 80×25 символов, монохромный, разрешение 720×400 пикселов.
При применении шрифтов меньшего размера, чем стандартный 8×16, можно добиться увеличения количества строк в текстовом режиме. Например, если включить шрифт 8×14, то будет доступно 28 строк. А если 8×8, то количество строк увеличится до 50 (как в режиме EGA 80×43).
I Видеопамять
Видеопамять адаптеров EGA и VGA разделена на четыре банка, или на четыре цветовых слоя. Эти банки размещаются в одном адресном пространстве таким образом, что по каждому адресу расположено четыре байта (по одному байту в каждом банке). Какой из банков памяти используется для записи или чтения данных процессором, определяется при помощи установки нескольких регистров адаптера. Так как все четыре банка находятся в одном адресном пространстве, то процессор может производить запись во все четыре банка за один цикл записи. Благодаря этому некоторые операции, например заполнение экрана, происходят с большей скоростью. В том случае, когда записсь во все четыре банка не требуется, можно разрешать или запрещать запись во все четыре банка при помощи регистра разрешения записи цветового слоя. Для операции чтения в каждый момент времени может быть разрешен с помощью регистра выбора читаемого цветового слоя только один цветовой слой.
В большинстве режимов видеоадаптера видеопамять разделена на несколько страниц. При этом одна из них является активной и отображается на экране. При помощи функций BIOS или программирования регистров видео-адаптера можно преключать активные страницы видеопамяти. Вывод информации может производиться как в активную, так и в неактивные страницы видеопамяти.
Видеопамять в текстовом режиме
Для кодирования каждого знакоместа экрана используется два байта: первый из них содержит ASCII код отображаемого символа, второй - атрибуты символа. ASCII коды символов экрана располагаются в нулевом цветовом слое, а их атрибуты - в первом цветовом слое. Атрибуты определяют цвет символа и цвет фона. Благодаря такому режиму хранения информации достигается значительная экономия памяти. При отображении символа на экране происходит преобразование его из формата ASCII в двумерный массив пикселов, выводимых на экран. Для этого преобразования используется таблица трансляциии символов (таблица знакогенератора). Таблица знакогенератора хранится во втором слое видеопамяти. При непосредственном доступе к видеопамяти нулевой и первый цветовые слои отображаются на общее адресное пространство с чередованием байтов из слоев. Коды символов имеют четные адреса, а их атрибуты - нечетные. При установке текстовых режимов работы видеоадаптеров EGA и VGA BIOS загружает таблицы знакогенератора из ПЗУ во второй цветовой слой видеопамяти. Впоследствие таблицы используются при отображении символов на экране.
Благодаря этому можно легко заменить стандартную таблицу знакогенератора своей собственной. Это широко применяется при русификации компьютеров. EGA и VGA обеспечивают возможность одновременной загрузки соответственно четырех и восьми таблиц знакогенераторов в память. Каждая таблица содержит описание 256 символов. Одновременно активными могут быть одна или две таблицы знакогенератора. Это дает возможность одновременно отображать на экране до 512 символов. При этом один бит из байта атрибутов указывает, какая из активных таблиц знакогенератора используется при отображении данного символа. Номера активных таблиц знакогенератора определяются регистром выбора знакогенератора.
EGA поддерживает два размера для матриц символов: 8х8 и 8х14 пикселов. Один из этих наборов символов автомаически загружается BIOS в видеопамять при выборе текстового режима. Так как VGA имеет большую разрешающую способность, то его матрица символа имеет размеры 9х16. На каждый символ отводится 32 байта. Первая таблица имеет в видеопамяти адреса: 0000h-1FFFh, вторая: 2000h-3FFFh, . , восьмая: E000h-FFFFh. Каждый символ, отображаемый на экране в текстовом режиме, определяется не только своим ASCII кодом, но и байтом атрибутов. Атрибуты задают цвет символа, цвет фона, а также некоторые другие параметры. Биты D0-D2 байта атрибутов задают цвет символа, D4-D6 цвет фона.
Если активной является одна таблица знакогенератора, то D3 используется для управления интенсивностью цвета символа, что позволяет увеличить количество воспроизводимых цветов до 16. Если одновременно определены две таблицы знакогенератора, то D3 задает таблицу знакогенератора, которая будет использована для отображения данного символа. Бит D7 выполняет две различные функции в зависимости от состояния регистра режима контроллера атрибутов. Данный бит либо управляет интенсивностью цвета фона, увеличивая количество отображаемых цветов до 16, либо разрешением гашения символа, в результате чего символ на экране будет мигать. По умолчанию данный бит управляет разрешением гашения символа.
Видеопамять в графическом режимае
Распределение видеопамяти в графическом режиме работы адаптеров отличается от распредления видеопамяти в текстовом режиме. Ниже рассмотрена структура распределения видеопамяти отдельно для каждого графического режима.
Режимы 4 и 5
Это режимы низкого разрешения (320х200), используются 4 цвета. Поддерживаются видеоадаптерами CGA, EGA и VGA. У EGA и VGA видеоданные расположены в нулевом цветовом слое, остальные слои не используются. Для совместимости с CGA отображение видеопамяти на экране не является непрерывным: первая половина видеопамяти (начальный адрес В800:0000) содержит данные относительно всех нечетных линий экрана, а вторая (начальный адрес В800:2000) - относительно всех четных линий. Каждому пикселу соответствует два бита видеопамяти. За верхний левый пиксел экрана отвечают биты D7 и D6 нулевого байта видеопамяти.
В режимах 4 и 5 имеются два набора цветов: стандартный и альтернативный: 00 - черный; 01 - светло-синий (зеленый); 10 - малиновый (красный); 11 - ярко-белый (коричневый).
Режим 6
Режим 6 является режимом наибольшего разрешения для CGA (640х200). Видеоадаптеры EGA и VGA используют для хранения информации только нулевой слой. Как и в режимах 4 и 5 первая половина видеопамяти отвечает за нечетные линии экрана, а вторая половина - за четные. В данном режиме на один пиксел отводится один бит видеопамяти. Если значение бита равно 0, то пиксел имеет черный цвет, а если единице - то белый.
Режимы 0Dh и 0Еh
Разрешающая способность в режиме 0Dh составляет 320х200, а в режиме 0Eh 640х200 пикселов. Данный режим поддерживается только видеоадаптерами EGA и VGA .
Для хранения видеоданных используются все четыре цветовых слоя. Адресу видеопамяти соответствуют четыре байта, которые вместе определяют восемь пикселов. Каждому пикселу соответствуют четыре бита - по одному из каждого цветового слоя. Четыре бита на пиксел, используемые в данных режимах, позволяют отображать 16 различных цветов. Запись в каждый из этих цветовых слоев можно разрешить или запретить при помощи разрешения записи цветового слоя.
Управление доступом к цветовым плоскостям осуществляется при помощи регистров:
- Адресный регистр графического контроллера, порт вывода для этого регистра 3CEh; биты 0-3 содержат адрес регистра, остальные не используются.
- Регистр цвета: для доступа к этому регистру значение адресного регистра должно быть 00h, адрес порта вывода для этого регистра 3CFh; биты 0-3 определяют значение для соответствующей плоскости, остальные не используются.
- Регистр разрешения цвета: для доступа к этому регистру значение адресного регистра должно быть 01h, адрес порта вывода для этого регистра 3CFh; биты 0-3 означают разрешение соответствующего слоя, а остальные не используются.
- Регистр выбора плоскости для чтения: для доступа к этому регистру значение адресного регистра должно быть 04h, адрес порта вывода для этого регистра 3CFh; биты 0-2 содержат номер плоскости для чтения, а остальные не используются.
Пример на языке Turbo-Pascal:
Этот и последующий примеры приведены в версии 3.0 Turbo-Pascal. Для преобразования к более поздней версии см. "Руководство пользователя по системе Turbo-Pascal 5.0".
Модифицируемые программы
При разработке сложных прикладных программ необходимо принимать во внимание будущее наращивание вычислительных мощностей, поддержку новых аппаратных средств и операционных систем. Программирование с использованием программ BIOS часто представляет собой самый простой и правильный способ предусмотреть такого рода модификации. Например, обращения к BIOS, написанные для CGA, будут работать на EGA и VGA, что, однако, нельзя утверждать про все регистровые функции. Для изображения пикселя с помощью BIOS используется один и тот же метод, для которого применяемая комбинация адаптер/разрешение не имеет значения, однако запись в память у CGA и EGA/VGA сильно отличаются.
Программирование с использованием BIOS также позволяет расширить степень совместимости между компьютерами и адаптерами, изготовленными разными фирмами. Некоторые регистры EGA и VGA могут быть изменены только в определенные временные интервалы или должны восстанавливаться в интервалы между записями. Эта задача решается BIOS автоматически. Однако даже использование BIOS не гарантирует полной совместимости между компьютерами и даже простыми модификациями кода, выполненного в различных операционных системах.
Операционная система OS/2 не использует программную обработку прерываний с целью управления аппаратурой (кроме окна эмуляции IBM PC) и не допускает непосредственного управления аппаратурой. OS/2 полагается на обращения к операционной системе, сходные с обращениями к внешним модулям в программах DOS: параметры помещаются (PUSH) в стек, после чего выполняется вызов (CALL) соответствующей программы. Заметим, что и в пакете Microsoft Windows используется такой же способ. Если программа написана для DOS и рассматривается вопрос ее адаптации к OS/2, то для каждой из используемых операций следует написать макрокоманды.
Таким образом макрокоманды могут быть написаны для установки цвета и построения пикселя. В начальной стадии разработки макрокоманда могла вызвать прерывание BIOS (макрокоманда установки цвета могла присвоить значение цвета некоторой переменной, а все остальные операции выполняла программа BIOS). В более поздних версиях можно перейти к непосредственной работе с регистрами и памятью за счет использования программы установки цвета для определения значений соответствующих регистров адаптера и программы построения для установки значений регистров и записи в память. Наконец, в версии для OS/2 с помощью макрокоманды можно пометить в стек (PUSH) соответствующие параметры и выполнить вызов подпрограммы (CALL). Такой способ использования макрокоманд применен в программах изображения линии и окружности, которые приведены в главе 15. За счет применения макрокоманд можно избежать поиска кода для каждого доступа к регистру, памяти или выполнения прерывания INT. Однако следует соответствующим образом предусмотреть структуру макрокоманд необходимо решить, какие из примитивных функций поддерживаются. Например, при рассмотрении структуры обращения к BIOS может возникнуть желание объединить выбор цвета и операции построения. Однако во многих случаях более эффективным (и, возможно, даже необходимым) является разделение этих функций.
Эти методы работают достаточно хорошо при использовании простых стандартных наборов функций. Можно подобрать макрокоманды, совместная работа которых наиболее эффективна, и даже сформировать библиотеку эффективных макрокоманд для последующего использования в других программах. Однако в случае, когда аппаратура работает на пределе своих возможностей, применение макрокоманд не удобно, а время их исполнения значительно выше. В связи с этим необходимо решить, будет ли программа адаптируемой. Наконец, если разработанное программное обеспечение базируется на каких-либо специфических особенностях аппаратуры, например, таких, как обратный ход луча по кадру, его использование на других компьютерах или операционных системах может быть невозможно.
Гибкость (страничная организация памяти, альтернативные наборы символов, мониторы).
EGA позволяет работать с оригинальными цветными и монохромными мониторами. Кроме того, предусмотрена поддержка ECD (усовершенствованного цветного дисплея), разрешение которого близко к разрешению монохромного монитора (640х350 для ECD, для монохромного - 720х350) и возможно использование 16 цветов из 64. Адаптер позволяет заменить любой из 16 цветов на любой из оставшихся 63. VGA не поддерживает работу с прочими оригинальными дисплеями (за исключением некоторых мультичастотных мониторов). Для работы VGA требуется аналоговый дисплей. Режим высокого разрешения VGA составляет 640х480 и поддерживает использование 16 цветов (или градаций серого) из 262144 возможных (или из 64 градаций серого). Так же как у EGA, цвета VGA можно выбирать индивидуально.
IBM обеспечивает расширение памяти EGA, так что возможна поддержка двух отдельных страниц для цветного графического режима высокого разрешения. EGA (и VGA) других изготовителей поставляется с полным комплектом памяти. При низком разрешении (или монохромной графике) адаптер позволяет хранить до 8 страниц текстовой или графической информации. Возможно совмещение отображения на экране одной страницы с модификацией другой. Дополнительная память может использоваться и для хранения таблицы шрифтов (в графическом режиме это невозможно), что позволяет хранить до 1024 различных символов (на VGA до 2048), 512 из которых могут быть отображены одновременно.
На EGA и VGA предусмотрены возможность модификации шрифтов, работа с дополнительными символами, индивидуальный подбор шрифтов. Это только малая часть функций, выполняемых мощными и гибкими адаптерами EGA и VGA. Любой выводимый атрибут может быть модифицирован. Размер символов может быть сделан больше или меньше стандартного, можно изменить число строк, выводимых на экран. Предусмотрены временные и постоянные (действующие на все программы до перезагрузки системы) изменения. Разработка прикладных графических программ на такой аппаратуре требует более глубокого понимания работы системы, чем при программировании для CGA.
Вероятно, наиболее серьезным архитектурным изменениям в EGA и VGA была подвергнута организация памяти. В CGA для описания каждой цветной точки (пикселя) используется последовательность битов данных. Несмотря на простоту этого метода для программирования, при его использовании адресное пространство процессора расходуется неоптимально (удвоенное число цветов, удвоенный размер карты памяти); наблюдается сильное замедление прикладных графических программ, использующих большое число цветов (удвоенное количество цветов требует в два раза больше времени для записи в память). EGA и VGA используют битовую матрицу, в которой биты цвета помещаются по одному и тому же адресу. Битовая матрица допускает использование большого числа цветовых комбинаций без увеличения адресного пространства процессора. В некоторых случаях применение архитектуры битовой матрицы позволяет повысить скорость записи в память, поскольку одно обращение к памяти позволяет модифицировать 8 битов каждой матрицы. Более подробно эти режимы описаны в следующих главах.
Так как в этом разделе рассматриваются развитие стандартов графического адаптера, его новые особенности и гибкость, правомерен вопрос какова перспектива этого развития: VGA отодвинул к пределу возможностей существующие в настоящее время процессоры. Максимальный размер сегмента памяти 64К оказывается полностью занятым в режиме работы с 256 цветами, а управление режимом разрешения 640х480 осуществляется очень медленно даже при использовании процессоров, обладающих высоким быстродействием (поскольку адаптер также выполняет обращение к памяти и блокирует процессор установкой состояния ожидания). Вероятно, следующим шагом должны быть более сложные графические сопроцессоры, которые сделают возможным одновременный доступ и использование встроенных графических примитивов, таких как изображение линии и окружности.
На сегодняшний день трудно предсказать совместимость новых адаптеров со стандартом EGA/VGA, однако не может быть сомнений в том, что на ближайшие годы EGA/VGA будут оставаться стандартом графики. Адаптеры, основанные на использовании сопроцессоров (как и мониторы высокого разрешения), достаточно дороги, и даже после некоторого снижения цен технология EGA/VGA продолжает оставаться более дешевой. При этом EGA удовлетворяет потребности большинства пользователей.
При использовании EGA с улучшенным разрешением и возможностью поддерживать 16 цветов игровые программы производят вполне удовлетворительное впечатление. Можно предполагать, что EGA и VGA будут иметь спрос у пользователей, аналогичный существовавшему в свое время спросу на компьютеры на базе простых процессоров 8086/8088, которые в основном используются в качестве домашних машин. Деловая графика и представление данных на улучшенном разрешении при использовании 16 цветов выглядят очень резко и точно. В соответствии с принятым соглашением графики в деловых бумагах должны быть изображены с использованием не более 4 цветов (не считая черного и белого). Этому вполне соответствуют возможности EGA, позволяющие выполнить выбор любых цветов из 64. Деловому рынку, который является главной движущей силой в развитии компьютеров фирмы IBM, в настоящий момент не требуется серьезного улучшения графической технологии.
Главными областями деятельности, в которой проявятся преимущества повышения быстродействия и использования графики высокого разрешения, являются настольные издательские системы, графические многооконные программы и системы автоматизированного проектирования (САПР). Прикладные разработки, работающие с оцифрованными цветными изображениями, выиграют при увеличении разрешения и числа поддерживаемых цветов, хотя 256-цветный режим VGA позволяет воспроизводить на экране изображения, близкие к реальным, несмотря на довольно низкое разрешение.
Итак, программы, разрабатываемые для EGA и VGA, сохранят коммерческую ценность еще несколько лет. Однако для того, чтобы заранее приготовиться к использованию следующих поколений дисплеев и операционных систем, следует разрабатывать модульные программы.
Комментарии
Эта функция используется для выбора режима работы адаптера. Основными режимами являются алфавитно-цифровой (неграфический), графический 320х200, графический 640х200 и графический 640х350. Применение VGA делает доступным графический режим 640х480. Запись символов может быть выполнена с помощью функций 9, 0ah, 0eh и 13h. Построение точек выполняется с помощью функции 0ch.
III Последовательный преобразователь
Последовательный преобразователь - это устройство запоминает данные, читаемые из видеопамяти в течении цикла регенерации, преобразует их в последовательный поток бит, а затем передает их контроллеру атрибутов.
Читайте также: