Системное программное обеспечение персональных ЭВМ


Пример 1



Пример 1

/*== ПРИМЕР 9.1 ==*/ /*============ Определение активного адаптера ============*/ #include <dos.h>

unsigned char types1A[] = { 0,1,2,4,5,6,7,8,10,11,12,0xff }; char *stypes1A[] = { "нет дисплея","MDA,моно","CGA,цв.", "EGA,цв.","EGA,моно","PGA,цв.","VGA,моно,анал.", "VGA,цв.,анал.","MCGA,цв.,цифр.","MCGA,моно,анал.", "MCGA,цв.,анал.","неизвестный тип", "непредусмотренный код" }; unsigned char b[64]; /* буфер данных VGA */ struct SREGS sr; union REGS rr; int i; main() { /* Предположим, VGA */ rr.h.ah=0x1a; rr.h.al=0; int86(0x10,&rr,&rr); if (rr.h.al==0x1a) { printf("Поддерживается ф-ция 1Ah прерывания 10h\n"); for (i=0; i0 && i

Функция 0x1A доступна только при наличии расширения BIOS, ориентированного на обслуживание VGA. В этом случае функция возвращает в регистре AL код 0x1A - свою "визитную карточку", а в BL - код активного видеоадаптера. Мы в нашем примере в случае, когда функция 0x1A поддерживается, обращаемся еще и к функции 0x1B - эта последняя заполняет 70-байтный блок информации о состоянии, из которого мы выбираем объем видеопамяти.

Если 0x1A не поддерживается, значит, VGA у нас нет, в этом случае можно обратиться к функции 0x12 - получение информации о EGA. При наличии расширения, ориентированного на EGA, эта функция изменяет содержимое BL (перед обращением оно должно быть 0x10) на 0 (цветной режим) или 1 (монохромный режим) а в BH возвращает объем видеопамяти.

Если же ни 0x1A, ни 0x12 не поддерживаются, то список оборудования BIOS содержит достаточную информацию о видеоадаптере.




- Начало -  - Назад -  - Вперед -