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

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/

相关文章:

web-services - 我收到错误 “Server Application Unavailab

module - verilog 看不到我的功能

compiler-errors - 访问冲突写入位置…可能是由mpi_get_processor_n

c# - 错误: An object reference is required for the n

inheritance - TypeScript 模块引用

r - R中仅Unix的软件包错误

c++ - 获取CUDA错误 “declaration is incompatible with p

vb.net - 未定义类型 'CrystalDecisions.CrystalReports.En

scala - 卡在类型不匹配

class - 在 VBA 中设置类时编译错误