В этой главе описаны остальные функции BIOS, которые реализованы только на видеоадаптерах EGA и VGA. Так же, как и в предыдущей главе, использование каждой группы функций иллюстрируется соответствующими примерами программ.
Функция 10h предоставляет возможность программирования регистров цветовой палитры, таблицы цветов (VGA), а также управляет некоторыми атрибутами символов.
Для EGA эта функция содержит следующие четыре
подфункции:
Номер подфункции |
Назначение |
0 |
программирование одного регистра
палитры |
1 |
программирование регистра цвета рамки |
2 |
программирование всех регистров
палитры (таблицы цветов) |
3 |
управление атрибутом мигания и
атрибутом интенсивности |
VGA поддерживает дополнительно еще 10 подфункций:
Номер подфункции |
Назначение |
7 |
чтение одного регистра палитры |
8 |
чтение регистра цвета рамки |
9 |
чтение всех регистров палитры |
10h |
программирование одного регистра ЦАП |
12h |
прграммирование нескольких регистров
ЦАП |
13h |
выбор подмножества цветов |
15h |
чтение одного регистра ЦАП |
17h |
чтение несколььких регистров ЦАП |
1Ah |
чтение состояния страницы цветов |
1Bh |
преобразование регистров ЦАП для работы
в монохромном режиме |
Функция выполняет запись в регистр палитры:
На входе: 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
Функция выполняет запись значения в регистр цвета рамки контроллера атрибутов. Надо иметь в виду, что эта функция не работает в некоторых режимах 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(); } }
Функция обеспечивает быстрое заполнение новыми значениями всех регистров палитры и регистра цвета рамки. Новые значения регистров записываются в 17-байтовой таблице где-нибудь в оперативной памяти компьютера. Байты 0 - 15 содержат новые значения для регистров палитры, а байт 16 для регистра цвета рамки.
На входе: AH = 10h; AL = 02h - установка регистров палитры и регистра цвета рамки; ES:DX = адрес таблицы с новыми значениями регистров. На выходе: Не используются.
Управляет битом 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 ); }
Функция поддерживается только видеоадаптером 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 ...
Функция поддерживается только видеоадаптером VGA. Позволяет прочитать содержимое регистра цвета рамки:
На входе: AH = 10h; AL = 08h - чтение регистра цвета рамки. На выходе: BH = содержимое регистра цвета рамки.
Для видеоадаптера 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
Функция производит запись 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
Функция производит запись 18-битной величины в несколько последовательно расположенных регистров таблицы цветов:
На входе: AH = 10h; AL = 12h - установка нескольких регистров таблицы цветов; BX = номер первого регистра таблицы цветов (0 -255); CX = число устанавливаемых регистров (1-256); ES:DX - адрес таблицы цветов. На выходе: Не используются.
Таблица цветов содержит по три байта на один регистр таблицы цветов. В каждом байте значимыми являются только 6 младших бит.
Функция предназначена для выбора числа подмножеств цветов и выбора активного подмножества:
На входе: 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
Функция поддерживается только для видеоадаптеров 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
Функция производит чтение 18-битовых значений из нескольких последовательно расположенных регистров таблицы цветов:
На входе: AH = 10h; AL = 17h - чтение нескольких регистров таблицы цветов; BL = номер первого регистра таблицы цветов (0 -255); CX = число считываемых регистров (1-256); ES:DX - адрес таблицы цветов; На выходе: Данные в таблице по адресу ES:DX.
Таблица цветов содержит по три байта на один регистр таблицы цветов. В каждом байте значащимии являются только младшие 6 бит.
Возвращает число текущих цветовых подмножеств:
На входе: AH = 10h; AL = 1Ah - определение числа цветовых подмножеств. На выходе: BL = 0 - используются 4 цветовых подмножества по 64 цвета; 1 - используются 16 цветовых подмножеств по 16 цветов; BH - номер подмножества, используемого в данный момент.
mov ah,10h mov al,1ah int 10h mov num_subset,bh
Функция заполняет часть таблицы цветов значениями, соответствующими различным оттенкам серого цвета.
Для каждого модифицируемого регистра таблицы цветов сначала читаются записанные в нем данные, а затем записываются обратно по следующему правилу: красного 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
Функция 11h прерывания 10h предназначена для загрузки в память таблиц знакогенератора (наборов символов). При помощи данной функции можно загружать как стандартные таблицы знакогенератора, так и таблицы, самостоятельно разработанные программистом. Загружается либо вся таблица, либо ее часть. Данная функция позволяет легко "русифицировать" ваш видеоадаптер (если это не CGA или Hercules).
Функция 11h содержит одиннадцать различных
подфункций, перечисленных ниже:
Номер подфункции |
Назначение |
00 |
загрузка самостоятельно разработанных
таблиц знакогенератора |
01 |
загрузка стандартного монохромного
набора символов |
02 |
загрузка стандартного набора символов
видеоадаптера CGA |
03 |
выбор активных таблиц знакогенератора
(EGA) |
04 |
загрузка стандартного набора символов
видеоадаптера VGA |
20h |
установка вектора прерывания 1Fh |
21h |
использование графического режима для
отображения символов пользователя |
22h |
использование набора символов 8х14 из ПЗУ
|
23h |
использование набора символов 8х8 из ПЗУ |
24h |
использование набора символов 8х16 из ПЗУ
|
30h |
получение информации об используемом
наборе символов |
Для подфункций 00, 01, 02, 03, 04 установка бита D4 в регистре AL вызывает перезагрузку регистров контроллера ЭЛТ. Вновь устанавливаются значения принятые по умолчанию для регистров формы курсора и регистра высоты символа текста. Если используется эта особенность, вызов данной функции должен происходить сразу после установки режима работы видеоадаптера. В противном случае вызов функции 11h может привести к непредсказуемым последствиям.
Функция заменяет текущий набор символов знакогенератора или его часть набором символов, определенных пользователем. Таблица знакогенератора пользователя должна быть загружена в оперативную память до вызова функции. После вызова она может быть удалена из памяти.
На входе: AH = 11h; AL = 00h, 10h - загрузка набора символов пользователя; ES:BP = адрес таблицы с новым набором символов; CX = число загружаемых символов (1-256); DX = смещение в таблице знакогенератора (0-255), используется для загрузки части набора символов; BL = номер загружаемой таблицы знакогенератора - для EGA 0-3, для VGA 0-7; BH = число байт отводимых на символ в таблице символов (1-32); На выходе: Не используются.
Функция загружает стандартный набор символов (8х14 пикселов) из ПЗУ BIOS во второй цветовой слой видеопамяти:
На входе: AH = 11h; AL = 01h, 11h - загрузка монохромного набора символов ; BL = номер загружаемой таблицы знакогенератора (для EGA 0-4, для VGA 0-7). На выходе: Не используются.
Функция загружает стандартный набор символов CGA (8х8 пикселов) из ПЗУ BIOS во второй цветовой слой видеопамяти:
На входе: AH = 11h; AL = 02h, 12h - загрузка набора символов CGA; BL = номер загружаемой таблицы знакогенератора (для EGA 0-4, для VGA 0-7); На выходе: Не используются.
Программа через эту функцию может установить активные таблицы знакогенератора. Напомним, что 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 (8х16 пикселов) из ПЗУ BIOS во второй цветовой слой видеопамяти:
На входе: AH = 11h; AL = 04h, 14h - загрузка набора символов CGA; BL = номер загружаемой таблицы знакогенератора (0-7). На выходе: Не используются.
Используется в графических режимах 4, 5 и 6 (совместимых с CGA), если необходимо отображать одновременно больше 128 символов. Вектор 1Fh применяется для указания на таблицу с дополнительными 128 символми, имеющими коды ASCII от 127 до 255. Программа должна поддерживать таблицы для дополнителььных символов. Размер символов должн быть 8х8 пикселов.
На входе: AH = 11h; AL = 20h - установка вектора прерывания 1Fh, который хранит адрес таблицы дополнительных символов; ES:BP - адрес таблицы дополнительных символов. На выходе: Не используются.
Позволяет программе отображать на экране одновременно графику и текст. Адаптер переходит в графический режим и вектор прервания 43h устанавливается так, что используется таблица знакогенератора пользователя.
В таком режиме может отображаться до 43 строк текста на экране. (Для этого необходим улучшенный цветной дисплей.)
На входе: AH = 11h; AL = 21h - установка вектора прерывания 43h; ES:BP = адрес таблицы символов; CX = количество байт, кодирующих один символ в таблице символов; BL = количество отображаемых на экране строк текста: 1 - 14 строк, 2 - 25 строк, 3 - 43 строки, 0 - число строк содержится в регистре DL. На выходе: Не используются.
На входе: AH = 11h; AL = 22h установка вектора прерывания 43h; BL = количество отображаемых строк текста: 1 - 14 строк, 2 - 25 строк. На выходе: Не используются.
На входе: AH = 11h; AL = 23h установка вектора прерывания 43h; BL = количество отображаемых строк текста: 2 - 25 строк, 3 - 43 строки. На выходе: Не используются.
На входе: AH = 11h; AL = 24h установка вектора прерывания 43h; BL = количество отображаемых строк текста: 1 - 14 строк, 2 - 25 строк, 3 - 43 строки. На выходе: Не используются.
Функция позволяет получить информацию об используемом наборе символов: высоту символа, число текстовых строк на экране и т.д.:
На входе: 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).
Данная функция содержит девять различных
подфункций:
Номер подфункции |
Назначение |
10h |
определение конфигурации EGA/VGA |
20h |
выбор программы печати экрана |
30h |
выбор количества линий развертки в
текстовом режиме |
31h |
запрещение переустановки палитры
цветов |
32h |
управление доступом к VGA |
33h |
управление преобразованием серого
цвета |
34h |
эмуляция курсора CGA |
35h |
выбор активного дисплея (PS/2) |
36h |
гашение экрана (VGA) |
Функция используется для проверки наличия видеоадаптеров 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
Программа, распечатывающая содержимое экрана по нажатию клавиши PrtScr, не работает в режиме с 43 текстовыми строками. Если вы всеже желает иметь эту полезную возможность, можете выбрать альтернативную программу печати экрана, воспользовавшись подфункцией номер 20h:
На входе: AH = 12h; BL = 20h - выбор альтернативной программы печати экрана дисплея. На выходе: Не используются.
Функция используется для получения на 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 в системе.
Функция применяется для предотвращения перезагрузки таблицы цветов при выполнении операции выбора режима работы видеоадаптера VGA:
На входе: AH = 12h; BL = 31h - запрещение переустановки палитры; AL = разрешение/запрещение переустановки: 0 - разрешение загрузки палитры операцией выбора режима, 1 - запрещение загрузки палитры операцией выбора режима. На выходе: AL = 12h.
Данная функция возвращает в регистре AL значение 12h, если компьютер имеет видеоадаптер VGA.
Вызов функции позволяет запретить (разрешить) доступ к видеопамяти и регистрам адаптера VGA.
На входе: AH = 12h; BL = 32h - управление доступом к VGA; AL = разрешение/запрещение доступа: 0 - разрешение доступа к VGA, 1 - запрещение доступа к VGA. На выходе: AL = 12h.
Данная функция возвращает в регистре AL значение 12h, если компьютер имеет видеоадаптер VGA.
Поддерживается только 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 на компьютерах, оснащенных видеоадаптерами VGA в улучшенных режимах, когда размер символа по сравнению с использующимся в CGA увеличен. При разрешнии эмуляции курсора CGA, его размеры устанавливаются, как будто символы имеют высоту 8 пикселов.
На входе: AH = 12h; BL = 34h - управление эмуляцией курсора CGA; AL = разрешение/запрещение эмуляции курсора: 0 - разрешение эмуляции, 1 - запрещение эмуляции; На выходе: AL = 12h.
Данная функция возвращает в регистре AL значение 12h, если компьютер имеет видеоадаптер VGA.
Используется в системе 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.
Видеоадаптер VGA имеет возможность гашения экрана дисплея:
На входе: AH = 12h; BL = 36h - управление гашением экрана дисплея; AL = 0 - включение экрана, 1 - гашение экрана. На выходе: AL = 12h.
Данная функция возвращает в регистре AL значение 12h, если компьютер имеет видеоадаптер VGA.
Функция предоставляет широкие возможности для вывода строк. В зависимости от параметров функции, можно определять атрибуты как строки в целом (атрибуты всех символов одинаковы), так и отдельных символов строки. После вывода строки курсор может либо оставаться на месте, либо перемещаться в позицию за последним символом только что выведенной строки.
Данная функция обрабатывает следующие управляющие символы: звуковой сигнал (BELL), перевод курсора на одну позицию назад (BACKSPACE), возврат каретки (CARRIAGE RETURN) и перевод строки (LINEFEED).
На входе: AH = 13h - вывод строки на экран; AL = режим отображения строки: 0 - курсор не перемещается, атрибуты символов в строке одинаковы, 1 - курсор перемещается, атрибуты символов в строке одинаковы, 2 - курсор не перемещается, атрибуты каждого символа задаются отдельно, 3 - курсор перемещается, атрибуты каждого символа задаются отдельно. BH = номер страницы видеопамяти; BL = атрибут, если AL содержит 0 или 1; CX = длина строки; DH = номер строки экрана, в которой отображается строка; DL = номер столбца экрана, в котором начинается строка; ES:BP = адрес строки в оперативной памяти; На выходе: Не используются.
В режимах 2 и 3 атрибуты каждого символа задаются вперемежку с самими символами строки. При этом сначала идет символ, а затем его атрибут.
Функция содержит две подфункции для чтения и записи текущей конфигурации видеосистемы компьютера.
Функция 1Ah реализована только на VGA. Если после выполнения функции регистр AL не содержит числа 1Ah, то это значит, что функция не поддерживается данным видеоадаптером и для определения конфигурации надо использовать другие способы.
При помощи этой функции можно определить конфигурацию видеосистемы:
На входе: 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 с цветным аналоговым дисплеем.
Данная функция может изменять информацию о конфигурации видеосистемы компьютера:
На входе: AH = 1Ah; AL = 01h - запись конфигурации видеосистемы; BL = тип первичного видеоадаптера (см. подфункцию 00h); BH = тип дополнительного видеоадаптера (см. подфункцию 00h). На выходе: AL = 1Ah.
Функция позволяет получить различную информацию о видеоадаптере и дисплее.
Программа, вызывающая данную функцию, должна зарезервировать область памяти размером 64 байта для получаемых данных.
На входе: AH = 1Bh - получение данных о видеосистеме; BX = 00h; ES:DI = адрес буфера для возвращаемых данных, 64 байта. На выходе: AL = 1Bh; ES:DI - буфер заполняется данными (см. таблицу 10.1).
Смещение, байты |
Размер |
Содержание |
0-3 |
двойное слово |
адрес статической таблицы функций (см.
ниже) |
4 |
байт |
номер текущего режима работы
видеоадаптера |
5,6 |
слово |
число символов в строке |
7,8 |
слово |
размер области видеоданных (в байтах) |
9,0Ah |
слово |
начальный адрес области видеоданных |
0Bh-1Ah |
8 слов |
позиции курсоров для каждой из 8 страниц
видеопамяти (одно слово на страницу) |
1Bh |
байт |
верхняя линия курсора |
1Ch |
байт |
нижняя линия курсора |
1Dh |
байт |
номер активной страницы видеопамяти |
1Eh |
слово |
адрес порта контроллера ЭЛТ (3B4/3D4) |
20h |
байт |
состояние регистра 3x8h |
21h |
байт |
состояние регистра 3x9h |
22h |
байт |
число текстовых строк на экране |
23h |
байт |
высота символов текста (в пикселах) |
25h |
байт |
код первичного видеоадаптера (см.
функцию 1Ah подфункция 0h) |
26h |
байт |
код дополнительного видеоадаптера (см.
функцию 1Ah подфункция 0h) |
27h,28h |
слово |
число цветов в текущем режиме |
29h |
байт |
число страниц видеопамяти в текущем
режиме |
2Ah |
байт |
число линий развертки в текущем режиме: |
0 - 200 |
|
|
1 - 350 |
|
|
2 - 400 |
|
|
3 - 480 |
|
|
2Bh |
байт |
номер первой таблицы знакогенератора |
2Ch |
байт |
номер второй таблицы знакогенератора |
2Dh |
байт |
байт, содержащий различные данные: |
|
|
D0 не используется; |
|
|
D1 бит равен единице, если разрешено
преобразование палитры в серый цвет; |
|
|
D2 бит равен единице, если подключен
монохромный дисплей; |
|
|
D3 запрещена переустановка регистров
палитры по умолчанию; |
|
|
D4 бит равен единице, если разрешена
эмуляция курсора CGA; |
|
|
D5 определяет назначение бита D3, байта
атрибутов: если бит равен 1, то он управляет
миганием символа, если бит равен нулю, то D3
управляет интенсивностью фона символа; |
|
|
D7-D6 не используется |
31h |
байт |
объем видеопамяти: |
|
|
0 - 64К байт, |
|
|
1 - 128К байт, |
|
|
2 - 192К байт, |
|
|
3 - 256К байт; |
|
|
|
32h |
байт |
состояние указателя?: |
|
|
|
|
|
D0 бит равен единице, если используется
набор из 512 символов; |
|
|
D1 бит равен единице, если используется
область сохранения цветовой палитры; |
|
|
D2 бит равен единице, если используется
текстовый набор символов пользователя; |
|
|
D3 бит равен единице, если используется
графический набор символов пользователя; |
|
|
D4 бит равен единице, если используется
цветовая палитра, определенная пользователем; |
|
|
D7-D5 зарезервировано; |
33h - 3Fh |
|
зарезервировано. |
Таблица 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 +-+-+-+-+-+-+-+-+ | | | | | | | | | +-+-+-+-+-+-+-+-+ L-----| | | | L-- поддерживается световое перо; | | | | | | | L---- сохранение/восстановление | | | видеосостояний, поддерживается | | | функция 1Ch; | | | | | L------ управление битотм D3 байта | | атрибутов; | | | L-------- код конфигурации дисплея; | L---------- не используются 0Eh 1 байт состояние указателя?: 7 6 5 4 3 2 1 0 +-+-+-+-+-+-+-+-+ | | | | | | | | | +-+-+-+-+-+-+-+-+ L---| | | | | L-- бит равен единице, если | | | | | поддерживается набор из 512 | | | | | символов; | | | | | | | | | L--- бит равен единице, если | | | | поддерживается область сохранения | | | | цветовой палитры; | | | | | | | L----- бит равен единице, если | | | поддерживается текстовый набор | | | символов пользователя; | | | | | L------- бит равен единице, если | | поддерживается графический набор | | символов пользователя; | | | L--------- бит равен единице, если | поддерживается цветовая палитра, | определенная пользователем; | L------------ зарезервированно
Таблица 10.2 Формат статической функциональной таблицы.
Функция имеет три подфункции, при помощи которых программа может быстро переключать режимы работы видеоадаптера:
Номер Назначение подфункции 00h определение размера буфура, необходимого для сохранения текущего состояния видеоадаптера 01h сохранение текущего состояния видеоадаптера 02h восстановление текущего состояния видеоадаптера
Необходимо отметить, что данная функция поддерживается только для видеоадаптера VGA. Функцию можно использовать при преключении режима видеоадаптера в резидентных программах и мультизадачных системах.
Функция определяет размер буфура, необходимый для сохранения текущего состояния видеоадаптера. Буфер должен быть зарезервирован до вызова функции сохранения состояния видеоадаптера.
На входе: AH = 1Ch; AL = 00h - определение размера буфера; CX = тип данных, который необходимо сохранить: 0 - регистры видеоадаптера, 1 - область переменных BIOS, 2 - таблица цветов (регистры ЦАП). На выходе: AL = 1Ch; BX = необходимый размер буфера в 64-байтных блоках.
Функция записывает данные сотояния видеоадаптера в буфер, размер которого определяется подфункцией 00h.
На входе: AH = 1Ch; AL = 01h - сохранение состяния видеоадаптера; CX = тип данных, который необходимо сохранить: 0 - регистры видеоадаптера, 1 - область переменных BIOS, 2 - таблица цветов (регистры ЦАП); ES:BX = адрес буфера для сохраняемых данных. На выходе: AL = 1Ch.
Функция восстанавливает сотояние видеоадаптера из буфера, заполненного подфункцией 01h.
На входе: AH = 1Ch; AL = 02h - восстановление состояния видеоадаптера; CX = тип восстанавливаемых данных: 0 - регистры видеоадаптера, 1 - область переменных BIOS, 2 - таблица цветов (регистры ЦАП); ES:BX = адрес буфера данных состояния видеоадаптера. На выходе: AL = 1Ch.