Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Delay

Автор: [da_smag] 15.03.2007 3:47

Доброго времени суток. Пришла мне в голову мысль написать прогу-пищалку.
Изначально писал вот так на фри паскале(на турбо тоже самое):

 
uses crt;
begin sound(15000); delay(5000);nosound;end.

В результате чего пищало не 5 сек, а гораздо меньше(меньше 1 сек)
Потом Altair посоветовал использовать код, приведенный в этой теме: http://forum.pascal.net.ru/index.php?showtopic=2701&st=0
В результате получилась тестовая программа такого типа:

procedure Stop(Wait: word); assembler;
asm
mov ah,86h
mov dx,word ptr Wait
mov cx,word ptr Wait+2
int 15h
end;
begin
writeln('1');
Stop(50000);
writeln('2');
readln;
end.

Задержки перед выводом 2 не было совсем, то есть Stop или вообще не работает, или криво работает вместе с delay'ем
Подскажите, что сделать что бы заработало так, как нужно(что бы были задержки)?

Автор: volvo 15.03.2007 4:19

Я где-то выкладывал вот такой "заменитель" Delay:

procedure my_delay(ms: longint);
var start, finish: longint;
begin
start := MemL[$0040:$006c];
repeat
finish := MemL[$0040:$006c];
until (finish - start) > trunc(ms / 1000 * 18.2);
end;
(для TP, на FPC работать не будет...)

Автор: [da_smag] 15.03.2007 16:41

спасибо, помогло))