我们有一些较旧的程序(不再有源代码)在时钟速度更快的 CPU 上运行得太快。我猜它们是使用软件延迟(每个循环“X”个 CPU 指令)编写的 - 而不是睡眠和硬件计时器。在新 PC 上,这些应用程序不再等待足够长的时间来等待事件发生;所以它们不再工作。我们无法更改应用程序 - 因此我们试图找出如何让它们相信它们以较慢的时钟速度运行。
我编写了一个应用程序,它占用了 PC 上的处理器时间……实际上减慢了 PC 的速度,足以让这些旧应用程序运行。但这种“解决方案”会影响 PC 上的所有程序(以及用户交互等)。
我发现了一些能够针对单个可执行文件的“程序减速”产品 - (Mo'Slo 和 Asoftech Speeder)。它们不会影响整个系统 - 只会影响单个目标应用程序。事实上,每个应用程序可以看到不同的时钟速度。但是,对于我们拥有的用户数量来说,购买足够数量的这些产品的成本过高。
(仅供参考...游戏玩家使用这些产品来降低旧游戏的时钟速度,以便它们能够在新的、更快的处理器上正确运行)。
我想知道是否有人可以解释这些产品如何影响单个应用程序的时钟速度?
最好总是告诉应用程序它看到的绝对时钟速度为“N” -(以“N”MHz 运行 App1)。但如果我们所能做的只是告诉应用程序它看到的主机 PC 时钟速度为“N”% -(以主机时钟速度的 30% 运行 App2),那么这也是有用的。
如果我能弄清楚它是如何完成的,我就可以编写代码。
答案1
答案2
如果您可以确定游戏用于计数滴答的 API,那么您可能能够应用钩子来转移相关程序的 API。然而,如果没有平台特定的细节,这只是猜测。
例如在 Windows 中,当运行 16 位程序时,我编写了一些汇编程序 thunk,它们拦截 api(DOS)调用并将其转移到我自己的代码,执行一些 Windows 未提供的操作。
编辑:您可以使用 QEMU 之类的虚拟化技术来控制发送到应用程序的 CPU 吗?