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

       

Краткий обзор


Большая часть регистров CGA доступна только для записи, что создает определенные проблемы, особенно для мультизадачных систем.

Доступ к большинству регистров видеоадаптеров осуществляется в два этапа: через один порт ввода/вывода выбираетя номер интересующего вас регистра, а затем через другой порт ввода/вывода осуществляется обмен данными. Это позволяет сэкономить большое число портов процессора.

Ниже, в таблице 7.1, приведен список адресов регистров видеоадаптера CGA.



Адрес Регистр
3D4, Регистры контроллера ЭЛТ
3D5 (CRT Controller Register's - CRT_CR)
3D8 Регистр установки режима
3D9 Регистр установки цвета
3DA Регистр состояния (Input Status Register - ISR)
3DB Регистр очистки тригера-защелки светового пера (Clear Light Pen Latch Register- CLPLR)
3DC Установка тригера-защелки светового пера (Set Light Pen Latch Register - SLPLR)

Таблица 7.1 Карта портов ввода/вывода CGA.

В таблице 7.2 приведены адреса памяти в зависимости от режима работы:

Номер режима работы Адрес памяти
0,1,2,3,4,5,6 B000:8000-B000:FFFF

Таблица 7.2 Распределение памяти в разных режимах.


/p> Таблица 8.1 Карта портов ввода/вывода (монохромный режим).

Адрес Регистр
3C2 регистр определения различных режимов работы (Miscellaneous Output Register - MOR);
  регистр состояния 0 (Input Status Register 0 - ISR0).
3DA регистр управления дополнительным устройством Feature Control Register)
  регистр состояния 1 (Input Status Register 1 - ISR1)
3DB регистр очистки защелки светового пера (Clear Light Pen Latch Register- CLPLR)
3DC установка защелки светового пера (Set Light Pen Latch Register - SLPLR)
3C4, регистры синхронизатора
3C5 (Sequencer Register's - SR)
3D4, регистры контроллера ЭЛТ
3D5 (CRT Controller Register's - CRT_CR)
3CA, регистры графического контроллера
3CC, (Graphics Controller Register's - GCR)
3CE,  
3CF  
3C0 регистр контроллера атрибутов (Attribute Controller Register - ACR)
3C3 регистр разрешения работы системы VGA (VGA Enable Register - VGA_ER)
3C6, регистры ЦАП VGA
3C7, (VGA Video DAC Register - VGA_DAC_R)
3C8,  
3C9  
Таблица 8.2 Карта портов ввода/вывода (цветной режим).

Адресное пространство видеопамяти также различается в разных режимах работы видеоадаптера. В таблице 8.3 приведены адреса памяти в зависимости от режима работы.

Номер режима работы Адрес памяти
0,1,2,3,4,5,6 B000:8000-B000:FFFF
7 B000:0000-B000:7FFF
0Dh,0Eh,0Fh,10h,11h,12h,13h A000:0000-A000:FFFF
Таблица 8.3 Распределение видеопамяти в различных режимах.

Функция Get_Seg_Vmem, приведенная ниже, при помощи функции 0Fh прерывания INT 10h определяет текущий режим работы видеоадаптера и возвращает сегмент начала видеопамяти. Если видеоадаптер работает в нестандартном режиме, функция возвращает ноль.

#include "sysp.h"

unsigned Get_Seg_Vmem(void) {

unsigned char mode; unsigned seg_address;

// определяем текущий режим видеоадаптера

_asm { mov ah,0Fh int 10h mov mode,al }

// если видеоадаптер находится в режимах 0, 1, 2, 3, // 4, 5, 6 то видеопамять начинается с сегмента B800h



if((mode >= 0) && (mode <= 6)) seg_address = 0xB800;

// если видеоадаптер находится в режиме 7, // то видеопамять начинается с сегмента B000h

else if(mode == 7) seg_address = 0xB000;

// если видеоадаптер находится в режимах 0Dh - 13h, // то видеопамять начинается с сегмента A000h

else if((mode >= 0x0D) && (mode <= 0x13)) seg_address = 0xA000;

// если видеоадаптер не находится в стандартном режиме // возвращаем ноль

else seg_address = 0x0;

return(seg_address); }

Ниже подробно рассмотрены регистры видеоадаптеров EGA и VGA. Регистры сгруппированы по признаку выполняемых ими функций. Мы выделили следующие группы регистров:

  • Внешние регистры.


  • Регистры контроллера ЭЛТ.


  • Регистры графического контроллера.


  • Регистры контроллера атрибутов.


  • Регистры синхронизатора


  • Регистры цифро-аналогового преобразователя VGA.



  • Содержание раздела