Почему процедура Delay() на разных машинах генерирует разные временные задержки?
Модуль CRT криво написан. Если достаточна точность в 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 ставить просто бессмысленно.