- •Аннотация
- •Введение
- •Как связаться с авторами
- •Благодарности
- •Замечания
- •1. Видеоподсистема компьютера
- •Мониторы
- •2. Режимы работы видеоадаптеров
- •Режимы 0 и 1
- •Режимы 0*, 1*
- •Режимы 2 и 3
- •Режимы 2*, 3*
- •Режимы 4 и 5
- •Режим 6
- •Режим 7
- •Режимы 8, 9, 0Ah
- •Режим 0Dh
- •Режим 0Eh
- •Режим 0Fh
- •Режим 10h
- •Режим 11h
- •Режим 12h
- •Режим 13h
- •3. Архитектура видеоадаптеров ega и vga
- •Монитор
- •Видеопамять
- •Текстовый режим
- •Знакогенератор
- •Атрибуты символов
- •Атрибуты символов (монохромный режим)
- •Видеопамять в графических режимах
- •Режимы 4 и 5
- •Режим 6
- •Режимы 0Dh и 0Eh
- •Режим 0Fh
- •Режим 10h
- •Режим 11h
- •Режим 12h
- •Режим 13h
- •Графический контроллер
- •Операция записи
- •Операция чтения
- •Последовательный преобразователь
- •Контроллер атрибутов
- •Контроллер элт
- •Синхронизатор
- •4. Регистры видеоадаптеров ega, vga и svga
- •Краткий обзор
- •Внешние регистры
- •Регистр определения различных режимов работы (Miscellaneous Output Register - mor)
- •Регистр управления дополнительным устройством (Feature Control Register - fcr)
- •Регистр состояния 0 (Input Status Register 0 - isr0)
- •Регистр состояния 1 (Input Status Register 1 - isr0)
- •Регистр разрешения работы системы vga (vga Enable Register - vga_er)
- •Регистр сброса триггера-защелки светового пера (Light Pen Latch Reset Register - lplrr)
- •Регистр установки триггера-защелки светового пера (Light Pen Latch Set Register - lplsr)
- •Регистры контроллера элт
- •Общая длина линии горизонтальной развертки (Horizontal Total Register - htr) (индекс 0)
- •Длина отображаемой части горизонтальной развертки (Horizontal Display Enable End Register - hder) (индекс 1)
- •Начало импульса гашения луча горизонтальной развертки (Start Horizontal Blank Register - shbr) (индекс 2)
- •Конец импульса гашения луча горизонтальной развертки (End Horizontal Blank Register - ehbr) (индекс 3)
- •Начало импульса горизонтального обратного хода луча (Start Horizontal Retrace Register - shrr) (индекс 4)
- •Конец импульса горизонтального обратного хода луча (End Horizontal Retrace Register - ehrr) (индекс 5)
- •Число горизонтальных линий растра (Vertical Total Register - vtr) (индекс 6)
- •Дополнительный регистр (Overflow Register - ovr) (индекс 7)
- •Предварительная установка горизонтальной развертки (Preset Row Scan Register - prsr) (индекс 8)
- •Высота символов текста (Max Scan Line Register - mslr) (индекс 9)
- •Начальная линия курсора (Cursor Start Register - csr) (индекс 0Ah)
- •Конечная линия курсора (Cursor End Register - cer) (индекс 0Bh)
- •Регистры начального адреса
- •Регистры, определяющие положение курсора
- •Начало обратного вертикального хода луча (Vertical Retrace Start Register - vrsr) (индекс 10h)
- •Конец обратного вертикального хода луча (Vertical Retrace End Register - vrer) (индекс 11h)
- •Регистр адреса светового пера (Light Pen Address Register - lpar)
- •Завершение отображения вертикальной развертки (Vertical Display End Register - vder) (индекс 12h)
- •Логическая ширина экрана (Offset Register - ofr) (индекс 13h)
- •Положение подчеркивания символа (Underline Location Register - ulr) (индекс 14h)
- •Начало импульса гашения вертикальной развертки (Start Vertical Blank Register - svbr) (индекс 15h)
- •Конец импульса гашения вертикальной развертки (End Vertical Blank Register - evbr) (индекс 16h)
- •Управление режимом (Mode Control Register - mcr) (индекс 17h)
- •Регистр сравнения линий (Line Compare Register - lcr) (индекс 18h)
- •Регистры синхронизатора
- •Регистр сброса синхронизатора (Reset Register - rr) (индекс 0)
- •Регистр режима синхронизации (Clock Mode Register - cmr) (индекс 1)
- •Регистр разрешения записи цветового слоя (Color Plane Write Enable - cpwe) (индекс 2)
- •Регистр выбора знакогенератора (Character Generator Select Register - cgsr) (индекс 3)
- •Регистр определения структуры памяти (Memory Mode Register - mmr) (индекс 4)
- •Регистры графического контроллера
- •Регистр установки/сброса (Set/Reset Register - srr) (индекс 0)
- •Регистр разрешения установки/сброса (Set/Reset Enable Register - srer) (индекс 1)
- •Регистр сравнения цветов (Color Compare Register - ccr) (индекс 2)
- •Регистр циклического сдвига и выбора функции (Data Rotate & Function Select - drfs) (индекс 3)
- •Регистр выбора читаемого слоя (Read Plane Select Register - rpsr) (индекс 4)
- •Регистр режима работы (Mode Register - mdr) (индекс 5)
- •Регистр смешанного назначения (Miscellaneous Register - mir) (индекс 6)
- •Регистр маскирования цветовых слоев (Color Don't Care Register - cdcr) (индекс 7)
- •Регистр битовой маски (Bit Mask Register - bmr) (индекс 8)
- •Регистры контроллера атрибутов
- •Регистры цветовой палитры (0-15) (Color Palette Register's - cpr)
- •Улучшенный цветной монитор
- •Регистр цвета рамки экрана (Screen Border Color Register - sbcr) (индекс 11)
- •Регистр разрешения цветового слоя (Color Plane Enable Register - cper) (индекс 12)
- •Регистр горизонтального панорамирования (Horizontal Panning Register - hpr) (индекс 13)
- •Регистр выбора цвета (Color Select Register - csr) (индекс 14)
- •Регистры цифро-аналогового преобразователя vga
- •Регистр маскирования пикселов (Pixel Mask Register - pmr)
- •Регистр состояния цап (dac State Register - dac_sr)
- •Индекс читаемого регистра таблицы цветов (Look-up Table Read Index Register - ltrir)
- •Индекс записываемого регистра таблицы цветов (Look-up Table Write Index Register - ltwir)
- •Регистр данных таблицы цветов (Look-up Table Data Register - ltdr)
- •Нестандартные режимы видеоадаптера vga
- •Организация видеопамяти
- •Режим 320х400 пикселов, 256 цветов
- •Режим 360х480 пикселов, 256 цветов
- •5. Использование функций bios для работы с видеоадаптерами
- •Выбор режима работы - функция 00h
- •Изменение формы курсора - функция 01h
- •Изменение положения курсора - функция 02h
- •Определение положения и формы курсора - функция 03h
- •Использование светового пера - функция 04h
- •Выбор активной страницы видеопамяти - функция 05h
- •Свертка окна вверх - функция 06h
- •Свертка текстового окна вниз - функция 07h
- •Чтение символа и его атрибутов - функция 08h
- •Запись символа с атрибутами в текущей позиции курсора - функция 09h
- •Запись символа в текущей позиции курсора - функция 0Ah
- •Установка цветовой палитры (режимы 4,5,6) - функция 0Bh
- •Вывод пиксела - функция 0Ch
- •Чтение пиксела - функция 0Dh
- •Запись символа в режиме телетайпа - функция 0Eh
- •Определение текущего режима работы видеоадаптера - функция 0Fh
- •Управление регистрами палитры - функция 10h
- •Установка регистра палитры - подфункция 00h
- •Установка цвета рамки - подфункция 01h
- •Установка всех регистров палитры - подфункция 02h
- •Управление атрибутом мигания и атрибутом интенсивности - подфункция 03h
- •Чтение регистра палитры - подфункция 07h
- •Чтение регистра цвета рамки - подфункция 08h
- •Чтение всех регистров палитры - подфункция 09h
- •Установка регистра таблицы цветов (регистров цап) - подфункция 10h
- •Установка нескольких регистров таблицы цветов (регистров цап) - подфункция 12h
- •Выбор подмножества цветов - подфункция 13h ???
- •Чтение регистра таблицы цветов - подфункция 15h
- •Чтение нескольких регистров таблицы цветов (регистров цап) - подфункция 17h
- •Определение режима подмножества цветов - подфункция 1Ah ???
- •Установка палитры из градаций серого цвета - подфункция 1Bh
- •Загрузка таблиц знакогенератора - функция 11h
- •Загрузка набора символов пользователя - подфункция 00h
- •Загрузка набора символов из bios - подфункция 01h
- •Загрузка набора символов из bios - подфункция 02h
- •Выбор активных таблиц знакогенератора - подфункция 03h
- •Загрузка набора символов из bios - подфункция 04h
- •Установка вектора прерывания 1Fh - подфункция 20h
- •Установка набора символов для графических режимов - подфункция 21h
- •Установка набора символов 8х14 из пзу bios
- •Установка набора символов 8х8 из пзу bios
- •Установка набора символов 8х16 из пзу bios
- •Получение информации об используемом наборе символов - подфункция 30h
- •Определение конфигурации и выбор программы распечатки экрана - функция 12h
- •Определение конфигурации видеоадаптера - подфункция 10h
- •Выбор программы печати экрана - подфункция 20h
- •Выбор количества линий развертки в текстовом режиме - подфункция 30h
- •Запрещение переустановки палитры - подфункция 31h
- •Управление доступом к видеоадаптеру - подфункция 32h
- •Управление преобразованием серого цвета - подфункция 33h
- •Эмуляция курсора cga - подфункция 34h
- •Выбор активного монитора - подфункция 35h
- •Гашение экрана монитора - подфункция 36h
- •Вывод текстовой строки - функция 13h
- •Чтение/запись конфигурации видеосистемы - функция 1Ah
- •Чтение конфигурации видеосистемы - подфункция 00h
- •Запись конфигурации видеосистемы - подфункция 01h
- •Получение данных о состоянии vga - функция 1Bh
- •Сохранение/восстановление состояния видеоадаптера - функция 1Ch
- •Определение размера буфера - подфункция 00h
- •Сохранение текущего состояния видеоадаптера - подфункция 01h
- •Восстановление текущего состояния видеоадаптера - подфункция 02h
- •Русификация видеоадаптеров
- •6. Область данных видеофункций bios
- •Переменные в младших адресах памяти
- •Область сохранения
- •Дополнительная таблица окружения
- •Вторая таблица символов текстового режима
- •7. Видеоадаптеры svga
- •Видеопамять svga
- •Слоеный пирог
- •Увидеть весь мир через замочную скважину
- •Больше цветов больше бит
- •Стандарт vesa
- •Получить информацию о реализации vbe и видеоадаптере
- •Получить информацию о режиме видеоадаптера
- •Установить режим видеоадаптера
- •Определить текущий режим видеоадаптера
- •Сохранить/восстановить состояние видеоадаптера
- •Управление адресацией видеопамяти
- •Установить/определить длину строки развертки
- •Установить/определить видимую область экрана
- •Установить/определить размер регистров цап
- •Управление монитором
- •Определение возможностей управления
- •Включить режим сохранения электроэнергии
- •Определить состояние монитора
- •8. Использование функций ms-dos для управления видеоадаптерами
- •Функция puts
- •Функция printf
- •Функция putch
- •Функция cputs
- •Функция cprintf
- •Литература
- •Оглавление
- •5. Использование функций bios для работы с видеоадаптерами 100
- •6. Область данных видеофункций bios 152
- •7. Видеоадаптеры svga 159
- •8. Использование функций ms-dos для управления видеоадаптерами 175
- •9. Стандартные функции вывода языка Си 176
Как связаться с авторами
Авторы имеют собственный почтовый адрес в сети GlasNet. Все свои замечания и предложения по содержанию книг серий "Библиотека системного программиста" и "Персональный компьютер - шаг за шагом" вы можете присылать нам по следующему адресу:
frolov@glas.apc.org
Наш почтовый адрес доступен не только пользователям сети GlasNet. Абоненты других компьютерных сетей также могут передать нам сообщения. Ниже мы привели наш адрес в различных сетях:
Глобальная сеть |
Наш адрес |
CompuServe |
>internet:frolov@glas.apc.org |
GlasNet |
frolov@glas.apc.org |
Internet |
frolov@glas.apc.org |
Relcom |
frolov@glas.apc.org |
UUCP |
uunet!cdp!glas!frolov |
Вы также можете присылать свои пожелания почтой по адресу:
Издательский отдел АО "ДИАЛОГ-МИФИ"
Индекс 115409, город Москва, улица Москворечье, дом 31, корпус 2
Благодарности
Авторы выражают благодарность Фроловой Ольге Викторовне, Кустову Виктору. Мы также благодарим всех сотрудников издательского отдела АО "ДИАЛОГ-МИФИ": Голубева Олега Александровича, Дмитриеву Наталью, Виноградову Елену, Кузьминову Оксану.
Замечания
При описании регистров мы используем следующее соглашение о нумерации битов регистров: биты в байте нумеруются справа налево. Бит D7 является старшим, а бит D0 - младшим битами.
Если мы приводим значения переменных, регистров или адресов в шестнадцатиричной системе счисления, то после числа указывается символ 'h' (от слова Hexadecimal). Если число представлено в двоичной системе счисления, то после него указывается символ 'b' (от слова Binary).
1. Видеоподсистема компьютера
Видеоподсистема любого компьютера состоит из двух основных частей - видеоадаптера и монитора, подключаемого к видеоадаптеру.
Видеоадаптер может быть оформлен в виде отдельной платы, вставляемой в слот расширения компьютера, или может быть расположен непосредственно на системной плате компьютера.
Видеоадаптер включает в себя видеопамять, в которой хранится изображение, отображаемое на экране монитора, постоянное запоминающее устройство, в котором записаны наборы шрифтов, отображаемые видеоадаптером в текстовых и графических режимах, а также функции BIOS для работы с видеоадаптером. Кроме того, видеоадаптер содержит сложное управляющее устройство, обеспечивающее обмен данными с компьютером, формирование изображения и выполняющее некоторые другие действия.
Видеоадаптеры могут работать в различных текстовых и графических режимах, различающихся разрешением, количеством отображаемых цветов и некоторыми другими характеристиками.
Сам видеоадаптер не отображает данные. Для этого к видеоадаптеру необходимо подключить монитор. Изображение, создаваемое компьютером, формируется видеоадаптером и передается на монитор для предоставления ее конечному пользователю.
Существует несколько основных способов формирования изображения на экране монитора. Наиболее распространены так называемые мониторы с электронно-лучевыми трубками (ЭЛТ). Вы наверняка знакомы с электронно-лучевыми трубками. Они используются практически во всех бытовых телевизионных приемниках.
Применение ЭЛТ в блокнотных и переносных компьютерах невозможно вследствие ее большого размера и большой потребляемой мощности. Поэтому для них используют жидкокристаллические и газоразрядные панели. В настоящее время разработаны и выпускаются компьютеры с цветными жидкокристаллическими экранами, не уступающие по качеству многим мониторам с электронно-лучевыми трубками.
Сейчас существует огромное количество всевозможных видеоадаптеров, начиная от простейших монохромных, не поддерживающих графические режимы, и кончая современными видеоадаптерами со специальными графическими процессорами, воспроизводящими порядка 16,7 миллионов различных цветов и подключаемых для повышения быстродействия непосредственно к локальной шине процессора.
Можно выделить несколько наиболее общих типов или подмножеств видеоадаптеров. Деление проводится по основным характеристикам видеоадаптеров, таким как поддержка текстовых и графических режимов, максимальное количество одновременно отображаемых цветов, максимальная разрешающая способность, наличие специализированных схем управления - акселераторов или графических сопроцессоров, а также по способу подключения к компьютеру и монитору.
Большинство видеоадаптеров может работать как в текстовых, так и в графических режимах. Возможность отображения графической информации отсутствует только у самого первого видеоадаптера фирмы IBM - MDA. Он использовался вместе с монохромным монитором. Сегодня видеоадаптер MDA и монохромный монитор стали большой редкостью. Они не отвечают потребностям современных пользователей.
Отсутствие возможности отображения графической информации ограничивало сферу использования компьютеров и вскоре небольшая фирма Hercules Computer Technology, Inc. выпустила монохромный видеоадаптер Hercules, который уже мог выводить графику и обеспечивал большую разрешающую способность. Также как и адаптер MDA, видеоадаптер Hercules можно было подключить к монохромному монитору.
Вскоре появился и первый видеоадаптер, позволяющий отображать не только монохромную, но и цветную информацию, как в текстовом, так и в графическом режиме. Этим видеоадаптером стал адаптер CGA. С его помощью компьютер мог выводить 16-цветную текстовую и 4-цветную графическую информацию. Однако он имел очень низкую разрешающую способность - 320х200 пикселов (пиксел - элементарный элемент изображения, точка). В результате такой низкой разрешающей способности изображение на экране представляло собой совокупность видимых точек и быстро утомляло глаза пользователя.
Видеоадаптер CGA можно использовать с композитными мониторами (обычными цветными или черно-белыми бытовыми телевизорами), а также со специальными цифровыми цветными мониторами.
Затем прогресс пошел по пути увеличения разрешающей способности и количества одновременно отображаемых цветов. Были созданы видеоадаптеры EGA и VGA. Видеоадаптер EGA уже мог отображать 16-цветную графическую информацию с разрешением 640х350 пикселов, а VGA - даже с разрешением 800х600 пикселов. Кроме того, в видеоадаптере VGA появился графический режим с разрешением 320х200 пикселов при возможности одновременного отображения 256 различных цветов.
С видеоадаптером EGA можно было использовать либо цветной монитор, либо улучшенный цветной монитор. К видеоадаптерам VGA нужно подключать специальные многочастотные аналоговые мониторы.
Однако с появлением операционной системы Windows требования к видеоподсистеме компьютера многократно возросли. Ни видеоадаптер EGA, ни видеоадаптер VGA не обеспечивают необходимой разрешающей способности и количества одновременно отображаемых цветов. Поэтому многие фирмы приступили к выпуску собственных расширенных версий видеоадаптера VGA. Они получили общее название SVGA (Super VGA). Видеоадаптеры SVGA не являются устоявшимся стандартом, наподобие EGA и VGA. Различные фирмы выпускают адаптеры SVGA, имеющие различные возможности. При этом они не всегда совместимы друг с другом.
Появились видеоадаптеры SVGA, которые работают в режимах High Color и True Color. В режиме High Color видеоадаптер может одновременно отображать на экране 32768 или 65536 различных цветов. Режим True Color еще более многоцветный. В этом режиме видеоадаптер может одновременно отображать более чем 16,7 миллионов различных цветов. Качество изображения, достигаемое такими видеоадаптерами (при условии использования с ними соответствующих мониторов), почти не уступает качеству цветных слайдов.
Способность видеоадаптера отображать большое количество цветов с высоким разрешением тесно связана с объемом его видеопамяти. Чем больше объем видеопамяти адаптера, тем больше цветов он сможет отобразить и тем выше будет разрешающая способность.
Видеопамять адаптера CGA имела объем всего 16 Кбайт. На современных адаптерах устанавливают как минимум 256 Кбайт памяти. Такого объема видеопамяти достаточно для отображения 16 различных цветов при разрешении 800х600 пикселов. Режимы с большим разрешением или с большим количеством цветов недоступны.
Из следующей таблицы вы можете определить минимальный объем видеопамяти в Кбайтах, необходимый для данного разрешения и количества цветов:
Количество |
Разрешение | ||||
цветов |
640х480 |
800х600 |
1024х768 |
1280х1024 |
1600х1200 |
16 |
150 |
235 |
384 |
640 |
938 |
256 |
300 |
469 |
768 |
1280 |
1875 |
65.536 |
600 |
938 |
1536 |
2560 |
3750 |
16777216 |
900 |
1407 |
2304 |
3840 |
5625 |
Например, в режиме видеоадаптера, когда он одновременно отображает 16,7 миллионов цветов при разрешении 1024х768 пикселов, объем видеопамяти должен составлять 2304 Кбайт. Когда вы будете приобретать новый видеоадаптер, следите, чтобы он имел достаточный для вас объем видеопамяти.
Выпускаются адаптеры с видеопамятью двух типов - DRAM (динамическая оперативная память) и VRAM (специальная видеопамять). Различие между DRAM и VRAM состоит в том, что к памяти VRAM могут одновременно и независимо получить доступ два устройства. Поэтому VRAM иногда называют двух портовой памятью.
Видеоадаптеры, в которых установлена память VRAM обладают большей производительностью, по сравнению с видеоадаптерами, имеющими память DRAM. Однако стоимость таких видеоадаптеров значительно выше.
Для компьютерных систем, критичных к быстродействию видеоподсистемы, выпускаются специальные видеоадаптеры с графическими сопроцессорами. Такие видеоадаптеры могут брать на себя часть вычислительной работы, связанной с построением изображения. Например, они могут самостоятельно построить окружность, определенную ее центром и радиусом, могут аппаратно выполнять перемещение областей изображений на экране.
Для облегчения использования графических сопроцессоров вместе с ними поставляются драйверы к различным операционным системам и отдельным программам. Большинство видеоадаптеров продаются с драйверами для операционных систем Windows и OS/2, а также с драйверами для системы автоматизированного проектирования AutoCAD. Таким образом, в большинстве случаев у вас нет необходимости самим программировать графические сопроцессоры.
Частным случаем видеоадаптеров с графическими сопроцессорами являются графические акселераторы. Они специально предназначены для повышения производительности видеоподсистемы компьютера при работе в среде Windows (а также Windows NT, OS/2). Ориентация таких видеоадаптеров на Windows состоит в том, что они могут выполнять характерные для Windows операции с изображениями на аппаратном уровне. Например, они могут аппаратно реализовывать указатель (курсор) мыши размером 64х64 пиксела, могут аппаратно выполнять перемещение окон по экрану и т. д. Во всех этих случаях акселератор Windows, выполняет работу, которую при использовании обычных видеоадаптеров VGA и SVGA, делал центральный процессор компьютера.
Еще раз подчеркнем, что в отличие от более универсальных графических сопроцессоров, акселератор Windows ориентирован исключительно на использование совместно с Windows. Производительность графического акселератора Windows при использовании его с программами MS-DOS может быть даже ниже, чем у видеоадаптеров SVGA. Если вы предполагаете использовать компьютер для выполнения программ в среде Windows, вам крайне желательно приобрести графический акселератор Windows.
Чтобы увеличить производительность работы видеоадаптеров, на новых моделях видеоадаптеров устанавливают 64-разрядные графические сопроцессоры. Они значительно превосходят старые 16 и 32-разрядные модели адаптеров. Примером видеоадаптера с 64-разрядным графическим сопроцессором может служить плата Diamond Stealth 64.
Практически все платы графического акселератора и графические сопроцессоры могут работать в режимах High Color и True Color. Однако при таких объемах изображения, которые хранит видеопамять в режимах High Color и True Color, количество информации, передаваемое из оперативной памяти компьютера в видеопамять адаптера становится просто огромно. В этом случае замедление в отображении становиться видимым даже при использовании видеоадаптером прямого доступа к оперативной памяти компьютера.
Узким местом становиться системная шина компьютера. Пропускная способность системных шин компьютера EISA и ISA не превышает 10 Мбайт/с. Все современные видеоадаптеры подключаются к локальной шине процессора. Такой способ подключения видеоадаптера обеспечивает высокую скорость обмена информацией между оперативной памятью компьютера и центральным процессором с одной стороны и видеоадаптером с другой. Высокая скорость обмена информацией между компьютером и видеоадаптером, в свою очередь, гарантирует высокую производительность видеоподсистемы компьютера. Сегодня выпускаются видеоадаптеры, предназначенные для подключения к локальным шинам VLB и PCI.