1.1.4 Определение числа и типов адаптеров дисплея.

Error message

Notice: Undefined index: add term path in hansel_get_breadcrumbs() (line 524 of /data/sites/msdosworld.ru/www/sites/all/modules/hansel/hansel.module).

   Программе  может оказаться необходима информация о том,  будет
ли она работать в  системе  с  монохромным  адаптером,  с цветной
графической картой или с EGA, а также о наличии второго адаптера.
В  пункте  [4.1.6]  объяснено как передать управление  от  одного
адаптера к другому.  Байт  статуса оборудования, хранящийся в об-
ласти  данных  ROM-BIOS  по адресу 0040:0010  сообщает  установку
переключателя 1,  который  показывает  какая  из  карт активна. В
принципе должны иметь значение 11 для монохромной карты, 10 - для
цветной карты 80*25, 01 - для  цветной  карты 40*25 и 00 для EGA.
Однако  при наличии EGA он может установить биты отличными от 00,
в зависимости от установки его собственных переключателей. Поэто-
му Вы должны сначала другими средствами установить наличие EGA, а
затем, если его нет, то  по  данным  BIOS  определить является ли
активным  цветной или монохромный адаптер.  Для проверки  наличия
EGA надо прочитать байт по адресу  0040:0087. Если он равен 0, то
EGA отсутствует.  Если этот байт ненулевой, то когда бит 3=0, EGA
является активным адаптером, а  когда он равен 1, то активен вто-
рой адаптер.
   Когда  присутствует EGA, то проверка наличия монохромного  или
цветного адаптера осуществляется записью значения в регистр адре-
са курсора микросхемы 6845 [4.1.1] и последующего чтения значения
и проверки их на совпадение. Для  монохромной карты пошлите 0FH в
порт  3B4H, чтобы указать на регистр курсора, а затем прочитать и
записать адрес курсора через порт 3B5H. Соответствующие порты для
цветной карты 3D4H и 3D5H. Когда карта отсутствует, то порт возв-
ращает значение 0FFH; но поскольку это значение может содержаться
в регистре, то недостаточно простой проверки на это значение.
   Имеются два добавочных вопроса, на которые могут потребоваться
ответы при наличии  EGA:  сколько  имеется  памяти на его карте и
какой  тип  монитора  подсоединен? Для определения  типа  дисплея
проверьте бит 1 по  адресу  0040:0087;  когда  он  установлен, то
подсоединен  ммонохромный дисплей, а когда он равен нулю -  цвет-
ной.  Если Ваша программа  использует цветной графический режим с
350  строками,  то надо также определить присоединен  ли  дисплей
IRGB или  R'G'B'RGB,  где  последняя  аббревиатура  соответствует
улучшеному  цветному  дисплею IBM.  Это  определяется  установкой
четырех переключателей на карте EGA.  Установка этих переключате-
лей возвращается в CL при обращении к функции 12H прерывания 10H.
Цепочка четырех младших битов  должна  быть  0110 для улучшенного
цветного  дисплея.  Та же самая функция сообщает и наличие памяти
на карте EGA.  Она возвращает  BL,  содержащий 0 для 64K, 1 - для
128, 2 - для 192 и 3 - для полных 256K памяти дисплея.



   Высокий уровень.

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

100 '''определение активного адаптера
110 DEF SEG = &H40         'указываем на область данных BIOS
120 X = PEEK(&H87)         'проверка на наличие EGA
130 IF X = 0 THEN 200      'EGA отсутствует, идем дальше
140 IF X AND 8 = 0 THEN... 'активный монитор EGA
 .
 .
200 X = PEEK(&H10)         'читаем байт статуса оборудования
210 Y = X AND 48           'выделяем биты 4 и 5
220 IF Y = 48 THEN ...     '... тогда монохромный (00110000)
230 IF Y = 32 THEN ...     '... тогда цветной 80*25 (00100000)
240 IF Y = 16 THEN ...     '... тогда цветной 40*25 (00010000)

   Следующий  пример  проверяет наличие монохромной карты,  когда
активной является карта  EGA  или  цветная.  Тот  же пример можно
использовать для проверки наличия цветной карты если использовать
адреса портов &H3D4 и &H3D5.

100 '''проверка наличия монохромной карты
110 OUT &H3B4,&HF          'адрес регистра курсора
120 X = INP(&H3B5)         'чтение и сохранение значения
130 OUT &H3B5,100          'посылаем в регистр любое значение
140 IF INP(&H3B5)<>100 THEN... 'если карта есть - вернется то же
150 OUT &H3B5,X            'восстанавливаем значение регистра

   Низкий уровень.

   Приведенные примеры соответствуют примерам на Бейсике.

;--- Определение активного адаптера:
   MOV   AX,40H        ;указываем ES на область данных BIOS
   MOV   ES,AX         ;
   MOV   AL,ES:[87H]   ;проверяем наличие EGA
   CMP   AL,0          ;
   JE    NO_EGA        ;если 0040:0087 = 0, то EGA нет
   TEST  AL,00001000B  ;EGA есть, проверяем бит 3
   JNZ   EGA_NOT_ACTIVE;если бит 3=1, то EGA неактивен
    .
    .
EGA_NOT_ACTIVE:
   MOV   AL,ES:[10H]   ;проверяем байт статуса дисплея
   AND   AL,00110000B  ;выделяем биты 4 и 5
   CMP   AL,48         ;это монохромная карта?
   JE    MONOCHROME    ;переход если да

   Предполагая  наличие монохромной карты проверим установлена ли
цветная карта (неактивная):



;--- Установлена ли неактивная цветная карта?
   MOV   DX,3D4H       ;указываем на регистр адреса 6845
   MOV   AL,0FH        ;запрашиваем регистр курсора
   OUT   DX,AL         ;указываем на регистр
   INC   DX            ;указываем на регистр данных
   IN    AL,DX         ;получаем текущее значение
   XCNG  AH,AL         ;сохраняем значение
   MOV   AL,100        ;тестовое значение 100
   OUT   DX,AL         ;посылаем его
   IN    AL,DX         ;считываем его снова
   CMP   AL,100        ;сравниваем значения
   JNE   NO_CARD       ;переход если нет карты
   XCNG  AH,AL         ;иначе есть цветная карта
   OUT   DX,AL         ;тогда восстанавливаем значение

 

Вы находитесь в разделе: 

Добавить коментарий