我在哪里可以找到8080到x86的汇编程序转换工具?

时间:2010-01-10 22:35:29

标签: assembly x86 retro-computing

对于复古计算项目,我需要将20世纪70年代8080汇编语言的主体翻译成x86形式。曾经有一段时间,这样做的工具是英特尔推出80x86系列市场营销的关键部分。但我的谷歌搜索技巧似乎不能找到原始工具或类似的东西。有谁知道这样的工具是否可以在任何地方使用?

修改

我决定添加一些背景信息,以便更清楚我想要做的事情。这是为了普遍的兴趣,也可能是为了更多的反馈。

在之前的一个项目中,我看了20世纪70年代的国际象棋程序Microchess,在作者的祝福下,Peter Jennings在现代机器上运行。彼得在他的网站上讲述了Microchess的故事,并提供了6502汇编语言源。我的贡献现已添加到故事中,可以在<; p>找到

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.

一段时间后,我发现一个德国人安德烈·阿德里安已经接受了我的代码,并添加了一个界面,使代码可以从现代国际象棋GUI中驱动。非常酷,我希望我能想到这一点。这可以在他的网站上看到;

http://www.andreadrian.de/schach/index.html

在同一页面上(我使用谷歌翻译),他链接到Sargon的原始版本,另一个经典的国际象棋程序,可能是 复古国际象棋经典,并表示希望有人带来这个代码以与使用Microchess相同的方式恢复生活(我认为这无论如何都是google翻译的意思)。好吧,好的,我来这里服务!这次我也不会忽视添加GUI界面,或者我可能会与Andre合作。

Sargon汇编语言在这里;

http://web.archive.org/web/20040217034933/madscientistroom.org/chm/Sargon.html

Andre删除了所有无关的内容,只留下汇编语言代码;

http://www.andreadrian.de/schach/sargon.asm

现在,情节变浓了。安德烈试图使用模拟器让这些东西自己工作。 (编辑3jan2012 - 安德烈已经向前推进了很多,现在您可以在现代PC上运行旧的Sargon代码 - 请参阅下面的答案和上面链接的网站)。但是我认为他并不理解这种并发症。 Sargon代码实际上是针对Z80的。但是汇编语言并不是普通的Z80组装,而是8080汇编,只有英特尔风格的助记符只能用于Z80的说明。一些背景; Zilog Z80是Intel 8080的第三方后代。它使用8080指令集的二进制兼容超集。 Zilog决定为Z80提供更清晰,更正交但完全不同(源级)的汇编语言。第三个(第四个?)派对明确认定这是一个糟糕的决定,并制作了另一个英特尔风格的Z80汇编程序,其中Z80扩展以英特尔的方式表达。或者他们可能只是使用现有8080汇编程序的宏功能添加了Z80扩展。没关系;复杂的是Sargon代码使用了这个相当奇怪的混合汇编程序。

我想要一个8080到x86的翻译器有几个原因,而不是从我的Microchess项目中模拟Z80或重复C Macro方法;

1)这次有更多的代码。如果可能的话,我想避免逐行编辑,即使它是最小的转换。

2)我希望这次代码全速运行。它看起来好像我可以增加搜索深度,这是我无法用Microchess做的事情。国际象棋代码占用CPU周期,它需要尽可能多的时间,然后需要更多。

3)即使我有一个方便的仿真解决方案,我也需要将这些东西组装起来,这是一个奇怪的汇编程序约定的问题。但是,如果我可以将所有8080助记符翻译成x86,那么我可以在x86中轻松地工作,只需将&lt; 10%左右的Z80扩展行转换为等效的x86代码。

对不起这篇漫无边际的帖子。希望至少有一个人会发现它很有趣。另一个要求;我很想得到传奇的Sargon程序员Dan和Kathe Spracklen的祝福。但他们似乎根本没有网络存在。 Dan Spracklen在LinkedIn上,但似乎是一个死的,没有反应的帐户。如果有人知道这些人或如何联系他们,请告诉我。

7 个答案:

答案 0 :(得分:3)

您是否必须实际翻译代码,或者emulator是否足够?甚至有一个用Javascript写的!

答案 1 :(得分:3)

您可能需要考虑一些替代方案。一个是C的静态二进制转换,如果将8080代码组装成二进制代码,这可能更容易。没有看到您的代码,您可能会遇到问题,因为它不是一对一的事情。 8080或其运行的主板上的资源与您计划运行代码的8086不匹配。如果您转换为C,那么您可以现在或现在定位任何内容,而不是限制在模拟环境中的x86来覆盖先前的问题。这并不像看起来那么可怕或痛苦......实际上非常有趣。

我一直在考虑做的事情不是将C转换为llvm的字节码。

编辑:

汇编程序到汇编程序的问题,除了有一天必须再次执行它之外,不是指令的功能(寄存器A =寄存器A + 1),而是标志和条件分支(寄存器A =寄存器A + 1,如果A == 0 Z = 1,则Z = 0,......)。根据您对8080 vs Z80的理解,您知道您将不得不找到或创建一个可以解析该汇编程序的工具。我的理论是,你更有可能找到一个二进制汇编程序而不是转换工具。从二进制文件开始,你可以模拟(远远超过全速)或者进行静态二进制转换,理想情况下是C语言。使用C语言你可以让每个指令都有代码来更新标志,然后是C语言中的优化器。编译器可以删除死代码。汇编程序不会做的事情,直接转到x86,给你留下大量未使用的指令。我没有阅读手册或太多的代码,因此它可能很容易处理,但除了单独的指令之外,还有堆栈和内存以及寄存器和用户界面的问题。如果这是使用图形/视频接口你必须更换代码批发,如果堆栈在8080和x86之间变化,那么你将不得不处理它,并且你可能有硬编码的内存地址将不得不处理。硬编码的很容易,计算的更难,跳表等。堆栈如何用于参数传递和调用可能因处理器而异,并且作者可能会以不转换指令的方式进行堆栈清理。这些都是我在汇编程序中进行汇编程序时所遇到的所有内容,授予它从祖父处理器到其孙子,如8080到x86。我去踢和尖叫,但最终看到,至少在我看来,翻译到C涵盖了这么多的这些问题。 我愿意打赌,基于你所说的关于z80的8080变体,你可能还是要编写自己的汇编解析器。当你开始考虑有多少指令,有多少变化时,这里的任务似乎不可能是巨大的,汇编程序或静态翻译器。但是一旦你进入它,磨练指令并不是那么糟糕。

我理解我的答案与问题没有直接关系,问题是我在哪里可以找到这个工具。我的答案与:如果你没找到工具那么。如果你发现工具那么好,完成了。如果你找到一个可以让你靠近的工具,那么你可以从那里进行手工或编程调整。因为我之前已经这样做了几次,所以我知道完整的翻译可以是一个有趣的项目,特别是如果复古程序是你关心到足以迁移到现在的程序。

答案 2 :(得分:3)

Sargon源代码现在在CP / M仿真器上运行。 Here is the source ported from Wavemate Jupiter III to CP/M

A CPM emulator is available here

要组装源,您需要TDL ZASM和TDL Linker。 They are available here.

在MS-Windows控制台窗口中创建Sargon的命令是:

cpm ZASM_TDL sargon

cpm tdl-link sargon

cpm sargon

答案 3 :(得分:2)

http://www.arrakis.es/~ninsesabe/pasmo/ “从版本0.5.0开始,还可以从Z80源生成8086代码,以二进制格式生成Ms-dos COM文件或CP / M 86 CMD格式。” Pasmo 0.6:“现在可以组装8080代码,或与Z80混合使用。”

答案 4 :(得分:1)

似乎有一个商业8080到8086的翻译器作为包here的一部分提供。

答案 5 :(得分:1)

Trivia:8086指令集专门设计用于从8080轻松转换。例如,这就是SAHF / LAHF指令所源自的地方。

答案 6 :(得分:1)

你能把Z80源组装成二进制吗?如果是这样,那么将二进制文件上的反汇编程序运行回“普通”Z80汇编程序。