Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых

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

© Александр Фролов, Григорий Фролов
Том 3, М.: Диалог-МИФИ, 1992, 287 стр.

[Назад] [Содеожание] [Дальше]

14.12. Функция _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 );
}
[Назад] [Содеожание] [Дальше]