在 Z80 上等待一段时间 CP/M
Waiting for some time on Z80 CP/M
我想在 CP/M 2.X (Z80) 上编写一个游戏循环,需要等待一段时间,例如一秒。我看过 BDOS 但没有找到功能,循环取决于处理器(仿真速度),不存在像垂直空白这样的中断。
关于如何编写游戏循环有什么想法吗?
[编辑]
z88dk CP/M 库说
Not (of course) CPM 1.x and 2.x, which have no real-time functions;
,nor QX/M, its clock is not BCD based.
有像 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.
一起使用
我想在 CP/M 2.X (Z80) 上编写一个游戏循环,需要等待一段时间,例如一秒。我看过 BDOS 但没有找到功能,循环取决于处理器(仿真速度),不存在像垂直空白这样的中断。
关于如何编写游戏循环有什么想法吗?
[编辑]
z88dk CP/M 库说
Not (of course) CPM 1.x and 2.x, which have no real-time functions; ,nor QX/M, its clock is not BCD based.
有像 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.
一起使用