在 Z80 CP/M 上等待一段时间

Ste*_*idt 2 assembly z80 cpm

我想在 CP/M 2.X (Z80) 上编写一个游戏循环,需要等待一段时间,例如一秒钟。我看过 BDOS 但没有找到一个功能,循环取决于处理器(仿真速度),不存在垂直空白等中断。

关于如何编写游戏循环的任何想法?

[编辑]

z88dk CP/M 库说

不是(当然)CPM 1.x 和 2.x,它们没有实时功能;, 也不是 QX/M,它的时钟不是基于 BCD 的。

有像 LADDER 这样的动作游戏,所以应该有一种游戏循环的方式。

[编辑2]

我可以让用户通过两次按键检查 5 秒并测量一次速度(双循环)以配置游戏 - 但仅作为最后的手段。

Ros*_*dge 6

在 CP/M 2.2 下没有可移植的等待一定时间的方法。CP/M 不需要或使用实时时钟或任何类型的计时器,因此您甚至不能假设系统中存在一个,更不用说它使用任何类型的通用接口了。

Turbo Pascal 的Delay功能通过假设某个 CPU 频率来工作,该频率是在安装 Turbo Pascal 时配置的。CP/M游戏Ladder是用Turbo Pascal编写的,并使用了它的Delay功能,所以也假定了一定的CPU频率。如果您在更快或更慢的 CPU 上玩游戏,游戏会比预期更快或更慢。

最简单的解决方案是实现您自己的延迟函数,假设某个 CPU 频率。我相信 4 MHz 是 CP/M 最常见的 Z80 速度。您可以将此设置为可配置选项,以便用户可以更改假定的 CPU 速度。您可能还想为用户提供更改终端类型的选项,就像 Ladder 所做的那样,因为有许多可能的终端可以与 CP/M 一起使用。