IPB
ЛогинПароль:

> Внимание! Действует предмодерация

Подраздел FAQ (ЧАВО, ЧАстые ВОпросы) предназначен для размещения готовых рабочих программ, реализаций алгоритмов. Это нечто вроде справочника, он наполнялся в течение 2000х годов. Ваши вопросы, особенно просьбы решить задачу, не пройдут предмодерацию. Те, кто наполнял раздел, уже не заходят на форум, а с теми, кто на форуме сейчас, лучше начинать общение в других разделах. В частности, решение задач — здесь.

 
 Ответить  Открыть новую тему 
> Помогите с Delay()
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 40
Пол: Мужской

Репутация: -  0  +


Как настроить Delay чтобы на всех машинах задержка была одинакова?
А то получатеся под моим Duron850 - усе оки, под Celeron2000 - слишком быстро, под P1-не наю скока - слишком медленно?
Через какие функции мона определить частоту или хотя бы тип процессора?
Или на Pascal'e никак?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Автооответчик
*****

Группа: Пользователи
Сообщений: 1 188
Пол: Мужской
Реальное имя: Александр

Репутация: -  16  +


была такая тема, воспользуйся поиском


--------------------
Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


http://forum.pascal.net.ru/index.php?showtopic=1879

Цитата
А почему задержки, которые задаются процедурой Delay(),на разных машинах разные?

Цитата
CRT криво написан. Вот вам другая процедура:


procedure Stop(Wait:LongInt); assembler;
asm
 mov   ah,86h
 mov   dx,word ptr Wait
 mov   cx,word ptr Wait+2
 int   15h
end;

Все это из нашего FAQ'a. Загляните туда. Ссылку я дал.
GoodWind, еще раз скажешь "воспользуйся поиском", накажу! angry.gif smile.gif


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 40
Пол: Мужской

Репутация: -  0  +


Oleg_Z
а может имеет смысл в
Код
procedure Stop(Wait:LongInt); assembler;
asm
mov   ah,86h
mov   dx,word ptr Wait
mov   cx,word ptr Wait+2
int   15h
end;

вместо
Код
Wait:LongInt

сделать так
Код
Wait:Word
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Профи
****

Группа: Пользователи
Сообщений: 930
Пол: Мужской

Репутация: -  11  +


Нет смысла в самопальных ассемблерных процедурах - если только в качестве дополнения. Всё равно в стандартных модулях используется CRT, вот тут-то глюк и вырвется на свободу smile.gif Лучше пропатченного модуля ничего не найти. В разделе исходников лежит дистрибутив Борланд Паскаля. Урезанный правда, но без глюков.

Нужно этот вопрос поместить в ВАЖНЫЕ ТЕМЫ.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Цитата
на пахает 

Не может быть. Я все тестирую, прежде чем в FAQ выкладывать!
Цитата
вместо

Код 
Wait:LongInt


сделать так

Код 
Wait:Word

А если задержку надо больше 65536 мс?


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 40
Пол: Мужской

Репутация: -  0  +


Oleg_Z
я в ассембе хоть и мало шарю, но
mov dx, word ptr Wait

наверное что-то значит [там вроде есть такое слово как word, и о чем тогда разговор?]
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 40
Пол: Мужской

Репутация: -  0  +


Oleg_Z
А если и больше 65535мс - то можно функцию несколько раз подряд вызвать (типа сперва 65535, а потом сколько останется).
Задержка в 65535 означает 65,536 секунд - а этого вроде ппредостаточно
Longint - 4байта, а word - 2 байта + время велечина ПОЛОЖИТЕЛЬНАЯ
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Цитата
там вроде есть такое слово как word

Это не то, о чем вы подумали.
Цитата
о чем тогда разговор?]

Да вроде все решили.
Вы правы вобщем. Нет смысла использовать 4 байта, раз можно вызвать 2 раза процедуру.
Полностью согласен с вами в этом вопросе.


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


-
****

Группа: Пользователи
Сообщений: 480
Пол: Мужской

Репутация: -  4  +


Если нужна задержка не меньше 55мс можно читать по адресу $40:$6c, там значение изменяется 18 раз в секунду.


--------------------
бб
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Новичок
*

Группа: Пользователи
Сообщений: 40
Пол: Мужской

Репутация: -  0  +


Oleg_Z
да нет, мы ассм немного изучали, а в
mov   dx,word ptr Wait

word - это вроде слово, величина слова составляет 2 байта, если я не ошибаюсь (просто интересно)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


DW или WORD
Эта директива определяет эл-т данных длинной 2 байта (слово)
асм преобразует числовые коснтантывдоичный код и сохраняет в последовательности с переставленными байтами!
Во че я знаю! smile.gif


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Бывалый
***

Группа: Пользователи
Сообщений: 180
Пол: Мужской

Репутация: -  2  +


строчка mov dx,word ptr Wait
означает, что в dx загрузится слово (word, 2 байта) с адреса wait,
соответственно, в cx загрузится слово с адреса wait+2 (mov cx,word ptr Wait+2), т.е. следующие два байта...
функция 86h прерывания 15h видимо требует в качестве параметра именно 32-битное число в регистрах cx:dx... таким образом, если описать параметр wait как word, получится фигня: либо в cx загрузится хрен знает что, либо (если убрать загрузку в cx) его значение останется неопределенным (хотя можно обнулить просто)
PS: и вообще, надо параметр в процедуре объявлять как var, иначе он будет передаваться в регистрах (простое число ведь) и фиг знает, как паскаль подсунет его ассемблеру в виде указателя - ptr Wait
PS2: и вообще, если задержка - 32-битное число, то вряд ли она в миллисекундах, скорее уж в микросекундах smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Новичок
*

Группа: Пользователи
Сообщений: 40
Пол: Мужской

Репутация: -  0  +


mov   dx,word ptr Wait

если Wait - LongInt (4байта), но грузим то мы 2байта. что тогда?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Бывалый
***

Группа: Пользователи
Сообщений: 180
Пол: Мужской

Репутация: -  2  +


то есть?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Новичок
*

Группа: Пользователи
Сообщений: 40
Пол: Мужской

Репутация: -  0  +


вроде понял.
сперва 2байта из 4ех грузим в dx (т.е. половину от LongInt)
потом 2байта из тех же 4ех грузим в cx (вторую половину от LongInt)
Все так или нет?
если нет - то как?
если так - вопрос отпадает.

заранее пасиба
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Профи
****

Группа: Пользователи
Сообщений: 775
Пол: Мужской

Репутация: -  0  +


Цитата(FreeMan @ 4.10.04 14:39)
Если нужна задержка не меньше 55мс можно читать по адресу $40:$6c, там значение изменяется 18 раз в секунду.

Изменяется, дык как только быть с 00:00 pm. Теория хороша только на практике...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 28.03.2024 18:12
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name