9. Дополнительные средства BIOS для управления EGA и VGAВ этой главе описаны остальные функции BIOS, которые реализованы только на видеоадаптерах EGA и VGA. Так же, как и в предыдущей главе, использование каждой группы функций иллюстрируется соответствующими примерами программ. 9.1. Управление регистрами палитры - функция 10hФункция 10h предоставляет возможность программирования регистров цветовой палитры, таблицы цветов (VGA), а также управляет некоторыми атрибутами символов. Для EGA эта функция содержит следующие четыре
подфункции:
VGA поддерживает дополнительно еще 10 подфункций:
Установка одного регистра палитры - подфункция 00hФункция выполняет запись в регистр палитры: На входе: AH = 10h - функция 10h; AL = 00h - установка регистра палитры; BL = номер регистра палитры (0-Fh); BH = данные, записываемые в регистр. На выходе: Не используются. Следующий фрагмент записывает в регистр палитры с номером reg_num содержимое переменной data: mov ah,10h ; функция 10h xor al,al ; подфункция 0h mov bl,num_reg ; задаем номер регистра палитры mov bh,data ; новое значение регистра int 10h Установка цвета рамки - подфункция 01hФункция выполняет запись значения в регистр цвета рамки контроллера атрибутов. Надо иметь в виду, что эта функция не работает в некоторых режимах EGA. На входе: AH = 10h; AL = 01h - устновка цвета рамки; BH = значение, записываемое в регистр (цвет). На выходе: Не используются. Пример, приведенный ниже, использует подфункцию 01h для изменения цвета рамки экрана: #include <dos.h> #include <stdio.h> void main(void); void main(void) { union REGS inregs, outregs; unsigned char i; // пробуем 16 цветов для рамки for(i = 0; i < 16; i++) { // функция управления контроллером атрибутов inregs.h.ah = 0x10; // подфункция установки цвета рамки inregs.h.al = 0x1; // номер нового цвета рамки inregs.h.bh = i; int86( 0x10, &inregs, &outregs ); // ожидаем нажатия на любую клавишу getch(); } } Установка всех регистров палитры - подфункция 02hФункция обеспечивает быстрое заполнение новыми значениями всех регистров палитры и регистра цвета рамки. Новые значения регистров записываются в 17-байтовой таблице где-нибудь в оперативной памяти компьютера. Байты 0 - 15 содержат новые значения для регистров палитры, а байт 16 для регистра цвета рамки. На входе: AH = 10h; AL = 02h - установка регистров палитры и регистра цвета рамки; ES:DX = адрес таблицы с новыми значениями регистров. На выходе: Не используются. Управление атрибутом мигания и атрибутом интенсивности - подфункция 03hУправляет битом D7 байта атрибутов символа (см. главу "Атрибуты символов"): На входе: AH = 10h; AL = 03h - управление битом D7 байта атрибутов; BL = 0 - бит D7 управляет интенсивностью фона, 1 - бит D7 управляет миганием символа. На выходе: Не используются. /** *.Name ControlBlinkIntens *.Title Управление атрибутом мигания/интенсивности * *.Descr Эта функция управляет назначением бита D7 байта * атрибутов символа. * *.Proto void ControlBlinkIntens(unsigneg char blink) * *.Params unsigneg char blink - если параметр функции * равен нулю, то бит D7 будет определять * интенсивность фона символа. Если параметр равен * единице, то бит D7 управляет миганием символа. * *.Return Не определено. **/ ControlBlinkIntens(unsigneg char blink) { union REGS inregs, outregs; // функция управления контроллером атрибутов inregs.h.ah = 0x10; // подфункция управления атрибутом мигания/интенсивности inregs.h.al = 0x3; inregs.h.bl = blink; int86( 0x10, &inregs, &outregs ); } Чтение регистра палитры - подфункция 07hФункция поддерживается только видеоадаптером VGA. Она позволяет прочитать содержимое любого регистра палитры: На входе: AH = 10h; AL = 07h - чтение регистра палитры; BL = номер читаемого регистра палитры (0-15). На выходе: BH = содержимое регистра палитры. ... mov ah,10h mov al,7h mov bl,num_reg int 10h mov reg_value,bh ... Чтение регистра цвета рамки - подфункция 08hФункция поддерживается только видеоадаптером VGA. Позволяет прочитать содержимое регистра цвета рамки: На входе: AH = 10h; AL = 08h - чтение регистра цвета рамки. На выходе: BH = содержимое регистра цвета рамки. Чтение всех регистров палитры - подфункция 09hДля видеоадаптера VGA данная функция позволяет прочитать значения всех регистров палитры и регистра цвета рамки. Для чтения регистров надо зарезервировать участок памяти (17 байт). После вызова функции байты 0 - 15 будут содержать значения соответствующих регистров палитры, а байт 16 - значение регистра цвета рамки. На входе: AH = 10h; AL = 9 - чтение всех регистров палитры; ES:DX - указатель на 17-байтовую таблицу. На выходе: По адресу ES:DX содержится таблица, заполненная значениями из регистров палитры. Приведем фрагмент программы, который считывает значения всех регистров палитры и регистра цвета рамки в буфер памяти buffer: ; определяем адрес буфера для записи значений регистров ; палитры и регистра цвета рамки mov ax,SEG buffer mov es,ax mov dx,OFFSET buffer ; считываем значения всех регистров палитры и регистра ; цвета рамки mov ah,10h mov al,9 int 10h Установка одного регистра таблицы цветов (регистров ЦАП) - подфункция 10hФункция производит запись 18-битной величины в один из 256 регистров таблицы цветов: На входе: AH = 10h; AL = 10h - установка регистра таблицы цветов; BX = номер регистра таблицы цветов (0-255); DH = интенсивность красного цвета (6 бит); CH = интенсивность зеленого цвета (6 бит); CL = интенсивность синего цвета (6 бит). На выходе: Не используются. Пример использования функции установки одного регистра таблицы цветов приведен ниже: mov ah,10h ; выбираем функцию установки регистра цветов mov al,ah ; устанавливаем номер регистра таблицы цветов mov bx,num_reg ; определяем величины красной, зеленой и синей составляющих mov dh,red mov ch,green mov cl,blue int 10h Установка нескольких регистров таблицы цветов (регистров ЦАП) - подфункция 12hФункция производит запись 18-битной величины в несколько последовательно расположенных регистров таблицы цветов: На входе: AH = 10h; AL = 12h - установка нескольких регистров таблицы цветов; BX = номер первого регистра таблицы цветов (0 -255); CX = число устанавливаемых регистров (1-256); ES:DX - адрес таблицы цветов. На выходе: Не используются. Таблица цветов содержит по три байта на один регистр таблицы цветов. В каждом байте значимыми являются только 6 младших бит. Выбор подмножества цветов - подфункция 13hФункция предназначена для выбора числа подмножеств цветов и выбора активного подмножества: На входе: AH = 10h; AL = 13h - выбор подмножества цветов; BL = 0 - выбор режима: BH = 0 - 4 подмножества из 64 цветов; BH = 1 - 16 подмножеств из 16 цветов; BL = 1 - выбор активного подмножества: BH = номер подмножества (0-4 или 0-15). На выходе: Не используются. Приведем фрагмент программы использующий данную функцию: ; выбираем режим (bh = 1) mov ah,10h mov al,13h xor bx,bx inc bh int 10h ; устанавливаем активное подмножество subset_num mov ah,10h mov al,13h mov bl,1 mov bh,subset_num int 10h Чтение регистра таблицы цветов - подфункция 15hФункция поддерживается только для видеоадаптеров VGA. Она выполняет чтение одного из регистров таблицы цветов: На входе: AH = 10h; AL = 15h - чтение регистра таблицы цветов; BL = номер читаемого регистра (0-255). На выходе: DH = интенсивность красного цвета (6 бит); CH = интенсивность зеленого цвета (6 бит); CL = интенсивность синего цвета (6 бит); Следующий пример позволяет считать значение регистра таблицы цветов с номером num_color_reg: mov ah,10h mov al,15h mov bx,num_color_reg int 10h mov red_data,dh mov green_data,ch mov blue_data,cl Чтение нескольких регистров таблицы цветов (регистров ЦАП) - подфункция 17hФункция производит чтение 18-битовых значений из нескольких последовательно расположенных регистров таблицы цветов: На входе: AH = 10h; AL = 17h - чтение нескольких регистров таблицы цветов; BL = номер первого регистра таблицы цветов (0 -255); CX = число считываемых регистров (1-256); ES:DX - адрес таблицы цветов; На выходе: Данные в таблице по адресу ES:DX. Таблица цветов содержит по три байта на один регистр таблицы цветов. В каждом байте значащимии являются только младшие 6 бит. Определение режима подмножества цветов - подфункция 1AhВозвращает число текущих цветовых подмножеств: На входе: AH = 10h; AL = 1Ah - определение числа цветовых подмножеств. На выходе: BL = 0 - используются 4 цветовых подмножества по 64 цвета; 1 - используются 16 цветовых подмножеств по 16 цветов; BH - номер подмножества, используемого в данный момент. mov ah,10h mov al,1ah int 10h mov num_subset,bh Установка палитры из градаций серого цвета - подфункция 1BhФункция заполняет часть таблицы цветов значениями, соответствующими различным оттенкам серого цвета. Для каждого модифицируемого регистра таблицы цветов сначала читаются записанные в нем данные, а затем записываются обратно по следующему правилу: красного 30 - процентов, зеленого - 59 процентов и голубого - 11 прцентов от считанного значения. На входе: AH = 10h; AL = 1Bh - установка палитры из градаций серого цвета; BX = номер первого регистра таблицы цветов (0 -255); CX = число модифицируемых регистров (1-256). На выходе: Не используются. Следующий пример демонстрирует, как преобразовать таблицу цветов для отображения различных градаций серого цвета. Модифицируются значения регистров таблицы цветов, имеющих номера от first_num до end_num: mov ah,10h mov al,1Bh mov bx,first_num ; номер первого модифицируемого регистра mov cx,end_num ; номер последнего модифицируемого регистра sub cx,bx ; определяем число изменяемых регистров int 10h 9.2. Загрузка таблиц знакогенератора - функция 11hФункция 11h прерывания 10h предназначена для загрузки в память таблиц знакогенератора (наборов символов). При помощи данной функции можно загружать как стандартные таблицы знакогенератора, так и таблицы, самостоятельно разработанные программистом. Загружается либо вся таблица, либо ее часть. Данная функция позволяет легко "русифицировать" ваш видеоадаптер (если это не CGA или Hercules). Функция 11h содержит одиннадцать различных
подфункций, перечисленных ниже:
Для подфункций 00, 01, 02, 03, 04 установка бита D4 в регистре AL вызывает перезагрузку регистров контроллера ЭЛТ. Вновь устанавливаются значения принятые по умолчанию для регистров формы курсора и регистра высоты символа текста. Если используется эта особенность, вызов данной функции должен происходить сразу после установки режима работы видеоадаптера. В противном случае вызов функции 11h может привести к непредсказуемым последствиям. Загрузка набора символов пользователя - подфункция 00hФункция заменяет текущий набор символов знакогенератора или его часть набором символов, определенных пользователем. Таблица знакогенератора пользователя должна быть загружена в оперативную память до вызова функции. После вызова она может быть удалена из памяти. На входе: AH = 11h; AL = 00h, 10h - загрузка набора символов пользователя; ES:BP = адрес таблицы с новым набором символов; CX = число загружаемых символов (1-256); DX = смещение в таблице знакогенератора (0-255), используется для загрузки части набора символов; BL = номер загружаемой таблицы знакогенератора - для EGA 0-3, для VGA 0-7; BH = число байт отводимых на символ в таблице символов (1-32); На выходе: Не используются. Загрузка монохромного набора символов - подфункция 01hФункция загружает стандартный набор символов (8х14 пикселов) из ПЗУ BIOS во второй цветовой слой видеопамяти: На входе: AH = 11h; AL = 01h, 11h - загрузка монохромного набора символов ; BL = номер загружаемой таблицы знакогенератора (для EGA 0-4, для VGA 0-7). На выходе: Не используются. Загрузка стандартного набора символов видеоадаптера CGA - подфункция 02hФункция загружает стандартный набор символов CGA (8х8 пикселов) из ПЗУ BIOS во второй цветовой слой видеопамяти: На входе: AH = 11h; AL = 02h, 12h - загрузка набора символов CGA; BL = номер загружаемой таблицы знакогенератора (для EGA 0-4, для VGA 0-7); На выходе: Не используются. Выбор активных таблиц знакогенератора (EGA) - подфункция 03hПрограмма через эту функцию может установить активные таблицы знакогенератора. Напомним, что EGA имеет четыре таблицы, одна или две из которых могут быть активными. Каждая таблица содержит 256 символов. Одновременно могут отображаться 512 символов, при этом номер используемой таблицы определяется битом D3 байта атрибутов символа. На входе: AH = 11h; AL = 03h - выбор активных таблиц знакогенератора; BL выбирает активные таблицы: D1-D0 номер таблицы, используемой, когда бит D3 атрибута равен нулю; D3-D2 номер таблицы используемой, когда бит D3 атрибута равен единице; D4 только для VGA расширение для битов D0 и D1 D5 только для VGA расширение для битов D2 и D3 D7-D6 не используются. На выходе: Не используются. Загрузка стандартного набора символов видеоадаптера VGA - подфункция 04hФункция загружает стандартный набор символов VGA (8х16 пикселов) из ПЗУ BIOS во второй цветовой слой видеопамяти: На входе: AH = 11h; AL = 04h, 14h - загрузка набора символов CGA; BL = номер загружаемой таблицы знакогенератора (0-7). На выходе: Не используются. Установка вектора прерывания 1Fh - подфункция 20hИспользуется в графических режимах 4, 5 и 6 (совместимых с CGA), если необходимо отображать одновременно больше 128 символов. Вектор 1Fh применяется для указания на таблицу с дополнительными 128 символми, имеющими коды ASCII от 127 до 255. Программа должна поддерживать таблицы для дополнителььных символов. Размер символов должн быть 8х8 пикселов. На входе: AH = 11h; AL = 20h - установка вектора прерывания 1Fh, который хранит адрес таблицы дополнительных символов; ES:BP - адрес таблицы дополнительных символов. На выходе: Не используются. Использование графического режима для отображения символов пользователя - подфункция 21hПозволяет программе отображать на экране одновременно графику и текст. Адаптер переходит в графический режим и вектор прервания 43h устанавливается так, что используется таблица знакогенератора пользователя. В таком режиме может отображаться до 43 строк текста на экране. (Для этого необходим улучшенный цветной дисплей.) На входе: AH = 11h; AL = 21h - установка вектора прерывания 43h; ES:BP = адрес таблицы символов; CX = количество байт, кодирующих один символ в таблице символов; BL = количество отображаемых на экране строк текста: 1 - 14 строк, 2 - 25 строк, 3 - 43 строки, 0 - число строк содержится в регистре DL. На выходе: Не используются. Использование набора символов 8х14 из ПЗУНа входе: AH = 11h; AL = 22h установка вектора прерывания 43h; BL = количество отображаемых строк текста: 1 - 14 строк, 2 - 25 строк. На выходе: Не используются. Использование набора символов 8х8 из ПЗУНа входе: AH = 11h; AL = 23h установка вектора прерывания 43h; BL = количество отображаемых строк текста: 2 - 25 строк, 3 - 43 строки. На выходе: Не используются. Использование набора символов 8х16 из ПЗУНа входе: AH = 11h; AL = 24h установка вектора прерывания 43h; BL = количество отображаемых строк текста: 1 - 14 строк, 2 - 25 строк, 3 - 43 строки. На выходе: Не используются. Получение информации об используемом наборе символов - подфункция 30hФункция позволяет получить информацию об используемом наборе символов: высоту символа, число текстовых строк на экране и т.д.: На входе: AH = 11h; AL = 30h; BH = вид запрашиваемой информации: 0 - вернуть содержимое вектора INT 1Fh, 1 - вернуть содержимое вектора INT 43h, 2 - вернуть указатель на набор символов 8х14 пикселов, 3 - вернуть указатель на набор символов 8х8 пикселов, 4 - вернуть указатель на символы с ASCII кодами от 127 до 255 (8х8 пикселов), 5 - вернуть указатель на альтернативный набор символов размером 9х14 пикселов 6 - вернуть указатель на альтернативный набор символов размером 8х16 пикселов 7 - вернуть указатель на альтернативный набор символов размером 9х16 пикселов. На выходе: CL = высота символов в пикселах; DL = число текстовых строк на экране - 1; ES:BP = указатель (смысл зависит от BH). 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. 9.4. Вывод текстовой сторки - функция 13hФункция предоставляет широкие возможности для вывода строк. В зависимости от параметров функции, можно определять атрибуты как строки в целом (атрибуты всех символов одинаковы), так и отдельных символов строки. После вывода строки курсор может либо оставаться на месте, либо перемещаться в позицию за последним символом только что выведенной строки. Данная функция обрабатывает следующие управляющие символы: звуковой сигнал (BELL), перевод курсора на одну позицию назад (BACKSPACE), возврат каретки (CARRIAGE RETURN) и перевод строки (LINEFEED). На входе: AH = 13h - вывод строки на экран; AL = режим отображения строки: 0 - курсор не перемещается, атрибуты символов в строке одинаковы, 1 - курсор перемещается, атрибуты символов в строке одинаковы, 2 - курсор не перемещается, атрибуты каждого символа задаются отдельно, 3 - курсор перемещается, атрибуты каждого символа задаются отдельно. BH = номер страницы видеопамяти; BL = атрибут, если AL содержит 0 или 1; CX = длина строки; DH = номер строки экрана, в которой отображается строка; DL = номер столбца экрана, в котором начинается строка; ES:BP = адрес строки в оперативной памяти; На выходе: Не используются. В режимах 2 и 3 атрибуты каждого символа задаются вперемежку с самими символами строки. При этом сначала идет символ, а затем его атрибут. 9.5. Чтение/запись конфигурации видеосистемы - функция 1AhФункция содержит две подфункции для чтения и записи текущей конфигурации видеосистемы компьютера. Функция 1Ah реализована только на VGA. Если после выполнения функции регистр AL не содержит числа 1Ah, то это значит, что функция не поддерживается данным видеоадаптером и для определения конфигурации надо использовать другие способы. Чтение конфигурации видеосистемы - подфункция 00hПри помощи этой функции можно определить конфигурацию видеосистемы: На входе: AH = 1Ah; AL = 00h - чтение конфигурации видеосистемы. На выходе: AL = 1Ah; BL = тип первичного видеоадаптера: BH = тип дополнительного видеоадаптера: 0 - дисплей отсутствует, 1 - MDA, 2 - CGA, 3 - EGA с улучшенным цветным дисплеем, 4 - EGA с цветным дисплеем, 5 - EGA с монохромным аналоговым дисплеем, 6 - PGC (профессиональный графический контроллер); 7 - VGA с монохромным аналоговым дисплеем, 8 - VGA с цветным аналоговым дисплеем, 0Ah - MCGA с цветным цифровым дисплеем. 0Bh - MCGA с монохромным аналоговым дисплеем, 0Ch - MCGA с цветным аналоговым дисплеем. Запись конфигурации видеосистемы - подфункция 01hДанная функция может изменять информацию о конфигурации видеосистемы компьютера: На входе: AH = 1Ah; AL = 01h - запись конфигурации видеосистемы; BL = тип первичного видеоадаптера (см. подфункцию 00h); BH = тип дополнительного видеоадаптера (см. подфункцию 00h). На выходе: AL = 1Ah. 9.6. Получение данных о состоянии VGA - функция 1BhФункция позволяет получить различную информацию о видеоадаптере и дисплее. Программа, вызывающая данную функцию, должна зарезервировать область памяти размером 64 байта для получаемых данных. На входе: AH = 1Bh - получение данных о видеосистеме; BX = 00h; ES:DI = адрес буфера для возвращаемых данных, 64 байта. На выходе: AL = 1Bh; ES:DI - буфер заполняется данными (см. таблицу 10.1).
Таблица 10.1 Формат буфера данных. Далее следует описание статической функциональной таблицы: Смещение, байты Размер Содержание 0-2 3 байта таблица поддерживаемых режимов работы видеоадаптера, если бит равен единице, то режим поддерживается: байт 0 D0 Режим 0; D1 режим 1; D2 режим 2; D3 режим 3; D4 режим 4; D5 режим 5; D6 режим 6; D7 режим 7. байт 1 D0 Режим 8; D1 режим 9; D2 режим 0Ah; D3 режим 0Bh; D4 режим 0Ch; D5 режим 0Dh; D6 режим 0Eh; D7 режим 0Fh. байт 2 D0 Режим 10h; D1 режим 11h; D2 режим 12h; D3 режим 13h; D7-D4 не используются. 7 1 байт возможное число линий растра; если бит равен единице, то режим поддерживается: D0 200 линий; D1 350 линий; D2 400 линий; D7-D3 не используются. 8 1 байт число таблиц знакогенератора в текстовом режиме 9 1 байт максимальное число одновременно используемых таблиц знакогенератора в текством режиме 0Ah 1 байт биты имеют различное назначение: D0 не используется; D1 поддердивается преобразование таблицы цветов в серые цвета; D2 поддердивается загрузка шрифтов пользователя; D3 поддердивается загрузка цветовой палитры по умолчанию; D4 поддердивается эмуляция курсора CGA; D5 присутствует палитра EGA; D6 присутствует таблица цветов; D7 поддерживается функция выбора множества цветов; 0Bh 1 байт биты имеют различное назначение: 7 6 5 4 3 2 1 0 _________________ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ _________________ _______ _ _ _ ___ поддерживается световое перо; _ _ _ _ _ _ _ _____ сохранение/восстановление _ _ _ видеосостояний, поддерживается _ _ _ функция 1Ch; _ _ _ _ _ _______ управление битотм D3 байта _ _ атрибутов; _ _ _ _________ код конфигурации дисплея; _ ______________ не используются 0Eh 1 байт состояние указателя?: 7 6 5 4 3 2 1 0 _________________ ¦ ¦ ¦ ¦ ¦ ¦ ¦ _________________ _____ _ _ _ _ __ бит равен единице, если _ _ _ _ _ поддерживается набор из 512 _ _ _ _ _ символов; _ _ _ _ _ _ _ _ _ ____ бит равен единице, если _ _ _ _ поддерживается область сохранения _ _ _ _ цветовой палитры; _ _ _ _ _ _ _ ______ бит равен единице, если _ _ _ поддерживается текстовый набор _ _ _ символов пользователя; _ _ _ _ _ ________ бит равен единице, если _ _ поддерживается графический набор _ _ символов пользователя; _ _ _ __________ бит равен единице, если _ поддерживается цветовая палитра, _ определенная пользователем; _ ______________ зарезервированно Таблица 10.2 Формат статической функциональной таблицы. 9.7. Сохранение/восстановление состояния видеоадаптера - функция 1ChФункция имеет три подфункции, при помощи которых программа может быстро переключать режимы работы видеоадаптера: Номер подфункции Назначение 00h определение размера буфура, необходимого для сохранения текущего состояния видеоадаптера 01h сохранение текущего состояния видеоадаптера 02h восстановление текущего состояния видеоадаптера Необходимо отметить, что данная функция поддерживается только для видеоадаптера VGA. Функцию можно использовать при преключении режима видеоадаптера в резидентных программах и мультизадачных системах. Определение размера буфера - подфункция 00hФункция определяет размер буфура, необходимый для сохранения текущего состояния видеоадаптера. Буфер должен быть зарезервирован до вызова функции сохранения состояния видеоадаптера. На входе: AH = 1Ch; AL = 00h - определение размера буфера; CX = тип данных, который необходимо сохранить: 0 - регистры видеоадаптера, 1 - область переменных BIOS, 2 - таблица цветов (регистры ЦАП). На выходе: AL = 1Ch; BX = необходимый размер буфера в 64-байтных блоках. Сохранение текущего состояния видеоадаптера - подфункция 01hФункция записывает данные сотояния видеоадаптера в буфер, размер которого определяется подфункцией 00h. На входе: AH = 1Ch; AL = 01h - сохранение состяния видеоадаптера; CX = тип данных, который необходимо сохранить: 0 - регистры видеоадаптера, 1 - область переменных BIOS, 2 - таблица цветов (регистры ЦАП); ES:BX = адрес буфера для сохраняемых данных. На выходе: AL = 1Ch. Восстановление текущего состояния видеоадаптера - подфункция 02hФункция восстанавливает сотояние видеоадаптера из буфера, заполненного подфункцией 01h. На входе: AH = 1Ch; AL = 02h - восстановление состояния видеоадаптера; CX = тип восстанавливаемых данных: 0 - регистры видеоадаптера, 1 - область переменных BIOS, 2 - таблица цветов (регистры ЦАП); ES:BX = адрес буфера данных состояния видеоадаптера. На выходе: AL = 1Ch. |