【发布时间】:2018-12-12 03:37:54
【问题描述】:
所以基本上我的游戏运行良好,蛇移动的默认延迟为 1 秒。
我已经看到int 1Ah/AH=00 中断进行延迟以使其移动得更慢,但是如何让它移动得更快呢?还是我理解中断错误?这个想法是创建关卡,这样当你达到某个分数时,蛇会移动得更快。假设我想要蛇移动 0.75 秒的延迟,然后是 0.5 秒,等等。
【问题讨论】:
-
根据members.tripod.com/vitaly_filatov/ng/asm/asm_029.1.html,
int 1ah/ah=0只是读取当前时间,计数器每秒滴答18.2次。所以你正忙着等待它改变?你应该能够等待任何你想要的间隔到那个粒度。 -
IIRC,没有办法做到这一点,所以 DOS 游戏使用繁忙循环来猜测正确的时钟周期数。这就是为什么 DOSBox 模拟器需要模拟许多不同的时钟速度,而不仅仅是 DOS 运行的最高时钟速度; 80 年代中期的游戏在 90 年代早期的硬件上运行时会尖叫,更不用说现代的了;没有人能真正以现代处理器运行繁忙循环的速度播放它们。
-
@ShadowRanger - 在标准 PC 上,定时器通道 0 以 1.19318 mhz 或 838.0965 nsecs / 周期运行,提供快速准确的定时器,但它是一个 16 位定时器(读取它取决于它的模式2 或模式 3),每秒循环 18.2 次,因此使用定时器中断来增加 32 位计数器的高 16 位。许多(但不是全部)游戏使用这种方法,并且对 cpu 速度不敏感。这种游戏的一个例子是最初的极品飞车赛车游戏。
-
@rcgldr:谢谢!我站得更正了。我知道很多游戏都做错了,我认为这是因为不可能把它做对。我没有正确解释不良的开发实践。 :-)
-
@ShadowRanger - 有些游戏确实搞错了,比如 Wing Commander (1990) 的原始版本,它的运行速度与 CPU 和显卡允许的速度一样快。
标签: assembly delay dos x86-16 bios