![]() |
![]() |
#1 |
Камрад
Join Date: дек 2000
Location: Тверь
Сообщений: 130
|
![]()
Некоторые программы скомпилированые на старых (ну там 386) машинах не хотят запускаться на P-II - выдают ошибку 200. Подскажите плис, как это вылечить? Где-то раньше видел тему в инете, да забыл где.
![]() |
![]() |
[Ответить с цитированием] |
![]() |
#2 |
Камрад
Join Date: авг 2000
Location: EKB-City, RUSSIA
Сообщений: 153
|
![]()
По-моему тебе сюда:
http://www.kamrad.ru/forum/Forum1/HTML/000218.html ------------------ Кто не боится Дьявола, тому не нужен бог. |
![]() |
[Ответить с цитированием] |
![]() |
#3 |
Камрад
Join Date: дек 2000
Location: Тверь
Сообщений: 130
|
![]()
Спасибо, но дело не в скорости. Ошибка (о которой речь) возникает от заточености старых паскалевских компиляторов на архитектуру старых же 86 процессоров. Уже готовый екзешник можно отредактировать, но что именно?...
|
![]() |
[Ответить с цитированием] |
![]() |
#4 |
Администратор
Буржуин проклятый Join Date: мая 2000
Location: Париж, Франция
Сообщений: 10,913
|
![]()
В теме по ссылке как раз и написано, что можно сделать. А где именно редактировать - не знаю.
|
![]() |
Дневник [Ответить с цитированием] |
![]() |
#5 |
Камрад
Join Date: авг 2000
Location: EKB-City, RUSSIA
Сообщений: 153
|
![]()
Я, конечно, мог бы вспомнить молодость, достать дебаггер и заново начать разбираться, где какие байтики надо поменять, чтобы программка работала. Но, все-таки, не буду. Могу только вкратце сказать, из-за чего такая фигня возникает. При компиляции паскалем программ, использующих библиотеку CRT (uses crt), в самом начале программы появляются два call-а на процедурки, устанавливающие всякия параметры и прерывания. В одной из процедурок есть что-то типа определения скорости проца, там хитрым образом засекается количество циклов проца, затраченных на выполнение какой-то фигни. Затем то-ли время, то-ли еще что-то (я не помню) делится на это число - получается некий параметр, определяющий скорость проца, он используется в delay-ях и еще где-то. Так вот, на быстрых процах количество циклов проца оказывается равным нулю, из-за чего далее возникает ошибка деления на 0 - та самая Runtime error 200.
Способов борьбы с этим много. Большинство описаны в ветке по ссылке. Если очень надо, то могу поподробнее рассказать что и где конкретно глючит, но ты для этого должен нормально дружить с ассемблером. ------------------ Кто не боится Дьявола, тому не нужен бог. |
![]() |
[Ответить с цитированием] |
![]() |
#6 |
Камрад
Join Date: дек 2000
Location: Тверь
Сообщений: 130
|
![]()
Ин принцЫп-то действительно надо. Есть пара старых прог (нечто вроде баз данных) которыми надо будет попользоваться некоторое время, и запускать при этом анрилы да архиваторы ну совсем неудобно. А на счёт дружбы с ассемблером я так знаю как он выглядит, call от mov отличу но всерьёз бодаться не способен, так что пардон
![]() |
![]() |
[Ответить с цитированием] |
![]() |
#7 |
Камрад
Join Date: дек 2000
Location: Минск, Беларусь
Сообщений: 321
|
![]()
Всё так, как сказал Xpert, только наоборот.
Т.е. количество циклов не зависит от скорости проца, а зависит только время. И делится не время на кол-во циклов, а кол-во циклов на время. Ускоряй системный таймер, тока потом придёться вручную время править (или написать прогу такую). Я впрочем могу такую прогу написать - для ускорения и корректировки времени, но боюсь, что она будет работать только в ДОС'е и не слишком новых виндах. Если надо пиши. |
![]() |
[Ответить с цитированием] |
![]() |
#8 |
Камрад
Join Date: авг 2000
Location: EKB-City, RUSSIA
Сообщений: 153
|
![]()
2 max3000
Ну да, так и есть. Просто давно было, уже плохо помню. А прогу я (с одним парнем) написал уже, она садится резидентом и забивает нужные регистры. Поэтому ошибка деления на 0 не может возникнуть. Если эту программулинку запускать до нужной проги, то все будет работать. По крайней мере, у меня - работает. Могу по почте заслать, если кому надо. ------------------ Кто не боится Дьявола, тому не нужен бог. |
![]() |
[Ответить с цитированием] |
![]() |
#9 |
Камрад
Join Date: дек 2000
Location: Минск, Беларусь
Сообщений: 321
|
![]()
Зачем резиденты?
Просто ускоряется системный таймер. По тестам 800-й P3 станет, например сотым, если тест не будет трогать таймер, а в реале практически не замедлится. И всё будет работать как надо (если не будет трогать таймер). "Замедлить" можно где-то в 65535 раз. Я, пожалуй, попробую написать прогу, но вот беда тестить негде, у самого 412МГц, вероятность ошибки очень низкая ~3%. |
![]() |
[Ответить с цитированием] |
![]() |
#10 |
Камрад
Join Date: дек 2000
Location: Тверь
Сообщений: 130
|
![]()
2Xpert Надо, если не трудно зашли пожалуйста на orlov@tversu.ru
Кстати не очень понял: резидент в окне ДОС или для всей винды? (Хотя это уж не так принципиально) |
![]() |
[Ответить с цитированием] |
![]() |
#11 |
Модератор
Freelancer Join Date: сен 2000
Сообщений: 8,530
|
Мне тоже уже понадобилось.
aleks96@mail.ru Спасибо. |
![]() |
Дневник [Ответить с цитированием] |
![]() |
#12 |
Камрад
Join Date: авг 2000
Location: EKB-City, RUSSIA
Сообщений: 153
|
![]()
Двоим заинтересованным камрадам (Jazz & mOOrman) ушла передача в виде аттача
![]() ------------------ Кто не боится Дьявола, тому не нужен бог. |
![]() |
[Ответить с цитированием] |
![]() |
#13 |
Модератор
Freelancer Join Date: сен 2000
Сообщений: 8,530
|
![]()
2 Xpert
Спасибо.Пришло... |
![]() |
Дневник [Ответить с цитированием] |
![]() |
#14 |
Камрад-Банкир
Join Date: фев 2001
Сообщений: 474
|
![]()
Хотя уже договорились... но всеж...
Я пользовался просто замедлителем... ЦПУ-Киллер... |
![]() |
Дневник [Ответить с цитированием] |
![]() |
#15 |
Камрад
Join Date: дек 2000
Location: Тверь
Сообщений: 130
|
![]()
Xpert, спасибо, то что надо!
|
![]() |
[Ответить с цитированием] |
![]() |
#16 |
Камрад
Join Date: дек 2000
Location: Киев
Сообщений: 222
|
![]()
Есть у меня програмулина, pasp2fix называется.
Она сканит прогу (ЕХЕ-файл) и исправляет ошибку деления на 0. После этого хоть на третьем пне 800 гоняй! пишите по goldenandy@pisem.net - пришлю... |
![]() |
[Ответить с цитированием] |
![]() |
|
|