emulation - 游戏男孩 : What constitutes a "half-carry"?

标签 emulation z80 gameboy

Game Boy Z80 CPU 有一个半进位标志,我似乎找不到太多关于何时设置/清除它的信息。

到目前为止我所理解的是,任何 8 位加、减、移位或旋转操作(可能还有其他操作?)将其设置为结果的第 4 位(?),并且 DAA 指令以某种方式设置/使用它。我不确定 16 位指令如何影响它以及它是否受到某些寄存器的使用的影响。

最佳答案

它是从第 3 位到第 4 位的进位,就像正常的进位标志记录从第 7 位进位一样。所以,例如在加法中获得半进位:

((a&0xf) + (value&0xf))&0x10

如果应设置半进位,则为 0x10,否则为 0。自然而然地从其他相关操作中获得一半进位——问题是从低位到高位是否有进位。

从正确的角度来看,z80 有一个 4 位 ALU,并通过执行两个 4 位操作来执行 8 位操作。所以它很自然地得到一半进位,作为中间结果。

DAA 对该标志感兴趣,因为如果设置了半进位,那么在低半字节中添加了加起来超过 16 的两位数字;这将正确地产生进位到高半字节,但会使低半字节 6 比它应该产生的低,因为在 10 之间还有六个值,当它应该产生进位时,16,当它产生时。

关于emulation - 游戏男孩 : What constitutes a "half-carry"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8868396/

相关文章:

android - Android 模拟器中的 WebView 加载页面但不显示内容

android - 如何将终端与 Android 模拟器连接

c# - 模拟硬件设备

android - 如何从 VS Android 模拟器连接到本地主机

c - 用于在线处理器仿真器 (Z80) 的算法和/或模式

math - Z80 上的溢出和进位标志

assembly - 什么是机器周期?

assembly - Gameboy〜Z80处理器中指令LD A,(C)的长度

cpu - Z80 'Game Boy' CPU是8位还是16位?