program TIME;
var
Time : real;
Mask : byte;
Mode : byte;
begin
TextColor (LightGray);
TextBackGround (Black);
Mode := Port [$61]; (* текущий режим работы *)
Port [$61] := Mode or $04; (* установка режима Turbo *)
Mask := Port [$21]; (* маска аппаратных прерываний *)
Port [$21] := $FF; (* запрет всех прерываний *)
Port [$43] := $36; (* выбор канала 0 таймера: *)
Port [$40] := $01; (* младший байт делителя *)
Port [$40] := $00; (* старший байт делителя *)
(*************************************)
(* Фрагмент программы *)
(*************************************)
(* остановка счетчика и чтение результата *)
Port [$43] := $00;
Time := 65535.0 - (Port [$40] + Port [$40] * 256.0);
Port [$43] := $36; (* восстановление канала *)
Port [$40] := $00; (* 0 таймера: делитель = 0 *)
Port [$40] := $00;
Port [$21] := Mask; (* восстановление прерываний *)
Port [$61] := Mode; (* восстановление исходного режима *)
WriteLn ('Время прохода фрагмента кода = ', Time : 0 : 0);
Halt (0)
end. (* TIME *)
Вернуться к статье