На всех 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 этот режим не указан, однако включение его возможно.
Режим 320x200, 256 цветов, доступен только для адаптеров, выходной сигнал которых представляется в аналоговом виде: VGA, MCGA, IBM8514. Из-за использования этими адаптерами незначительно измененного многоплоскостного способа хранения информации, одна страница занимает всего 16000 байт на каждой битовой плоскости. Таким образом, имеется возможность хранить четыре страницы видеоинформации (см. рис. 22.5).