问题标签 [z80]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
z80 - 您最喜欢的 ZX Spectrum 开发工具是什么?
你最喜欢的旧ZX Spectrum的汇编器、编译器、环境和解释器是什么?
assembly - 如何开始对 z80 机器代码进行逆向工程?
我有一个 .z80 内存转储。我如何对其进行逆向工程?我需要知道什么?我怎样才能最大限度地减少体力劳动?
c++ - 为什么 C/C++/rtl 中没有 Z80 之类的 LDIR 功能?
在 Z80 机器代码中,一种将缓冲区初始化为固定值的廉价技术,例如所有空白。所以一段代码可能看起来像这样。
结果是 DESTINATION 处的内存块完全被空白填充。我已经尝试过 memmove 和 memcpy,但无法复制这种行为。我希望 memmove 能够正确地做到这一点。
为什么 memmove 和 memcpy 会这样?
有没有合理的方法来做这种数组初始化?
我已经知道 char array[size] = {0} 用于数组初始化
我已经知道 memset 将为单个字符完成这项工作。
这个问题还有哪些其他方法?
c++ - 用 C 或 C++ 编写图形 Z80 仿真器
我想对为Z80处理器编写自己的简单仿真器感兴趣。我对这种类型的编程没有经验。我最擅长使用基于 C 的语言,因为它们是我最了解的语言。
我需要什么来完成这项工作,有哪些好的教程/参考资料可以帮助我完成这个项目?
我还想要一个为我的TI-84 Plus计算器编写 ROM 转储应用程序的教程,这样我就可以在这个模拟器中使用它的 ROM。
parsing - 编写 Z80 汇编器 - 对 ASM 进行词法分析并使用组合构建解析树?
我对编写汇编程序的概念非常陌生,即使在阅读了大量材料之后,我仍然难以理解几个概念。
将源文件实际分解为令牌的过程是什么?我相信这个过程被称为词法分析,我已经在高处和低处搜索了一个有意义的真实代码示例,但我找不到一个非常受欢迎的简单代码示例;)
解析时,信息是否需要向上或向下传递?我问的原因如下,采取:
LD BC, nn
标记化后需要变成下面的解析树(???)
现在,当遍历这棵树时,它需要产生以下机器代码:
如果指令是:
那么输出需要是:
这意味着它提出了一个问题,LD 节点是根据操作数返回不同的东西还是返回一些东西的操作数?这是如何实现的?如果时间允许,更简单的代码示例会更好。
bnf - Z80 ASM BNF 结构...我在正确的轨道上吗?
我正在尝试学习 BNF 并尝试组装一些 Z80 ASM 代码。由于我对这两个领域都是新手,所以我的问题是,我是否走在正确的轨道上?我正在尝试将 Z80 ASM 的格式编写为 EBNF,以便我可以找出从那里去哪里从源代码创建机器代码。目前我有以下内容:
如果我出错了,任何定向反馈都会非常好。
assembly - 我在哪里可以找到 8080 到 x86 汇编程序的转换工具?
编辑,好消息!
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 语言语义,例如我转换了这个;
对此;
我创建了与所需的所有 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 上,但它似乎是一个死的、反应迟钝的帐户。如果有人认识这些人或如何联系他们,请告诉我。
assembly - Z80 (TI-83+) 在 CALL 上停止工作
每次我为 TI-83+ 计算器(Z80 处理器)组装应用程序时,它都会在 CALL 处停止运行。这是一个示例(“Hello”)——它开始运行得很好,但计算器在 CALL 指令处冻结。我在 CALL 之前放置的任何东西都可以正常工作,而我在 CALL 之后放置的任何东西都不会运行。这是代码的反汇编,以显示地址而不是标签。我已经“修改”以显示那些落入的数据库行,以使其更易于阅读。
我在编写程序集“程序”(加载到 RAM 中)时从来没有遇到过这个问题。我所知道的运行“应用程序”(保存在 Flash ROM 中)的唯一问题是它们不能自我修改,而且因为分页是必要的,所以不可能在单独的页面上访问数据。这不是自我修改,只有一页......我做错了什么?
assembly - Z80:如何添加 16 位和 8 位寄存器?
如何添加一个 16 位和一个 8 位的带进位寄存器(例如 HL 和 A)?