Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Добрая, старая, великолепная игрушка! Выполненная в высшем EGA разрешении (будет почище некоторых VGA-шных), очень красочно нарисованная. Хорошо чувствуется вкус и тонкий добрый юмор автора. Занимая всего 380 килобайт и отвечая всем современным требованиям (только музыка на спикер...), CD-MAN вызывает трепещущее ностальгическое чувство: "Эх, делали же игры во времена нашей молодости...".
Но, попав на Pentium, Сиди-ман бегает как... словом, очень быстро! Надо исправить... Несколько раз остановив игру, мы, вероятно, должны попасть в тело процедуры ожидания (хотя это бывает и не всегда, но достаточно часто). То, что это именно процедура ожидания, легко узнать по характерным циклам. Вот что мы обнаружим. Хм... неплохо оптимизированный код! Нетрудно понять его смысл... увы! задержка привязывается не к таймеру, а к быстродействию компьютера. Посмотрим, что можно сделать...
Итак, ясно, что интервал задержки (передаваемый как параметр этой процедуре) хранится в слове DS:[ll20h], учитывая размер процедуры, можно было бы переписать ее полностью, используя RTC через функцию f.86h прерывания 15h. тогда бы она работала на всех компьютерах одинаково. Но давайте поступим иначе. В 6123h и 612Dh в СХ грузятся константы. Ясно, что если их увеличить, то задержка возрастет. Увеличим пропорционально эти две константы — скажем, раз в пять — и полюбуемся результатом... Да, теперь скорость нормализовалась...
0000611D: 53 push by.
0000611Е: 51 push ex
0000611F: 8В1Е2011 mov bx,word ptr [1120]
00006123: B90800 mov ex, 0008;<—1
00006126: 803E540200 cmp byte ptr [0254],00
0000612B: 7403 jz 00006130;—,
0000612D: B90500 mov ex, 0005
00006130: E2FE loop 00006130;«—^
00006132: 8BCB mov cx,bx
00006134: 4В dec bx
00006135: E2EC loop 00006123;—
00006137: 59 pop ex
00006138: 5В pop bx
00006139: C3 ret
Дата публикования: 2014-12-08; Прочитано: 219 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!