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

       

Функция _setvideomode()


Это одна из наиболее важных функций. Она позволяет изменить режим работы видеоадаптера. Ее формат имеет следующий вид:

short _setvideomode( short mode );

Параметр функции - mode - определяет новый режим и может быть равен одной из констант, представленных в таблице 15.2. Данные константы определены во включаемом файле graph.h.

Константа Режим Характеристики

_TEXTBW40 0, 1 текстовый, 40x25, 16 градаций серого цвета _TEXTC40 0, 1 текстовый, 40x25, 16 цветов _TEXTBW80 2, 3 текстовый, 80x25, 16 градаций серого цвета _TEXTC80 0, 1 текстовый, 80x25, 16 цветов _MRES4COLOR 4, 5 графический, 320x200, 4 цвета _MRESNOCOLOR 4, 5 графический, 320x200, 4 градации серого цвета _HRESBW 6 графический, 640x200, 2 градации серого цвета _TEXTMONO текстовый, 80x25, монохромный _HERCMONO Hercules графический, 720x348, монохромный _MRES16COLOR 0Dh графический, 320x200, 16 цветов _HRES16COLOR 0Eh графический, 640x200, 16 цветов _ERESNOCOLOR 0Fh графический, 640x350, монохромный _ERESCOLOR 10h графический, 640x350, 16 цветов _VRES2COLOR 11h графический, 640x480, 2 цвета _VRES16COLOR 12h графический, 640x480, 16 цветов _MRES256COLOR 13h графический, 320x200, 256 цветов _ORESCOLOR Olivetti графический, 640x400, 1 из 16 видеоадаптер фирмы Olivetti _DEFAULTMODE режим, используемый видеоадаптером по умолчанию _MAXRESMODE графический режим с наивысшим разрешением доступным на данном видеоадаптере _MAXCOLORMODE графический режим с наибольшим числом цветов поддерживаемых видеоадаптером

Таблица 15.2 Режимы работы видеоадаптеров.

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

Функция _setvideomode() возвращает число текстовых строк в установленном режиме работы видеоадаптера. Если произошла ошибка, например запрашиваемый режим не поддерживается видеоадаптером, функция возвращает ноль.

В таблице 15.3 перечислены режимы, используемые для констант _MAXRESMODE и _MAXCOLORMODE в зависимости от конфигурации видеоситемы.

Видеоадаптер _MAXRESMODE _MAXCOLORMODE дисплей


MDA нет нет Hercules _HERCMONO _HERCMONO CGA с CD _HRESBW _MRES4COLOR CGA с MD _HRESBW _MRESNOCOLOR OCGA (фирма _ORESCOLOR _MRES4COLOR Olivetti) OCGA с CD _ORESCOLOR _ERESCOLOR EGA (256K) с CD _HRES16COLOR _HRES16COLOR EGA (64K) с CD _HRES16COLOR _HRES16COLOR EGA(256K) с ECD _ERESCOLOR _ERESCOLOR EGA (64K) с ECD _ERESCOLOR _HRES16COLOR EGA с MD _ERESNOCOLOR _ERESNOCOLOR MCGA _VRES2COLOR _MRES256COLOR VGA _VRES16COLOR _MRES256COLOR OVGA (фирма _VRES16COLOR _MRES256COLOR Olivetti)

Таблица 15.3 Режимы _MAXRESMODE и _MAXCOLORMODE.

Режимы TEXTC40, TEXTBW40 и TEXTC80, TEXTBW80 различаются только используемой цветовой палитрой. В режимах TEXTBW40 и TEXTBW80 могут отображаться только градации серого цвета.

Видеоадаптер Hercules может работать в режиме _HERCMONO. Это монохромный режим с разрешением 720x348 пикселов. Он обеспечивает отображение 25 текстовых строк по 80 символов в каждой. При этом матрица символов имеет размер 9x14 пикселов.

Перед исполнением вашей программы в режиме _HERCMONO надо установить специальный драйвер видеоадаптера Hercules - программу msherc.com. Программу msherc.com можно запустить либо перед выполнением прикладной программы, либо непосредственно из нее (напрмер запустив ее при помощи функций system или exec).

При одновременном использовании видеоадаптеров Hercules и EGA, надо запускать программу msherc.com с ключом /H (Half - половина). После этого видеоадаптер Hercules будет использовать только одну из двух страниц видеопамяти, что позволяет избежать конфликтов между видеоадаптерами.

Теперь приведем простой пример, использующий функцию _setvideomode. Программа сначала пытается перевести видеоадаптер в цветной графический режим _MRES16COLOR, а если адаптер его не поддерживает, то в режим _MRES4COLOR с такой же разрешающей способностью, но меньшим числом цветов.

// Пример использования функций _setvideomode() и _outtext().

#include <conio.h> #include <graph.h>

void main(void) {

// пытаемся установить режим _MRES16COLOR

if(_setvideomode(_MRES16COLOR)) _outtext("установлен режим _MRES16COLOR");

// пытаемся установить режим _MRES4COLOR

else if(_setvideomode(_MRES4COLOR)) _outtext("установлен режим _MRES4COLOR");

else _outtext("Адаптер не поддерживает режимы\n" "_MRES16COLOR and _MRES4COLOR mode.");

getch();

// восстанавливаем режим, используемый адаптером по умолчанию

_setvideomode( _DEFAULTMODE ); }


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