Discussion:
Олег, спасибо. Отключение кэша помогло.
(слишком старое сообщение для ответа)
vasiliy golovin
2005-12-01 11:23:18 UTC
Permalink
Ghym, Oleg!
You wrote on Thu, 01 Dec 2005 08:45:12 +0300:

VK>> А что, под dosbox она никак??
OB> Кстати, присоединяюсь к предыдущему докладчику. :)
OB> http://dosbox.sourceforge.net. Мне кажется, проблемы с ПрефКлубом,
OB> Диггером
OB> и Аллей Кэтом должно решать на раз. :) Честно говоря, на настоящий
OB> момент я
OB> знаю только парочку игр, которые отказались нормально работать под
OB> ДосБоксом, и все они - на Dos4GW...

DosBox - ацтой. И, кстати, Префклуб под ним не запускается. А при сабже
запускается. Hа 486.

behemoth,
troll-paladin
Oleg Bobryshev
2005-12-05 14:08:30 UTC
Permalink
Добрый день всем, здравствуй, vasiliy golovin! :)
Помнится, Вы писали к Oleg Bobryshev Thu, 01 Dec 2005 14:23:18 +0300:

vg> Ghym, Oleg!
vg> You wrote on Thu, 01 Dec 2005 08:45:12 +0300:

VK>>> А что, под dosbox она никак??
OB>> Кстати, присоединяюсь к предыдущему докладчику. :)
OB>> http://dosbox.sourceforge.net. Мне кажется, проблемы с ПрефКлубом,
OB>> Диггером и Аллей Кэтом должно решать на раз. :) Честно говоря, на
OB>> настоящий момент я знаю только парочку игр, которые отказались
OB>> нормально работать под
OB>> ДосБоксом, и все они - на Dos4GW...

vg> DosBox - ацтой. И, кстати, Префклуб под ним не запускается. А при
vg> сабже запускается. Hа 486.

Хм. Специально вот вчера поставил на свой Athlon 2000+ Prefclub. Запустил,
увидел Divide Error и закрыл. :) (Кста, если найду статью, как лечится этот
баг, могу и экзешник попробовать починить. Уже делал, но давно.) Запустил
ДОСБокс, запустил под ним Префклуб, выиграл двое распасов и встрял на
тройных с тремя тузами и более ничем. %) Выключил Префклуб и остался в
недоумении: чем же ты недоволен? :)

OVB aka Smiling Spectre E-mail: spectre<at>mail333.com
--
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
Oleg Bobryshev
2005-12-07 11:08:39 UTC
Permalink
Добрый день всем! :)

OB> Запустил, увидел Divide Error и закрыл. :) (Кста, если найду статью,
OB> как лечится этот баг, могу и экзешник попробовать починить. Уже
OB> делал, но давно.) Запустил

Ага, разогнался, блин. :/ Я надеялся на Pascal, а Borland Turbo-C (на
котором оказался этот префклуб) оказывается тоже дает эту Divide Error. Но в
отличие от Паскаля, методов решения в и-нете не сыскать. :/ Значит, не
повезло. Остаюсь на позициях ДосБокса (который 0.63). :)

OVB aka Smiling Spectre E-mail: spectre<at>mail333.com
--
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
Олег Крылов
2005-12-11 00:15:37 UTC
Permalink
Wed Dec 07 2005 13:08, Oleg Bobryshev wrote to Oleg Bobryshev:

OB> From: "Oleg Bobryshev" <***@mail.svkchr.ru>

OB> Добрый день всем! :)

OB>> Запустил, увидел Divide Error и закрыл. :) (Кста, если найду статью,
OB>> как лечится этот баг, могу и экзешник попробовать починить. Уже
OB>> делал, но давно.) Запустил

OB> Ага, разогнался, блин. :/ Я надеялся на Pascal, а Borland Turbo-C (на
OB> котором оказался этот префклуб) оказывается тоже дает эту Divide Error.
OB> Hо в отличие от Паскаля, методов решения в и-нете не сыскать. :/ Значит,
OB> не повезло. Остаюсь на позициях ДосБокса (который 0.63). :)

Да, ДосБох с префклубом работает.
Но надо правильно переменную cycles установить.
При некоторых можно добиться той же divide error.

Suum cuique
Oleg Bobryshev
2005-12-12 07:45:28 UTC
Permalink
Добрый день всем, здравствуй, Олег Крылов! :)
Помнится, Вы писали к Oleg Bobryshev Sun, 11 Dec 2005 00:15:37 +0000 (UTC):

OB>> Ага, разогнался, блин. :/ Я надеялся на Pascal, а Borland Turbo-C
OB>> (на котором оказался этот префклуб) оказывается тоже дает эту
OB>> Divide Error.
OB>> Hо в отличие от Паскаля, методов решения в и-нете не сыскать. :/
OB>> Значит, не повезло. Остаюсь на позициях ДосБокса (который 0.63).
OB>> :)

ОК> Да, ДосБох с префклубом работает.
ОК> Но надо правильно переменную cycles установить.
ОК> При некоторых можно добиться той же divide error.

Ну, все правильно. :) Это же чисто скорости баг. У ТР все давным-давно
прокомментировано: модуль delay должен давать задержку, согласованнуе с
частотой машины для чего в СХ (иногда в BH) загоняется 55 (оно же 37H) -
длина одного цикла, а затем число циклов, полученное ранее, делится на 55
командой DIV CX (DIV BH). Если первое число слишком велико, возникает
переполнение - и как результат, деление на 0. :) Обычно лечится заменой 37
на FF, хотя, конечно, не могу сказать, до какого момента этого хватит. :) Но
это ТР. А вот в ТС я вообще ничего похожего не нашел, хотя явно
происхождение бага точно такое же. Ктоб еще смог оттрассировать и сказать
где именно глючит, а то хакер из меня никудышний...

OVB aka Smiling Spectre E-mail: spectre<at>mail333.com
--
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
Олег Крылов
2005-12-12 10:26:25 UTC
Permalink
Mon Dec 12 2005 09:45, Oleg Bobryshev wrote to Олег Крылов:

OB> From: "Oleg Bobryshev" <***@mail.svkchr.ru>

OB> Hу, все правильно. :) Это же чисто скорости баг. У ТР все давным-давно
OB> прокомментировано: модуль delay должен давать задержку, согласованнуе с
OB> частотой машины для чего в СХ (иногда в BH) загоняется 55 (оно же 37H) -
OB> длина одного цикла, а затем число циклов, полученное ранее, делится на 55

OB> командой DIV CX (DIV BH). Если первое число слишком велико, возникает
OB> переполнение - и как результат, деление на 0. :) Обычно лечится заменой
OB> 37
OB> на FF, хотя, конечно, не могу сказать, до какого момента этого хватит. :)

А почему просто не забить NOPами? Потом что-нибудь вроде MOV AX,1 MOV DX,1 ?
Есть же такие удобные вещи как hiew.

Suum cuique
Oleg Bobryshev
2005-12-12 14:22:31 UTC
Permalink
Добрый день всем, здравствуй, Олег Крылов! :)
Помнится, Вы писали к Oleg Bobryshev Mon, 12 Dec 2005 10:26:25 +0000 (UTC):

OB>> Hу, все правильно. :) Это же чисто скорости баг. У ТР все
OB>> давным-давно прокомментировано: модуль delay должен давать
OB>> задержку, согласованнуе с частотой машины для чего в СХ (иногда в
OB>> BH) загоняется 55 (оно же 37H) -
OB>> длина одного цикла, а затем число циклов, полученное ранее, делится
OB>> на 55

OB>> командой DIV CX (DIV BH). Если первое число слишком велико,
OB>> возникает переполнение - и как результат, деление на 0. :) Обычно
OB>> лечится заменой 37 на FF, хотя, конечно, не могу сказать, до
OB>> какого момента этого хватит. :)

ОК> А почему просто не забить NOPами? Потом что-нибудь вроде MOV AX,1
ОК> MOV DX,1 ?
ОК> Есть же такие удобные вещи как hiew.

Ага, ты, фактически, спрессовал две остальных технологии в одну. :) То есть,
нафиг убрать деление вообще (но тогда и тормозов не будет) или загнать
произвольное число (но тогда результат, скажем так, непредсказуем :). Честно
говоря, в 2/3 случаев эта команда не используется вообще, а присутствует
исключительно из-за того, что входит в стандартную библиотеку и
подлинковалась в начале, так что сработает любой способ. :) Есть и более
сложные "правильные" пути обхода (типа загнать не в одно а двухбайтное число
результат), но все упирается в то, что чтобы изменить процедуру, надо знать,
какую, так что только с Паскалем проходит, а что с Сями, похоже, никто не
знает...

OVB aka Smiling Spectre E-mail: spectre<at>mail333.com
--
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
Олег Крылов
2005-12-12 17:05:15 UTC
Permalink
Mon Dec 12 2005 16:22, Oleg Bobryshev wrote to Олег Крылов:

OB> Ага, ты, фактически, спрессовал две остальных технологии в одну. :) То
OB> есть, нафиг убрать деление вообще (но тогда и тормозов не будет) или
OB> загнать произвольное число (но тогда результат, скажем так,
OB> непредсказуем :). Честно говоря, в 2/3 случаев эта команда не
OB> используется вообще, а присутствует исключительно из-за того, что входит
OB> в стандартную библиотеку и подлинковалась в начале, так что сработает
OB> любой способ. :) Есть и более сложные "правильные" пути обхода (типа
OB> загнать не в одно а двухбайтное число результат), но все упирается в то,
OB> что чтобы изменить процедуру, надо знать, какую, так что только с
OB> Паскалем проходит, а что с Сями, похоже, никто не знает...

Ну спасибо тебе за информацию, помучил немного дебаггером, на моем PIII 1.2
работает. Только с таким свистом, что опять таки без moslo очень сложно.

Сравнение файлов PC.EXE и pcnew.exe
==================================
0000CA1D: 2B B8
0000CA1E: 46 01 <- эта цифра циклы процессора
0000CA1F: F8 00
0000CA20: 1B BA
0000CA21: 56 00
0000D282: 33 B0
0000D283: C0 02 <- эта цифра циклы сопроцессора
0000D284: 50 E9
0000D285: 9A 67
0000D286: 0B 00
0000D287: 00 90
0000D288: 0A 90
0000D289: 14 90
====================================

Если у тебя не русифицированный экзешник, свистни, тогда пришлю более длинные
последовательности для поиска и замены.

Suum cuique
Олег Крылов
2005-12-12 23:38:06 UTC
Permalink
Mon Dec 12 2005 19:05, Олег Крылов wrote to Oleg Bobryshev:

ОК> From: "Олег Крылов" <***@peterlink.ru>
ОК> Сравнение файлов PC.EXE и pcnew.exe
ОК> ==================================
ОК> 0000CA1D: 2B B8
ОК> 0000CA1E: 46 01 <- эта цифра циклы процессора
ОК> 0000CA1F: F8 00
ОК> 0000CA20: 1B BA
ОК> 0000CA21: 56 00
ОК> 0000D282: 33 B0
ОК> 0000D283: C0 02 <- эта цифра циклы сопроцессора
ОК> 0000D284: 50 E9
ОК> 0000D285: 9A 67
ОК> 0000D286: 0B 00
ОК> 0000D287: 00 90
ОК> 0000D288: 0A 90
ОК> 0000D289: 14 90
ОК> ====================================

Кому лень ковыряться с хекс-эдитором выкладываю целый архив:
http://x-14224.narod.ru/prefclub.ZIP

Должно нормально играться на 386 и 486, для пентиумов все равно понадобится
замедлитель.

Suum cuique
Oleg Bobryshev
2005-12-13 11:47:10 UTC
Permalink
Добрый день всем, здравствуй, Олег Крылов! :)
Помнится, Вы писали к Oleg Bobryshev Mon, 12 Dec 2005 17:05:15 +0000 (UTC):

ОК> Mon Dec 12 2005 16:22, Oleg Bobryshev wrote to Олег Крылов:

OB>> Ага, ты, фактически, спрессовал две остальных технологии в одну. :)
[skip]
ОК> Ну спасибо тебе за информацию, помучил немного дебаггером, на моем
ОК> PIII 1.2 работает. Только с таким свистом, что опять таки без moslo
ОК> очень сложно.

Да пожалуйста. :) А мож все же число где-нить добавить?.. :)

ОК> Сравнение файлов PC.EXE и pcnew.exe
[skip]
ОК> Если у тебя не русифицированный экзешник, свистни, тогда пришлю
ОК> более длинные последовательности для поиска и замены.

Не сработало (не русифицированный). Можно еще раз? :)
Да, а ты мне скажи, что ты сделал-то? :) Желательно на ассемблере, не
гекс-кодами, бо с дизассемблированием у меня немного плохо. %) Чтобы я знал
и мог повторить на будущее. А то слепая замена кодов мне неинтересна, а
ассемблер я слишком плохо знаю, чтобы воспроизвести самому. :)

OVB aka Smiling Spectre E-mail: spectre<at>mail333.com
--
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
Олег Крылов
2005-12-13 13:31:28 UTC
Permalink
Tue Dec 13 2005 13:47, Oleg Bobryshev wrote to Олег Крылов:

OB> Hе сработало (не русифицированный). Можно еще раз? :)

Я привел патч долько для pc.exe, для образца, все вплоть до выбора игроков
должно работать, в остальных трех файлах нужно найти и поменять те же
последовательности, что и в первом. Лучше скачай архив упоминаемый в одном из
прошлых сообщений, там все есть и работает. Несколько партий выиграл,
несколько проиграл и безо всяких DosBox. Кстати архив я тоже обновил спустя
несколько часов.

OB> Да, а ты мне скажи, что ты сделал-то? :) Желательно на ассемблере, не
OB> гекс-кодами, бо с дизассемблированием у меня немного плохо. %) Чтобы я
OB> знал
OB> и мог повторить на будущее. А то слепая замена кодов мне неинтересна, а
OB> ассемблер я слишком плохо знаю, чтобы воспроизвести самому. :)

Вкратце там так: вызывается одна процедура, результат в стековую переменную,
вызывается другая, из результата вычитается результат прошлой переменной
посредством

sub ax
sbb dx

и получается, естественно, 0, который заносится в bx. После div bx вылетает по
0-му процессорному прерыванию деления на 0. Это уж мне просто повезло, что
программа такая маленькая и никакой обработки ошибок нет - создатели Борланда
не верили, что будут созданы машины сильнее 286 - замучился бы трассировать
эту обработку.

Я заменил

sub ax, ...
sbb dx, ...

на

mov ax,1
mov dx,0

и теперь div bx никаких проблем не вызвало.
То же и для сопроцессорного куска.

Полный патч.

====================
Сравнение файлов OLD\(KICKER).EXE и (KICKER).EXE
000065BE: 2B B8
000065BF: 46 01
000065C0: F2 00
000065C1: 1B BA
000065C2: 56 00
000065C3: F4 00

Сравнение файлов OLD\(pref).exe и (pref).exe
0000D6DC: 2B B8
0000D6DD: 46 01
0000D6DE: F8 00
0000D6DF: 1B BA
0000D6E0: 56 00
0000D6E1: FA 00
0000DA89: 2B B8
0000DA8A: 46 01
0000DA8B: F8 00
0000DA8C: 1B BA
0000DA8D: 56 00
0000DA8E: FA 00
0000DA94: 14 FF

Сравнение файлов OLD\PC.EXE и pc.exe
0000CA1D: 2B B8
0000CA1E: 46 01
0000CA1F: F8 00
0000CA20: 1B BA
0000CA21: 56 00
0000CA28: 14 FF
0000D282: 33 B0
0000D283: C0 02
0000D284: 50 E9
0000D285: 9A 67
0000D286: 0B 00
0000D287: 00 90
0000D288: 0A 90
0000D289: 14 90
====================

Если подробности нужны давай мылом, а то конференцию в помойку превратим.

Suum cuique
Oleg Bobryshev
2005-12-15 12:15:42 UTC
Permalink
Добрый день всем, здравствуй, Олег Крылов! :)
Помнится, Вы писали к Oleg Bobryshev Tue, 13 Dec 2005 13:31:28 +0000 (UTC):

ОК> Tue Dec 13 2005 13:47, Oleg Bobryshev wrote to Олег Крылов:

OB>> Hе сработало (не русифицированный). Можно еще раз? :)

ОК> Я привел патч долько для pc.exe, для образца, все вплоть до выбора
ОК> игроков должно работать, в остальных трех файлах нужно найти и
ОК> поменять те же последовательности, что и в первом.

Да я понял. :) Просто у меня нет указанных последовательностей. В английском
экзешнике там совсем другие байты по этому адресу, и поиск не помогает -
указанная процедура байт на 5 находится, а дальше совсем другое. :(

ОК> Лучше скачай архив упоминаемый в одном из прошлых сообщений, там все
ОК> есть и работает. Несколько партий выиграл, несколько проиграл и безо
ОК> всяких DosBox. Кстати архив я тоже обновил спустя несколько часов.

О, то есть без замедлителей? Увеличил-таки цифры? :)

OB>> Да, а ты мне скажи, что ты сделал-то? :) Желательно на ассемблере,
OB>> не гекс-кодами, бо с дизассемблированием у меня немного плохо. %)
OB>> Чтобы я знал и мог повторить на будущее. А то слепая замена кодов
OB>> мне неинтересна, а ассемблер я слишком плохо знаю, чтобы
OB>> воспроизвести самому. :)

[skip]
ОК> Я заменил

ОК> sub ax, ...
ОК> sbb dx, ...

ОК> на

ОК> mov ax,1
ОК> mov dx,0
[skip]
Ага, примерно понял.

ОК> Сравнение файлов OLD\(KICKER).EXE и (KICKER).EXE
[skip]
Не-ту.

ОК> Если подробности нужны давай мылом, а то конференцию в помойку
ОК> превратим.

Ок. Мое мыло ты видишь, на твое, что вижу, послал. :)

OVB aka Smiling Spectre E-mail: spectre<at>mail333.com
--
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
Олег Крылов
2005-12-15 14:32:51 UTC
Permalink
Thu Dec 15 2005 14:15, Oleg Bobryshev wrote to Олег Крылов:

ОК>> Лучше скачай архив упоминаемый в одном из прошлых сообщений, там все
ОК>> есть и работает. Hесколько партий выиграл, несколько проиграл и безо
ОК>> всяких DosBox. Кстати архив я тоже обновил спустя несколько часов.

OB> О, то есть без замедлителей? Увеличил-таки цифры? :)

С moslo. Без moslo тоже, вроде, работает, но ничего не успеваешь разглядеть.
Да еще из-за звука иногда вываливается. Когда тараканчика, например, давишь.
Для PC-спикера нужно знать скорость процессора, вот для чего вся эта фигня с
измерением скорости циклов. Раньше и с moslo /1 та же фигня была (с делением
на 0).

Так что, безупречно работает только под dos, т.е свойства ярлычка в 98-х
приходится менять. На 2k не проверял.

А под dosbox у меня звук не работает, только треск в колонках слышен. Они там,
видишь ли, чего-то перенаправляют и эмулируют.

Щас хоть послушал, как тараканчик вопит. Ностальгия.

Так и не понял, работает ли патченый prefclub у кого-нибудь еще или у меня
только?

ОК>> Если подробности нужны давай мылом, а то конференцию в помойку
ОК>> превратим.

OB> Ок. Мое мыло ты видишь, на твое, что вижу, послал. :)

Получил. Сейчас отвечу.

Suum cuique
Oleg Bobryshev
2005-12-16 06:24:39 UTC
Permalink
Добрый день всем, здравствуй, Олег Крылов! :)
Помнится, Вы писали к Oleg Bobryshev Thu, 15 Dec 2005 14:32:51 +0000 (UTC):

ОК> Thu Dec 15 2005 14:15, Oleg Bobryshev wrote to Олег Крылов:

ОК>>> Лучше скачай архив упоминаемый в одном из прошлых сообщений, там
ОК>>> все есть и работает. Hесколько партий выиграл, несколько проиграл
ОК>>> и безо всяких DosBox. Кстати архив я тоже обновил спустя несколько
ОК>>> часов.

OB>> О, то есть без замедлителей? Увеличил-таки цифры? :)

Вижу, не увеличил. :D

ОК> С moslo. Без moslo тоже, вроде, работает, но ничего не успеваешь
ОК> разглядеть.
ОК> Да еще из-за звука иногда вываливается. Когда тараканчика, например,
ОК> давишь.
ОК> Для PC-спикера нужно знать скорость процессора, вот для чего вся эта
ОК> фигня с измерением скорости циклов. Раньше и с moslo /1 та же фигня
ОК> была (с делением на 0).

Ты чууточку недоделал. :)

ОК> Так что, безупречно работает только под dos, т.е свойства ярлычка в
ОК> 98-х приходится менять. На 2k не проверял.

ОК> А под dosbox у меня звук не работает, только треск в колонках
ОК> слышен. Они там, видишь ли, чего-то перенаправляют и эмулируют.

Не попробовал. Надо будет посмотреть.
Кста, из-за скорости она и у меня странно разговаривает. Шум в спикере, хоть
что-то разобрать можно, не просто "пустой". Хм, а в ДОСбоксе вроде нормально
было! Или я глючу...

ОК> Щас хоть послушал, как тараканчик вопит. Ностальгия.

ОК> Так и не понял, работает ли патченый prefclub у кого-нибудь еще или
ОК> у меня только?

У меня работает без мосло. Только все, завязанное на скорость, носится, как
угорелое. :) Носилось. :) Ты ж не до конца реализовал алгоритм! :) Зачем
ставить mov ax,0ffh? Это не Паскаль с его одним байтом, можно и увеличить. В
моем случае (2,5ГГц) близко к идеалу работает 2ffh. :) А лучше напиши
процедуру, которая будет _правильно_ определять частоту и менять байтики как
надо. ;)
Хотя kicker так и носится. :( Оно и правильно, там mov тобой не менялся.
Где-то еще у него сидят байтики...

OVB aka Smiling Spectre E-mail: spectre<at>mail333.com
--
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
Олег Крылов
2005-12-16 10:29:21 UTC
Permalink
Fri Dec 16 2005 08:24, Oleg Bobryshev wrote to Олег Крылов:

OB> У меня работает без мосло. Только все, завязанное на скорость, носится,
OB> как угорелое. :) Hосилось. :) Ты ж не до конца реализовал алгоритм! :)

Ну вот. Сначала "помоги пожалуйста", а потом "ты не до конца реализовал
алгоритм".

OB> Зачем ставить mov ax,0ffh? Это не Паскаль с его одним байтом, можно и
OB> увеличить. В моем случае (2,5ГГц) близко к идеалу работает 2ffh. :) А
OB> лучше напиши процедуру, которая будет _правильно_ определять частоту и
OB> менять байтики как надо. ;)
OB> Хотя kicker так и носится. :( Оно и правильно, там mov тобой не менялся.
OB> Где-то еще у него сидят байтики...

Ты ничего не перепутал? Я ставил и 02ffh и 20ffh и 70ffh - никаких изменений
не заметил. Сумневаюсь я, что мой PIII 1.2 ГГц настолько быстрее твоего
"Атлона". Мне кажеца, там старший байт вообще отбрасывается. Если я смутно
помню.

ЗЫЖ Чего-то мне думается, что остальным наша полемика не очень интересна,
давай мылом ети вопросы обсуждать, а?

Suum cuique
Oleg Bobryshev
2005-12-16 14:28:01 UTC
Permalink
Добрый день всем, здравствуй, Олег Крылов! :)
Помнится, Вы писали к Oleg Bobryshev Fri, 16 Dec 2005 10:29:21 +0000 (UTC):

ОК> Ну вот. Сначала "помоги пожалуйста", а потом "ты не до конца
ОК> реализовал алгоритм".

Ну, мое полное дилетанство в ассемблере ничуть не мешает мне
совершенствовать идею, если уж я ее понял. :)

[skip]
ОК> ЗЫЖ Чего-то мне думается, что остальным наша полемика не очень
ОК> интересна, давай мылом ети вопросы обсуждать, а?

Ок, перехожу в мыло. Буду в понедельник. Извиняюсь, я чего-то увлекся...

OVB aka Smiling Spectre E-mail: spectre<at>mail333.com
--
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
Oleg Bobryshev
2005-12-12 07:45:28 UTC
Permalink
Добрый день всем, здравствуй, Олег Крылов! :)
Помнится, Вы писали к Oleg Bobryshev Sun, 11 Dec 2005 00:15:37 +0000 (UTC):

OB>> Ага, разогнался, блин. :/ Я надеялся на Pascal, а Borland Turbo-C
OB>> (на котором оказался этот префклуб) оказывается тоже дает эту
OB>> Divide Error.
OB>> Hо в отличие от Паскаля, методов решения в и-нете не сыскать. :/
OB>> Значит, не повезло. Остаюсь на позициях ДосБокса (который 0.63).
OB>> :)

ОК> Да, ДосБох с префклубом работает.
ОК> Но надо правильно переменную cycles установить.
ОК> При некоторых можно добиться той же divide error.

Ну, все правильно. :) Это же чисто скорости баг. У ТР все давным-давно
прокомментировано: модуль delay должен давать задержку, согласованнуе с
частотой машины для чего в СХ (иногда в BH) загоняется 55 (оно же 37H) -
длина одного цикла, а затем число циклов, полученное ранее, делится на 55
командой DIV CX (DIV BH). Если первое число слишком велико, возникает
переполнение - и как результат, деление на 0. :) Обычно лечится заменой 37
на FF, хотя, конечно, не могу сказать, до какого момента этого хватит. :)
Да, если интересно, вычисляется влет по сообщению "Runtime error 200", и
если нет дизассемблера, ищешь последовательность 8B C2 B7 37 F6 F7. Или же
F7 D0 F7 D2 B9 37 00 F7 F1. 37 - то самое, надо менять на FF. :)

Но это ТР. А вот в ТС я вообще ничего похожего не нашел, хотя явно
происхождение бага точно такое же. Ктоб еще смог оттрассировать и сказать
где именно глючит, а то хакер из меня никудышний...

OVB aka Smiling Spectre E-mail: spectre<at>mail333.com
--
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
Loading...