Глава 22. Работа с оперативной




Памятью видеоадаптеров

Рассмотрим организацию оперативных запоминающих устройств видеоадаптеров (ОЗУВ) 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).



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2022-11-01 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: