编辑,好消息!
10 年后,我决定我终于不得不坐下来让这件事发生。我编写了必要的 convert-8080-to-z80-or-x86 和 convert-z80-to-x86 工具,将 Sargon 代码转换为 x86 代码,增加了我在下面讨论的搜索深度,基本上实现了我的所有目标,请参阅项目网站。
对于一个复古计算项目,我需要将 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)mmediate 值加载模拟寄存器 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 周期,它需要尽可能多的时间,然后再想要更多。
3) 即使我有一个方便的仿真解决方案,我也需要组装这些东西,考虑到奇怪的汇编程序约定,这是一个问题。但是,如果我可以将所有 8080 助记符翻译成 x86,那么我可以在 x86 领域舒适地工作,只需将 <10% 左右的 Z80 扩展行手动翻译成等效的 x86 代码。
对不起这个漫无边际的帖子。希望至少有一个人会觉得它很有趣。另一项要求;我很想得到传奇的 Sargon 程序员 Dan 和 Kathe Spracklen 的祝福。但他们似乎根本没有网络存在。Dan Spracklen 在 LinkedIn 上,但它似乎是一个死的、反应迟钝的帐户。如果有人认识这些人或如何联系他们,请告诉我。