[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
Почему это так пишется - не помню за давности лет.
На самом деле еще придется восстанавливать часы - они сбиваются, восстановление - чтение данных из микросхемы RTC.
Здесь не описано, как заменять процедуру обработки прерывания таймера на свою.
const
TimerFreq = 1193180 / TicksInSec;
{ Изменить частоту }
procedure BeginWork;
var
t : word;
begin
t := Round ( TimerFreq );
asm
cli
mov al,$36;
out $43,al
mov ax,t
out $40,al
mov al,ah
out $40,al
sti
end;
end;
{ Восстановить }
procedure StopWork;
var
t : word;
begin
t := 0;
asm
cli
mov al,$36;
out $43,al
mov ax,t
out $40,al
mov al,ah
out $40,al
sti
end;
RestoreTimer;
end;
{ Восстановление системных часов }
procedure RestoreTimer;
var
w : byte;
regs : registers;
begin
regs.ah := $02;
Intr ( $1A, regs );
w := regs.ch;
w := ( w mod 16 ) + ( w div 16 ) * 10;
regs.ch := w;
w := regs.cl;
w := ( w mod 16 ) + ( w div 16 ) * 10;
regs.cl := w;
w := regs.dh;
w := ( w mod 16 ) + ( w div 16 ) * 10;
regs.dh := w;
regs.ah := $2d;
Intr ( $21, regs );
end; { RestoreTimer }
E-mail: info@telesys.ru