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

问题描述

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

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

[编辑]

z88dk CP/M 库说

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

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

[编辑2]

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

解决方法

在 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 一起使用。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...