Вернуться к статье
Листинг 11. Определение типа видеоадаптера
program VIDEO_ADAPTER;

const
      PortMono  = $03BA;
      PortColor = $03DA;
var
      Mask        : byte;
      I           : integer;
      Mono, Color : boolean;
begin
      TextColor (LightGray);
      TextBackGround (Black);
(* маскируем все аппаратные  прерывания *)
      Mask := Port [$21];              (* маска аппаратных прерываний *)
      Port [$21] := $FF;               (* запрет всех  прерываний *)
(* полагая присутствие монохромного адаптера, ждем рабочего хода разверток *)
      I := -1;
      while (I <> 0) and (Port [PortMono] and $81 = $81)
      do I := Pred (I);
      Mono := Port [PortMono] and $81 <> $81;
(* полагая присутствие цветного адаптера,  ждем  рабочего  хода  разверток *)
      I := -1;
      while (I <> 0) and (Port [PortColor] and $09 = $09)
      do I := Pred (I);
      Color := Port [PortColor] and $09 <> $09;
(* размаскируем  аппаратные  прерывания *)
      Port [$21] := Mask;              (* восстановление  прерываний *)
(* выводим   результаты    исследований *)
      WriteLn ('Анализ типа установленных адаптеров дисплея');
      WriteLn ('-------------------------------------------');
      if Mono
      then WriteLn ('Монохромный (MDA, HGC) адаптер присутствунт')
      else WriteLn ('Монохромный (MDA, HGC) адаптер не обнаружен');
      if Color
      then WriteLn ('Цветной (CGA, EGA,...) адаптер присутствует')
      else WriteLn ('Цветной (CGA, EGA,...) адаптер не обнаружен');
      Halt (0)
end. (* VIDEO_ADAPTER *)

Вернуться к статье
532