Памятью видеоадаптеров
Рассмотрим организацию оперативных запоминающих устройств видеоадаптеров (ОЗУВ) CGA, EGA и им подобных. Дело в том, что ОЗУВ работает по-разному в зависимости от того, в каком режиме находится адаптер. Например, CGA использует способ хранения информации, при котором на один пиксел экрана приходится несколько последовательных битов в ОЗУВ, a EGA и VGA используют способ так называемого многоплоскостного хранения информации.
Многобитовое и многоплоскостное ОЗУВ
Простейший способ хранения информации — последовательный. Для графического режима 320x200, 4 цвета, в ОЗУВ на каждый пиксел расходуется 2 бита, которые позволяют получить четыре значения: 00, 01, 10, 11. Таким образом, в одном байте ОЗУВ может храниться четыре пиксела. А для графического режима 640x200, 2 цвета, только один бит необходим для представления каждого пиксела (так как надо всего два значения: 0 и 1 — выключен и включен). При многоплоскостном ОЗУВ адаптеры VGA и EGA хранят изображение как четыре отдельные картинки. Каждая картинка называется битовой плоскостью. Каждая битовая плоскость хранит изображение в одном из трех основных цветов, используемых EGA и VGA — красном, зеленом, синем и в так называемой плоскости яркости. Адаптеры VGA и EGA одновременно читают соответствующие биты со всех четырех плоскостей и определяют, каким из 16 доступных цветов должен быть показан указанный пиксел на экране дисплея. Так как каждая битовая плоскость может принимать значение 0 или 1, то все четыре битовые плоскости дадут нам диапазон от 0000 до 1111 в двоичной системе счисления (т.е. от 0 до 15, итого 16 вариантов). Для наглядности можно представить, что эти четыре плоскости представляют своеобразный «бутерброд» (рис. 22.1).
Для адаптера VGA существуют некоторые особенности в методе показа точек на экране, так как он имеет аналоговое регулирование яркости, позволяющее плавно управлять яркостью каждой точки от {514}
плоскость 0 |
синий |
плоскость 1 ▄ |
зелёный |
плоскость 2 |
плоскость 3 (яркость) ▄ |
красный |
▄ |
Þ |
ярко-зелёный |
Рис. 22.1
максимальной до минимальной. Однако в режиме эмуляции EGA адаптер VGA полностью ему аналогичен.
Карта дисплейной памяти
$ FFFF:$F (1M) |
На всех IBM-совместимых ПЭВМ область ОЗУ размером 256K, расположенная сразу за верхней границей оперативной памяти (640K), отведена под память видеоадаптеров дисплея (рис. 22.2).
код начальной загрузки |
$E000:0 (896K) |
ПЗУ БСВВ |
$A000:0 (640K) |
256К ОЗУВ |
ОЗУ, доступное пользователю |
резидентные программы |
$0000:$40 |
DOS |
$0000:0 |
таблица векторов прерываний |
Рис. 22.2
Отметим, что на ПЭВМ серии PS/2 пользователю доступен весь мегабайт ОЗУ, а оставшиеся 360K, отведенные под ОЗУВ, размещены сразу за ним и не отображаются на дисплейную память.
На рис. 22.3 показано, как используется 256-килобайтный блок ОЗУВ. Если на ПЭВМ стоит адаптер CGA, то задействовано только 16K ОЗУВ, начинающиеся с адреса $В8000 или $В800:$0 (736K). Если же на ПЭВМ установлен адаптер EGA и VGA, то тогда используются все 256K. {515}
┌────────────────┐ 256K
16K, используемые –→├ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┤
при эмуляции режима ├────────────────┤ 192K
CGA ├────────────────┤ 128K
├────────────────┤ 64K
└────────────────┘
Рис. 22.3
На рис. 22.4 показано, как используются 16K ОЗУ В в адаптере CGA. Первые 8K ОЗУВ заняты четными строками изображения на экране. Вторые 8К заняты нечетными строками изображения. Такое построение ОЗУВ дает мерцание экрана и обусловливает медленную скорость работы адаптера и монитора. Так как каждый блок использует ровно 8000 байт, то остаются две области по 192 байт.
не используется |
┌────────────────┐
├ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┤
| блок 1 (8К) |
не используется |
├────────────────┤
├ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┤
| блок 2 (8К) |
$B800:0 |
└────────────────┘
Рис. 22.4
Адаптеры VGA и EGA в своих стандартных режимах не используют метод хранения «четный-нечетный» — в них работает последовательно-параллельный способ хранения информации (слева-направо, сверху-вниз и по плоскостям). Однако в режимах эмуляции CGA эти адаптеры используют область памяти, начинающуюся с адреса $В800:0.
При разрешении экрана 640x200, 16 цветов, EGA и VGA работают в так называемом многостраничном режиме. В ОЗУВ располагаются четыре видеостраницы (рис. 22.5).
256К ┌────────────────┐ битовая плоскость 3
| |
192К ├────────────────┤ битовая плоскость 2
| |
128К ├────────────────┤ битовая плоскость 1
| |
64К ├────────────────┤
| страница 3 |
├ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─┤ $AC00:0
| страница 2 |
├ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─┤ $A800:0 битовая
| страница 1 | плоскость 0
├ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─┤ $A400:0
| страница 0 |
└────────────────┘ $A000:0
Рис. 22.5 {516}
Каждая из этих страниц представляет собой область, соответствующую экрану дисплея. Так как каждая страница на одной битовой плоскости занимает 640x200/8=16000 байт, а ОЗУВ предоставляет 16384 байт, то 384 байт на каждой битовой плоскости остается свободными.
Как видно из рисунка, первые 64K ОЗУВ содержат только битовую плоскость 0 каждой страницы. Каждый следующий блок содержит соответственно битовые плоскости 1, 2 и 3 для всех четырех страниц. Запомните, только первые 64K ОЗУВ могут быть непосредственно доступны для программ, использующих прямой доступ к памяти. При этом обращение происходит одновременно ко всем четырем битовым плоскостям. Поэтому любое изображение, выполненное таким способом, будет ярко-белым. Для раздельного доступа к битовым плоскостям используются специальные функции контроллера графического дисплея.
Если для разрешения 640x350, 16 цветов, произвести аналогичные расчеты, то получится, что каждая страница в этом режиме занимает 28000 байт ОЗУВ, поэтому здесь можно разместить только две страницы в одной битовой плоскости (рис. 22.6). Таким образом, одна полная страница занимает в ОЗУВ 28000x4=112000 байт.
256К ┌────────────────┐ битовая плоскость 3
▄ ▄
▄ ▄ ▄ ▄ ▄
▄ ▄ битовая плоскость 1
64K ├────────────────┤
├ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─┤ $AED 6:0
| страница 1 |
├────────────────┤ $A800:0 битовая
├ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─┤ $AD6:0 плоскость 0
| страница 0 |
└────────────────┘ $A000:0
Рис. 22.6
При работе с разрешением 640x480, 16 цветов, только одна страница ОЗУВ доступна для работы, так как на каждой битовой плоскости требуется 38400 байт, что больше половины сегмента
256К ┌────────────────┐ битовая плоскость 3
▄ ▄
▄ ▄ ▄ ▄ ▄
▄ ▄ битовая плоскость 1
64K ├────────────────┤
├ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─┤ $A960:0
| | битовая
| страница 0 | плоскость
└────────────────┘ $A000:0
Рис. 22.7 {517}
Режим 320x200, 16 цветов, — это режим низкого разрешения, поэтому в нем доступны восемь страниц (по 8000 байт каждая) (рис. 22.8). Полный объем, занимаемый изображением на экране, составляет 32000 байт. Заметьте, что в табл. 19.4 при описании процедуры SetGraphMode модуля Graph этот режим не указан, однако включение его возможно.
256К ┌────────────────┐ битовая плоскость 3
▄ ▄
▄ ▄ ▄ ▄ ▄
▄ ▄ битовая плоскость 1
64K ├────────────────┤
страница 7├ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─┤ $AE00:0
страница 6├ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─┤ $AC00:0
страница 5├ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─┤ $AA00:0
страница 4├ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─┤ $A800:0 битовая
страница 3├ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─┤ $A600:0 плоскость 0
страница 2├ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─┤ $A400:0
страница 1├ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─┤ $A200:0
└────────────────┘ $A000:0
Рис. 22.8
Режим 320x200, 256 цветов, доступен только для адаптеров, выходной сигнал которых представляется в аналоговом виде: VGA, MCGA, IBM8514. Из-за использования этими адаптерами незначительно измененного многоплоскостного способа хранения информации, одна страница занимает всего 16000 байт на каждой битовой плоскости. Таким образом, имеется возможность хранить четыре страницы видеоинформации (см. рис. 22.5).