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

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

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

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

9.3. Определение конфигурации и выбор программы распечатки экрана - функция 12h

Данная функция содержит девять различных подфункций:

Номер подфункции Назначение
10h определение конфигурации EGA/VGA
20h выбор программы печати экрана
30h выбор количества линий развертки в текстовом режиме
31h запрещение переустановки палитры цветов
32h управление доступом к VGA
33h управление преобразованием серого цвета
34h эмуляция курсора CGA
35h выбор активного дисплея (PS/2)
36h гашение экрана (VGA)

Определение конфигурации EGA/VGA - подфункция 10h

Функция используется для проверки наличия видеоадаптеров EGA/VGA, а также позволяет получить данные о текущем состоянии видеоадаптера:


На входе:   AH = 12h;

   BL = 10h - опрелделение конфигурации EGA/VGA.

На выходе:   BH = монохромный/цветной режим:

      0 - цветной режим,
      1 - монохромный режим;
   
   BL = объем видеопамяти (для EGA):

      0 - 64К байт,
      1 - 128К байт,
      2 - 192К байт,
      3 - 256К байт;

   CH = биты управления дополнительным
      устройством;

   CL = переключатели на плате EGA.

Если видеоадаптер, установленный на компьютере, не является EGA или VGA, то регистр BX не изменяет своего значения. Это можно использовать для проверки наличия видеоадаптеров EGA/VGA:

mov   ah, 12h

; опрелделение конфигурации EGA/VGA

mov   bl, 10h  
mov   bh, 55h
int   10h

; изменился ли регистр bx

cmp   bx, 5510h

; если нет, то видеоадаптеры EGA и VGA не обнаружены

je   ega_vga_not_found

Выбор программы печати экрана - подфункция 20h

Программа, распечатывающая содержимое экрана по нажатию клавиши PrtScr, не работает в режиме с 43 текстовыми строками. Если вы всеже желает иметь эту полезную возможность, можете выбрать альтернативную программу печати экрана, воспользовавшись подфункцией номер 20h:


На входе:   AH = 12h;

   BL = 20h - выбор альтернативной программы
      печати экрана дисплея.

На выходе:   Не используются.

Выбор количества линий развертки в текстовом режиме - подфункция 30h

Функция используется для получения на VGA текстовых режимов, внешне не отличающихся от CGA или MDA.


На входе:   AH = 12h;

   BL = 30h - выбор числа линий развертки;

   AL = число линий развертки:

      0 - применение двойного сканирования в
      режиме с 200 линиями, размер символа 8х8
      пикселов,


      1 - режим с 350 линиями, размер символа
      8х14 пикселов,


      2 - режим с 400 линиями, размер символа
      8х16 пикселов.

На выходе:   AL = 12h.

Данная функция возвращает в регистре AL значение 12h, если компьютер имеет видеоадаптер VGA. Следовательно эта особенность может использоваться для определения наличия видеоадаптера VGA в системе.

Запрещение переустановки палитры - подфункция 31h

Функция применяется для предотвращения перезагрузки таблицы цветов при выполнении операции выбора режима работы видеоадаптера VGA:


На входе:   AH = 12h;

   BL = 31h - запрещение переустановки палитры;

   AL = разрешение/запрещение переустановки:

      0 - разрешение загрузки палитры операцией
      выбора режима,

      1 - запрещение загрузки палитры операцией
      выбора режима.


На выходе:   AL = 12h.

Данная функция возвращает в регистре AL значение 12h, если компьютер имеет видеоадаптер VGA.

Управление доступом к VGA - подфункция 32h

Вызов функции позволяет запретить (разрешить) доступ к видеопамяти и регистрам адаптера VGA.


На входе:   AH = 12h;

   BL = 32h - управление доступом к VGA;

   AL = разрешение/запрещение доступа:

      0 - разрешение доступа к VGA,

      1 - запрещение доступа к VGA.


На выходе:   AL = 12h.

Данная функция возвращает в регистре AL значение 12h, если компьютер имеет видеоадаптер VGA.

Управление преобразованием серого цвета - подфункция 33h

Поддерживается только VGA. Если разрешено преобразование, то при загрузке регистров таблицы цветов операцией выбора режима работы видеоадаптера или непосредственным вызовом функции загрузки этих регистров происходит корректировка записываемых значений. После этого содержимое регистров будет соответствовать различным градациям серого цвета.


На входе:   AH = 12h;

   BL = 33h - управление преобразованием серого
      цвета;

   AL = разрешение/запрещение преобразования:

      0 - разрешение преобразования,

      1 - запрещение преобразования.


На выходе:   AL = 12h.

Данная функция возвращает в регистре AL значение 12h, если компьютер имеет видеоадаптер VGA.

Приведем фрагмент программы, использующий данную функцию для управления преобразованием серого цвета:

   .......

enable:

   ; разрешение преобразования содержимого регистров
   ; таблицы цветов в шкалу градаций серого цвета

   xor   al,al
   jmp   conversion

disable:

   ; запрещение преобразоваания содержимого регистров
   ; таблицы цветов

   mov   al,1

conversion:   

   mov   ah,12h
   mov   bl,33h
   int   10h

   .......

Эмуляция курсора CGA - подфункция 34h

Функция решает проблемы, возникающие при использовании программ для CGA на компьютерах, оснащенных видеоадаптерами VGA в улучшенных режимах, когда размер символа по сравнению с использующимся в CGA увеличен. При разрешнии эмуляции курсора CGA, его размеры устанавливаются, как будто символы имеют высоту 8 пикселов.


На входе:   AH = 12h;

   BL = 34h - управление эмуляцией курсора CGA;

   AL = разрешение/запрещение эмуляции курсора:

      0 - разрешение эмуляции,

      1 - запрещение эмуляции;


На выходе:   AL = 12h.

Данная функция возвращает в регистре AL значение 12h, если компьютер имеет видеоадаптер VGA.

Выбор активного дисплея - подфункция 35h

Используется в системе PS/2 для переключения между видеоадаптером VGA, расположенном на материнской плате компьютера, и дополнительным видеоадаптером, даже если между ними есть конфликт по адресам видеопамяти или портам ввода/вывода. Система PS/2 после загрузки в качестве первичного видеоадаптера использует дополнительный.

Программа, производящая переключение видеоадаптеров должна поддерживать 128-байтовый буфер для сохранения информации о состянии неактивного видеоадаптера.


На входе:   AH = 12h;

   BL = 35h - выбор активного дисплея для PS/2;

   ES:DX - адрес буфера (128 байт);

   AL =   0 - выключение дополнительного
      видеоадаптера (должно быть использовано
      при первом вызове функции),

      1 - включение видеоадаптера VGA (должно
      быть использовано во втором вызове
      функции),

      2 - выключение активного видеоадаптера
      (используется в последующих вызовах
      функции),

      3 - включение неактивного видеоадаптера
      (используется в последующих вызовах
      функции).

На выходе:   AL = 12h.

Данная функция возвращает в регистре AL значение 12h, если компьютер имеет видеоадаптер VGA.

Гашение экрана - подфункция 36h

Видеоадаптер VGA имеет возможность гашения экрана дисплея:


На входе:   AH = 12h;

   BL = 36h - управление гашением экрана дисплея;

   AL =   0 - включение экрана,

      1 - гашение экрана.

На выходе:   AL = 12h.

Данная функция возвращает в регистре AL значение 12h, если компьютер имеет видеоадаптер VGA.

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