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 *)
Вернуться к статье