【发布时间】:2010-01-10 22:35:28
【问题描述】:
编辑,好消息!
10 年后,我决定我终于不得不坐下来实现这一切。我编写了必要的 convert-8080-to-z80-or-x86 和 convert-z80-to-x86 工具,将 Sargon 代码转换为 x86 代码,增加了我在下面讨论的搜索深度,基本上实现了我的所有目标,请参阅project website.
对于一个复古计算项目,我需要将 1970 年代 8080 汇编语言的主体翻译成 x86 形式。曾经有一段时间,用于实现这一目标的工具是英特尔推出 80x86 系列营销的关键部分。但是我的谷歌搜索技能似乎不适合找到那个原始工具或类似的东西。有谁知道这样的工具是否在任何地方都可用?
编辑
我决定添加一些背景信息,以便更清楚地说明我想要做什么。这是出于普遍的兴趣,也可能是为了梳理出更多的反馈。
在之前的项目中,我查看了 1970 年代的国际象棋程序 Microchess,在作者 Peter Jennings 的祝福下,它在现代机器上运行。 Peter 在他的网站上讲述了 Microchess 的故事,并提供了 6502 汇编语言源。我的贡献现已添加到故事中,可以在以下位置找到:
http://benlo.com/microchess/microchess9.html
我处理该项目的方法是手动转换代码以使其与 C 语言语义相匹配,例如我对其进行了转换;
LDY #$0F ; CALCULATE
LDA SQUARE ; POINTS
ELOOP CMP BK,Y ; CAPTURED
BEQ FOUN ; BY THIS
DEY ; MOVE
BPL ELOOP
FOUN LDA POINTS,Y ;
到这个;
LDYi (0x0F); // CALCULATE
LDA (SQUARE); // POINTS
ELOOP: CMPx (BK,Y); // CAPTURED
BEQ (FOUN); // BY THIS
DEY; // MOVE
BPL (ELOOP);
FOUN: LDAf (POINTS,Y);
我创建了与所需的所有 6502 条指令匹配的 C 预处理器宏,例如 LDYi() 使用 (i) 中间值加载模拟寄存器 Y。
一段时间后,我发现一个叫 Andre Adrian 的德国人拿走了我的代码并添加了一个接口,以使代码能够从现代国际象棋 GUI 中驱动。很酷,我希望我能想到这一点。这可以在他的网站上看到;
http://www.andreadrian.de/schach/index.html
在同一页面上(我使用谷歌翻译),他链接到 Sargon 的原始版本,另一个经典国际象棋程序,可能 复古国际象棋经典,并表示希望有人会带来这个代码以与 Microchess 相同的方式恢复生活(我认为这就是谷歌翻译的意思)。好吧,好吧,我是来服务的!这次我也不会忽略添加GUI界面,或者我会与Andre合作。
Sargon 汇编语言来了;
http://web.archive.org/web/20040217034933/madscientistroom.org/chm/Sargon.html
Andre 删除了所有无关的内容,只留下了汇编语言代码;
http://www.andreadrian.de/schach/sargon.asm
现在,情节变厚了。安德烈试图让这些东西使用模拟器自己工作。 (编辑 3jan2012 - Andre 已经将这一点向前推进了很多,您现在可以在现代 PC 上运行旧的 Sargon 代码 - 请参阅下面的答案和上面链接的他的网站)。但是有一个复杂的情况,我认为他不明白。 Sargon 代码实际上是针对 Z80 的。但是汇编语言不是普通的 Z80 汇编,而是 8080 汇编,带有奇怪的 Intel 风格的 Z80 助记符,只有指令。一些背景; Zilog Z80 是英特尔 8080 的第三方后代。它使用 8080 指令集的二进制兼容超集。 Zilog 决定为 Z80 提供一种更简洁、更正交但完全不同(在源代码级别)的汇编语言。第三方(第四方?)显然认为这是一个糟糕的决定,并采用了英特尔风格的 Z80 汇编器替代方案,Z80 扩展以英特尔风格的方式表达。或者他们只是使用现有 8080 汇编器的宏工具添加了 Z80 扩展。没关系;复杂之处在于 Sargon 代码使用了这种相当奇怪的混合汇编程序。
有几个原因我想要一个 8080 到 x86 的转换器,而不是模拟 Z80 或重复我的 Microchess 项目中的 C 宏方法;
1) 这次有更多的代码。如果可能的话,我想避免逐行编辑,即使这是一个最小的转换。
2) 这次我希望代码全速运行。在我看来,好像我可以增加搜索深度,这是我用 Microchess 做不到的。国际象棋代码会占用 CPU 周期,它需要尽可能多的 CPU 周期,然后需要更多。
3) 即使我有一个方便的仿真解决方案,我也需要组装这些东西,鉴于奇怪的汇编程序约定,这是一个问题。但是,如果我可以将所有 8080 助记符翻译成 x86,那么我可以在 x86 领域舒适地工作,只需将
很抱歉这篇漫无边际的帖子。希望至少有一个人会觉得它很有趣。另一项要求;我很想得到传奇的 Sargon 程序员 Dan 和 Kathe Spracklen 的祝福。但他们似乎根本没有网络存在。 Dan Spracklen 在 LinkedIn 上,但它似乎是一个死的、反应迟钝的帐户。如果有人认识这些人或如何联系他们,请告诉我。
【问题讨论】:
-
您对将 Z80 转换为 x86 代码的信心如何?您可以使用 Z80 操作执行许多巧妙的技巧,甚至无法使用 8080,更不用说一些很少遇到的与条件位不兼容的问题。 Z80 在很多方面都是一个奇怪的 CPU。
-
我非常有信心 :-) 我在 Z80 上咬牙切齿,多年来(从 1983 年到 1988 年左右)它是我的首选 CPU。我曾经喜欢 Z80 扩展,它们让 CPU 看起来很酷,而 8080 或 8085 则不然。查看 Sargon 代码,我认为我可以在几个小时的努力下手动翻译 Z80 特定的行。
-
您是否看到过在“旧的 dos 档案”中漂浮的 asm 翻译器? nvm...看起来你已经找到了同一个。
标签: assembly x86 z80 retro-computing