Pascal FAQ created by SLY Golovanov, 2:5020/278.13
(slightly corrected by Valery Votintsev 2:5021/22)
==============================================================================
Q:> А почему задержки, которые задаются процедурой Delay(),на разных машинах
разные?
A: Юнит CRT криво написан.
Q:> А чем тогда делать фиксированную задержку, вместо Delay()?
A: Если достаточна точность в 1 тик (1/18 доля секунды), то так:
Procedure Delay(x:longint);
{пауза на Х тиков}
var
l:longint;
begin
l := MemL[Seg0040:$6c];
while MemL[Seg0040:$6c] < l+x do; {задержка на X тиков}
end;
Если нужно точнее, то надо читать регистры таймера...
Вот вам другая процедура:
procedure RTCDelay(Wait:LongInt); assembler;
{Ожидание на Wait микросекунд }
asm
mov ah,86h
mov dx,word ptr Wait
mov cx,word ptr Wait+2
int 15h
end;
Wait - в *микро*секундах, но разрешение все равно с точностью до
~976 микросекунд (примерно 1 миллисекунда), т.е. меньше 1024
ставить просто бессмысленно.
---
* Origin: (2:5020/794.13)
|