3

也许这是一个新手 CP/M 问题,但无论如何......是否可以重新定位 CP/M BDOS?我有一个我为它编写了 BIOS 的硬件,以便能够与 CPM 2.2 一起使用。但是,BDOS(通过反汇编可以看到)使用固定地址。由于我不太了解 CP/M,所以我不知道如何将 CP/M BDOS 放置到另一个起始地址。我能想到的唯一(有点难看!)解决方案:我找到了一个 CP/M 反汇编列表,所以我只是修改了“ORG”指令并重新组装了它。还有其他方法吗,例如一些 CP/M 实用程序?如果是这样,它怎么能做到这一点,因为 BDOS 使用 JP、CALL 等操作码(对不起,我只熟悉 Z80,对原始 8080 组件不太了解)所以它不仅仅是 PC 独立的。谢谢!

4

1 回答 1

1

无需拆卸;原始的CP/M 源代码可用(而且,是的,BDOS 和其他所有常驻程序都是程序集,而不是 PL/M)。在提供的“CP/M 2.2 ORIGINAL SOURCE”中,您应该找到 OS3BDOS.ASM 和 OS3BDOS1.ASM。这些都是 CP/M 2.2 BDOS 源代码的不同发布版本(参见 README.TXT);您应该能够org使用存档中还提供的汇编程序来调整和重建它们中的任何一个。

或者,您可以使用MOVCPM 工具(也包含在存档中)。它旨在重新定位 BDOS 和提供的 BIOS,但没有什么可以阻止您在事后更换 BIOS。

如果您更喜欢编写交叉重定位器,您可能会感兴趣:通过快速研究,有趣的是来自 BDOS 源代码:

if  test
org 0dc00h
else
org 0800h
endif

为什么 BDOS 会出现在0800任何有用的机器上?为什么是dc00“测试”地址?因为重定位的处理非常简单:BDOS 一次构建一次,0800一次构建一次dc00。通过这两个构建的二进制比较,任何差异都必须在需要插入正确地址的位置,并且与原始org值的差异告诉您如何计算要插入的值。

于 2015-10-02T18:30:32.350 回答