Программирование видеоадаптеров CGA,EGA и VGA

         

Программирование видеоадаптеров CGA,EGA и VGA

Соглашения, принятые при изложении материала
Пролог

Введение
Типы дисплеев
Монохромный дисплей
Цветной дисплей
Улучшенный цветной дисплей
Многочастотный цветной дисплей
Дисплей VGA

Режимы работы видеоадаптеров
Режимы 0 и 1


Страничная организация видеопамяти.
Режимы 0*, 1*
Режимы 0+, 1+
Режимы 2 и 3
Режимы 2*, 3*
Режимы 2+, 3+

Режимы 4 и 5
Режим 6
Режим 7
Режим 7+
Режимы 8, 9, 0Ah
Режим 0Dh
Режим 0Eh
Режим 0Fh
Режим 10h
Режим 11h

Режим 12h
Режим 13h

Системы с двумя видеоадаптерами
Системы с двумя дисплеями.
Смена первичного дисплея.

Архитектура видеоадаптера CGA
Текстовые режимы CGA
Байт атрибутов символа.

Знакогенератор
Видеопамять в графических режимах CGA
Режимы 4 и 5
Структура видеопамяти для режимов 4 и 5.
Режим 6
Структура видеопамяти в режиме 6.
Организация видеопамяти адаптера Hercules
Структура памяти видеоадаптера Hercules в графических режимах.

Архитектура видеоадаптеров EGA и VGA
Блок схема видеоадаптеров EGA/VGA. 5.1. Электронно-лучевая трубка
Электронно-лучевая трубка
Экран электронно-лучевой трубки.
Видеопамять
Текстовый режим
Структура видеопамяти в текстовых режимах.
Преобразование кода ASCII в образ символа на экране.
Отображение цветовых слоев.

Знакогенератор
Активные таблицы знакогенераторов.
Атрибуты символов
Байт атрибутов символа.
Атрибуты символов (монохромный режим)
Видеопамять в графических режимах
Режимы 4 и 5
Структура видеопамяти для режимов 4 и 5.
Режим 6
Структура видеопамяти в режиме 6.

Режимы 0Dh и 0Eh
Структура видеопамяти в режимах 0Dh и 0Eh.
Режим 0Fh
Структура видеопамяти режима 0Fh.
Режим 10h
Структура видеопамяти режима 10h.
Режим 11h
Структура видеопамяти режима 11h.
Режим 12h
Структура видеопамяти режима 12h.

Режим 13h
Структура видеопамяти в режиме 13h.
Графический контроллер
Исполнение видеоадаптером операции записи
Иллюстрирует выполнение графическим контроллером операции записи данных в видеопамять:
Запись данных в видеопамять.
Выполнение видеоадаптером операции чтения
Последовательный преобразватель
Контроллер атрибутов
Контроллер атрибутов в текстовых режимах.

Контроллер атрибутов в графических режимах.
Контроллер ЭЛТ
Синхронизатор

Регистры видеоадаптера CGA
Краткий обзор
Регистры контроллера ЭЛТ
Общая длина линии горизонтальной развертки (Horizontal Total Register - HTR) (индекс0)
Длина отображаемой части горизонтальной
Положение горизонтальной синхронизации (Horizontal Sync Position - SHBR) (индекс2)
Ширина горизонтального синхросигнала (Horizontal Sync Pulse Width Register - HSPWR) (индекс3)
Число горизонтальных линий растра (VTR) (индекс4)
Выравнивание растра (Vertical Total Adjust Register - VTAR) (индекс5)

Длина отображаемой части вертикальной развертки (Vertical Displayed - VDR) (индекс6)
Положение вертикальной синхронизации (Vertical Sync Position Register - VSPR) (индекс7)
Режим соединения (Interlase Mode Register - IMR) (индекс8)
Высота символов текста (Max Scan Line Register - MSLR) (индекс9)
Использование регистра высоты
Начальная линия курсора (Cursor Start Register - CSR) (индекс0Ah)
Конечная линия курсора (Cursor End Register - CER) (индекс0Bh)
Регистры начального адреса
Использование регистров начального адреса. Регистры, определяющие положение курсора
Регистры, определяющие положение курсора

Отображение курсора на экране.
Регистр адреса светового пера (LPAR)
Регистр выбора режима. (Mode Select Register)
Регистр выбора цвета. (Color Select Register)
Регистр состояния (Input Status Register - ISR0)
Регистр сброса триггера-защелки светового пера (Light Pen Latch Reset Register - LPLRR)
Регистр установки триггера-защелки светового пера (Light Pen Latch Set Register - LPLRR)

Регистры видеоадаптеров EGA и VGA
Краткий обзор
Внешние регистры

Регистр определения различных режимов работы (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 - LPLRR)
Регистры контроллера ЭЛТ
Общая длина линии горизонтальной развертки (Horizontal Total Register - HTR) (индекс0)
Длина отображаемой части горизонтальной

Начало импульса гашения луча горизонтальной
Конец импульса гашения луча горизонтальной
Начало импульса горизонтального
Конец импульса горизонтального
Число горизонтальных линий растра (VTR) (индекс6)
Дополнительный регистр (OVR) (индекс7)
Предварительная установка горизонтальной развертки (Preset Row Scan Register - PRSR) (индекс8)
Плавная прокрутка экрана.
Высота сиволов текста (Max Scan Line Register - MSLR) (индекс9)
Изменение высоты символов текста.

Изменение высоты символов текста. Начальная линия курсора (Cursor Start Register - CSR) (индекс0Ah)
Начальная линия курсора (Cursor Start Register - CSR) (индекс0Ah)
Конечная линия курсора (Cursor End Register - CER) (индекс0Bh)
Изменение положения курсора.
Регистры начального адреса
Процесс панорамирования экрана.
Регистры, определяющие положение курсора
Отображение курсора на экране.
Начало обратного вертикального хода луча (VRSR) (индекс10h)
Конец обратного вертикального хода луча (VRER) (индекс11h)

Регистр адреса светового пера (LPAR)
Завершение отображения вертикальной развертки (VDER) (индекс 12h)
Логическая ширина экрана (OFR) (индекс13h)
Логическая ширина экрана. Положение подчеркивания символа (ULR) (индекс14h)
Положение подчеркивания символа (ULR) (индекс14h)
Начало импульса гашения вертикальной развертки (SVBR) (byltrc 15h)
Конец импульса гашения вертикальной развертки (EVBR) (индекс16h)
Управление режимом (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)
Использование регистра CCR.
Регистр циклического сдвига и выбора функции (Data Rotate Function Select - DRFS) (индекс3)
иллюстрирует выполнение
Логические операции и операция циклического сдвига.
Регистр выбора читаемого слоя (Read Plane Select Register - RPSR) (индекс4)
Операция чтения из видеопамяти. Регистр режима работы (Mode Register - MDR) (индекс5)
Регистр режима работы (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)
Улучшенный цветной дисплей.
Цветной дисплей.
Монохромный дисплей.

Дисплей VGA.
Регистр управления режимом (Mode Control Register - MCR) (индекс10h)
Регистр цвета рамки экрана (Screen Border Color Register - SBCR) (индекс11)
Регистр разрешения цветового слоя (Color Plane Enable Register - CPER) (индекс12)
Регистр горизонтального панорамирования (Horizontal Panning Register - HPR) (индекс13)
Горизонтальный сдвиг экрана.
Регистр выбора цвета (Color Select Register - CSR) (индекс14)
Регистры цифро-аналогового преобразователя VGA
Схема управления цветами (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
Организация видеопамяти
Структура видеопамяти в нестандартных, 256-цветовых режимах.
Режим 320х400 пикселов, 256 цветов
Режим 360х480 пикселов, 256 цветов

Основные средства BIOS для работы с видеоадаптерами
Выбор режима работы - функция 00h
Изменение формы курсора - функция 01h
Изменение положения курсора. 8.3. Изменение положения курсора - функция 02h
Изменение положения курсора - функция 02h
Определение положения и формы курсора - функция 03h

Использование светового пера - функция 04h
Изменение активной страницы видеопамяти - функция 05h
Свертка текстового окна вверх - функция 06h
Свертка текстового окна вниз - функция 07h
Чтение символа и его атрибутов - функция 08h
Запись символа с атрибутами в текущей позиции курсора - функция 09h
Запись символа в текущей позиции курсора - функция 0Ah
Установка цветовой палитры (ржимы 4,5,6) - функция 0Bh
Вывод пиксела - функция 0Ch
Чтение пиксела - функция 0Dh

Запись символа в режиме телетайпа - функция 0Eh
Определение текущего режима работы видеоадаптера - функция 0Fh

Дополнительные средства BIOS для управления EGA и VGA
Управление регистрами палитры - функция 10h

Установка одного регистра палитры - подфункция 00h
Установка цвета рамки - подфункция 01h
Установка всех регистров палитры - подфункция 02h
Управление атрибутом мигания и атрибутом интенсивности - подфункция 03h
Чтение регистра палитры - подфункция 07h
Чтение регистра цвета рамки - подфункция 08h
Чтение всех регистров палитры - подфункция 09h
Установка одного регистра таблицы цветов (регистров ЦАП) - подфункция 10h
Установка нескольких регистров таблицы цветов (регистров ЦАП) - подфункция 12h
Выбор подмножества цветов - подфункция 13h

Чтение регистра таблицы цветов - подфункция 15h
Чтение нескольких регистров таблицы цветов (регистров ЦАП) - подфункция 17h
Определение режима подмножества цветов - подфункция 1Ah
Установка палитры из градаций серого цвета - подфункция 1Bh
Загрузка таблиц знакогенератора - функция 11h
Загрузка набора символов пользователя - подфункция 00h
Загрузка монохромного набора символов - подфункция 01h
Загрузка стандартного набора символов видеоадаптера CGA - подфункция 02h
Выбор активных таблиц знакогенератора (EGA) - подфункция 03h
Загрузка стандартного набора символов видеоадаптера VGA - подфункция 04h

Установка вектора прерывания 1Fh - подфункция 20h
Использование графического режима для отображения символов пользователя - подфункция 21h
Использование набора символов 8х14 из ПЗУ
Использование набора символов 8х8 из ПЗУ
Использование набора символов 8х16 из ПЗУ
Получение информации об используемом наборе символов - подфункция 30h
Определение конфигурации и выбор программы распечатки экрана - функция 12h
Определение конфигурации EGA/VGA - подфункция 10h
Выбор программы печати экрана - подфункция 20h
Выбор количества линий развертки в текстовом режиме - подфункция 30h

Запрещение переустановки палитры - подфункция 31h
Управление доступом к VGA - подфункция 32h
Управление преобразованием серого цвета - подфункция 33h
Эмуляция курсора CGA - подфункция 34h
Выбор активного дисплея - подфункция 35h
Гашение экрана - подфункция 36h
Вывод текстовой сторки - функция 13h
Чтение/запись конфигурации видеосистемы - функция 1Ah
Чтение конфигурации видеосистемы - подфункция 00h
Запись конфигурации видеосистемы - подфункция 01h

Получение данных о состоянии VGA - функция 1Bh
Сохранение/восстановление состояния видеоадаптера - функция 1Ch
Определение размера буфера - подфункция 00h
Сохранение текущего состояния видеоадаптера - подфункция 01h
Восстановление текущего состояния видеоадаптера - подфункция 02h

Область данных видеофункций BIOS
Переменные в младших адресах памяти
Таблица окружения
Таблица параметров
Область сохранения

Вспомогательная таблица символов текстового режима
Вспомогательная таблица символов для графического режима

Использование функций MS-DOS для управления видеоадаптерами
Вывод символов - функция 02h
Вывод строки на экран дисплея - функция 09h

Стандартные функции вывода языка Си
Функции putchar() и putc()
Функция puts()
Функция printf()
Функция putch()
Функция cputs()
Функция cprintf()

Функции управления видеоадаптером
Функция _displaycursor()
Функция _gettextcursor()
Функция _settextcursor()
Функция _gettextposition()
Функция _settextposition()
Функция _getbkcolor()
Функция _setbkcolor()
Функция _gettextcolor()
Функция _settextcolor()

Функция _outtext()
Функции _setactivepage(), _setvisualpage(), _getactivepage() и _getvisualpage()
Функция _setvideomode()
Функция _clearscreen()
Функция _settextwindow()

Основные графические функции
Функция _setpixel()

Функция _lineto()
Функция _moveto()
Функция _rectangle()
Функция _ellipse()
Построение эллипса функцией _ellipse().
Функция _arc()
Построение дуги эллипса функцией _arc().
Функция _pie()
Построение сектора эллипса при помоши функции _pie().
Функция _setcolor()

Функция _selectpalette()
Функция _setlinestyle()
Функция _setviewport()
Функция _setvieworg()
Функция _setvideomoderows()
Функция _getimage()
Функция _putimage()
Функция _imagesize()

Приложения
Таблицы ASCII-кодов символов
Руссификация видеоадаптеров
Установка переключателей на плате EGA.
Режимы работы видеоадаптеров.

Карта памяти CGA/EGA/VGA
Карты портов ввода/вывода видеоадаптера CGA
Регистры контроллера ЭЛТ Motorola 6845.
Карты портов ввода/вывода видеоадаптеров EGA и VGA для монохромного и цветного режимов
Регистры контроллера ЭЛТ EGA/VGA8
Регистры синхронизатора EGA/VGA8
Регистры графического контроллера EGA/VGA
Регистры контроллера атрибутов EGA/VGA
Регистры цифро-аналогового преобразователя VGA
Включаемый файл "SYSP.H"

Включаемый файл "SYSGRAPH.H"
Включаемый файл "VGA_NEW.H"
Словарь терминов
George Sutty, Steve Blair, "Programmer's Guide to the EGA/VGA", New York, 1988.

Bradley Dyck Kliewer, "EGA/VGA A Programmer's Reference Guide", New York, 1988.
Richard Wilton, "Programmer's
Kent Porter, "Stretching Quick C", New York, 1989.
Michael Abrash, "VGA color paging", Programmer's Journal 7.5, 1989.
Michael Abrash, "Still-higher 256-color VGA resolutions", Programmer's Journal 7.5, 1989.
Michael Abrash, "Higher 256-color