2

У нас есть несколько старых программ (больше нет исходного кода), которые работают слишком быстро на процессорах с более высокими тактовыми частотами. Я предполагаю, что они были написаны с использованием программных задержек (число «X» инструкций ЦП на цикл) - вместо снов и аппаратных таймеров. На новых ПК эти приложения больше не ждут достаточно долго, чтобы произошли события; поэтому они больше не работают. Мы не можем изменить приложения - поэтому мы пытаемся выяснить, как заставить их поверить, что они работают на более низкой тактовой частоте.

Я написал приложение, которое расходует процессорное время на ПК ... эффективно замедляя его настолько, чтобы эти старые приложения могли работать. Но это "решение" затрагивает все программы на ПК (и взаимодействие с пользователем и т.д.).

Я нашел несколько «программных замедляющих» продуктов, которые способны нацеливаться на отдельные исполняемые файлы - (Mo'Slo и Asoftech Speeder). Они НЕ влияют на систему в целом - только на индивидуальные целевые приложения. Фактически, каждое приложение может видеть различную тактовую частоту. Но это слишком дорого, чтобы купить достаточное количество мест этих продуктов для количества пользователей, которые у нас есть.

(FYI ... Геймеры используют эти продукты для замедления тактовой частоты старых игр, чтобы они правильно работали на новых, более быстрых процессорах).

Мне интересно, кто-нибудь может объяснить, как эти продукты могут влиять на тактовые частоты, которые видят отдельные приложения?

Лучше всего всегда сообщать приложению, что оно видит абсолютную тактовую частоту «N» - (запустите App1 на «N» МГц). Но это также будет полезно, если все, что мы можем сделать, это сообщить приложению, что оно видит «N»% тактовой частоты хост-компьютера (запустите App2 на 30% тактовой частоты хоста).

Я могу написать код, если смогу понять, как это делается.

2 ответа2

0

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

Например, в Windows, когда я запускаю 16-битные программы, я написал несколько блоков ассемблера, которые перехватывают вызовы API (DOS) и перенаправляют их в мой собственный код, делают что-то отличное от того, что предоставляет Windows.

Изменить: Можете ли вы использовать технологии виртуализации, такие как QEMU, для управления процессором, отправляемым в приложение?

0

Учитывая возраст программного обеспечения, которое не использует инструкции по остановке, я предполагаю, что они работают на DOS, и один из вариантов будет запускать их на DOSBox, у которого есть возможность замедлить работу программного обеспечения. Это FOSS, так что вы, вероятно, можете посмотреть на код.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .