Программирование видеоадаптеров CGA, EGA и VGA© Александр Фролов, Григорий ФроловТом 3, М.: Диалог-МИФИ, 1992, 287 стр. 9.3. Определение конфигурации и выбор программы распечатки экрана - функция 12hДанная функция содержит девять различных
подфункций:
Определение конфигурации 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. |