【问题标题】:How can I relocate CP/M BDOS to a custom memory address?如何将 CP/M BDOS 重新定位到自定义内存地址?
【发布时间】:2014-06-27 19:11:22
【问题描述】:

也许这是一个新手 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 独立的。谢谢!

【问题讨论】:

  • 哇 - +1 用于复兴 40 多年前的技术 - 这是用于计算机博物馆还是什么?
  • 我们可以说(个人博物馆,仅供我自己使用),复古计算 :) 因为我的工作是关于“现代”计算机技术,人们想要 Gbytes 来完成一项简单的任务,但只能在 64K 中完成在过去的美好时光里,我的爱好是为旧硬件编写程序,“玩”旧操作系统,甚至构建我自己的 8 位硬件(或者有时只是尝试,呵呵)。在我们的现代世界中学习不浪费资源真的很有帮助:)
  • 酷 - 祝你好运 - 大约 30 多年前,我曾经使用过 Z80s 和 CP/M - Wordstar 在当时是一个非常酷的文字处理器/文本编辑器,我曾经使用过为 Z80 嵌入式产品进行交叉开发。

标签: cpm


【解决方案1】:

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

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

如果您想编写交叉重定位器,您可能会感兴趣:来自a quick bit of research,有趣的是来自 BDOS 源代码:

if  test
org 0dc00h
else
org 0800h
endif

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-23
    • 1970-01-01
    • 2013-08-21
    • 1970-01-01
    • 2012-05-22
    相关资源
    最近更新 更多