问题标签 [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.

0 投票
2 回答
114 浏览

assembly - 汇编错误代码

我在使用 Z80 汇编代码时遇到了一些问题,也许你可以帮帮我。代码如下:

该代码应该将前 n 个整数相加,并且数字 n 将从顶部的内存区域中获取。谢谢您的帮助

0 投票
1 回答
2852 浏览

assembly - GameBoy ISA(编写模拟器)

我正在使用 C 语言开发 GameBoy 模拟器。现在我正在处理 CPU.c 文件,我对此处列出的一些指令感到有些困惑:

http://realboyemulator.files.wordpress.com/2013/01/gbcpuman.pdf

如果您参考上述 PDF 的第 66 页,并查看与 Opcode 0x7E - LD,R1,R2 对应的指令,我很好奇这个不是指令。

GB 有 8 个 8 位寄存器,A,B,C,D,E,F,H,L。16位寄存器可以通过连接两个来组成:AF,BC,DE,HL。

我对 Opcode 0x7E 感到困惑,因为它看起来像是试图将 16 位值 (HL) 存储到 8 位寄存器 (A) 中。

LD,A,(HL)

我误解了这份文件吗?有人可以解释为什么会存在这样的指令吗?它不能被 LD,A,L 代替吗?

0 投票
1 回答
992 浏览

cpu-registers - Z80 状态标志寄存器

对某些人来说,这很可能看起来是一个非常简单的问题,但是在查看以下寄存器模式时:

在此处输入图像描述

并考虑到“通用”标志寄存器是标志位的 8 位表示,我想知道:

'alternate' F' 寄存器是否总是指向完全相同的标志位,或者它是否可以以任何方式包含不同的字节(我知道备用寄存器不能直接访问,只能换入)。

换句话说,“通用”寄存器 F 内容的字节内容是否总是等于“备用”寄存器 F'(表示相同的唯一标志位 - 假设“交换备用寄存器”指令不会改变标志位)?

0 投票
2 回答
4390 浏览

cpu-registers - Z80 寄存器字节序

考虑这个示例代码:

正在执行以下操作:

  • 将 229(十进制)加载到寄存器 H
  • 将 90(十进制)加载到寄存器 L
  • 打印出 H、L 和 HL 寄存器的值(十六进制、二进制 MSB、十进制)
  • 将 23268(十进制)加载到寄存器 HL
  • 再次打印出 H、L 和 HL 寄存器的值。

样本输出:

现在的问题:

  1. 上述关于寄存器功能的假设(和示例输出)是否正确?
  2. 其他寄存器对(AF、BC、DE)的功能是否完全相同?
  3. 如果 1. 和 2. 的答案是肯定的,那么为什么 Z80 被认为是小端序?当 HL 寄存器内容被写入内存时,L 字节首先出现,但是(当随后按顺序读取它们时,字节肯定是大端序)?
0 投票
1 回答
2448 浏览

hex - 在 z80 汇编器中将 8 位数字转换为十六进制

我正在使用 z80 为 ZX Spectrum 编写游戏,但遇到了一点问题。我操纵了一个例程,将“a”寄存器中保存的数字转换为“de”中保存的十六进制值。我不确定如何转换另一种方式,EG 在 de 中传入一个十六进制值并将其转换为保存在“a”中的十进制值。

注意:以下例程将输入转换为表示值 0 到 F 的 ascii 值。例如,如果 a = 255,则 d =70 和 e = 70,因为“F”是 ascii 值 70。

任何人都可以建议一个解决方案来反向工作或提供更好的解决方案吗?

0 投票
2 回答
222 浏览

z80 - PutS 在 TI-84 Plus Silver 版上只显示一个字符

我最近发现我的 TI-84 plus 银版可以用十六进制编程。我一直在搞乱它,但有一些错误。每当我尝试对 PutS 进行 bcall 时,它只会打印一个字符并继续前进。如果我添加第二个 PutS 命令,它会将第二个字母向下和向右移动一个。我目前的代码是:

0 投票
2 回答
145 浏览

disassembly - How do I determine the start and end of instructions in an object file?

So, I've been trying to write an emulator, or at least understand how stuff works. I have a decent grasp of assembly, particularly z80 and x86, but I've never really understood how an object file (or in my case, a .gb ROM file) indicates the start and end of an instruction.

I'm trying to parse out the opcode for each instruction, but it occurred to me that it's not like there's a line break after every instruction. So how does this happen? To me, it just looks like a bunch of bytes, with no way to tell the difference between an opcode and its operands.

0 投票
1 回答
70 浏览

emulation - 如何将操作数作为字节值的寄存器?

到目前为止,我有一个相当简单的程序来开始我的仿真体验。我加载一条指令并确定有多少(如果有)操作数,然后我抓取这些操作数并使用它们。对于诸如跳转和推送之类的事情,在我到达寄存器之前它有点简单。我怎么知道操作数何时是寄存器?或者我如何判断它是否是地址处的而不仅仅是地址(即当他们使用类似的东西时ld (hl),a

我对仿真和所有的东西都比较陌生,但我在组装方面有相当多的经验,即使是 z80 也是如此。

问题

我如何区分寄存器的含义与地址的含义或地址的取消引用之间的区别?

0 投票
3 回答
2293 浏览

emulation - Game Boy:不修改任何内容(例如 AND A)的指令的目的是什么?

我一直在研究 Game Boy 模拟器,我注意到存在某些永远不会改变任何值的操作码,例如LD A, A,LD B, B等,还有AND A. 第一个显然不会改变任何东西,因为它们将寄存器的值加载到相同的寄存器中,并且由于AND正在与A寄存器进行比较,因此AND A将始终返回A。这些操作是否有任何目的,或者与NOP每个周期后基本相同?

0 投票
4 回答
1150 浏览

assembly - 汇编中的标签如何知道其运行时地址?

我正在学习汇编(z80 和 x86),现在开始使用汇编器来构建二进制文件。

如何使用具有绝对(而不是相对)地址的标签?

据我了解,汇编程序会在编译时将标签转换为内存地址,但是汇编程序如何知道标签在运行时将驻留在哪个地址

对于 z80 裸机系统来说,这似乎很简单,因为您可以将程序加载到特定的内存地址并发送RST将程序计数器指向的信号0000h当有操作系统运行时会发生什么

在操作系统中执行的代码不会不知道它的起始地址(因此无法在标签上使用非相对操作码)callret