GBZ80:LD HL,(SP + e)如何影响H和C标志?

Joh*_*ski 6 assembly z80 gameboy

在Gameboy Z80上,LD HL,(SP+e)操作究竟如何影响H和C标志?(半携带+携带)

参考:http://www.devrs.com/gb/files/opcodes.html

Fas*_*cia 13

我意识到这是一个老问题,但我前一段时间遇到了类似的问题,并且只想添加我的解决方案,因为绝对没有文档或开源模拟器能够正确地知道我的知识.给我一个真正的游戏男孩的实际调试找到解决方案.

对于16位SP + s8(立即签名)操作:

如果从第7位到第8位有溢出,则置位进位标志.

如果从第3位到第4位有溢出,则设置半进位标志.

我发现对正面和负面签名的立即(Lua)分别执行此操作更容易:

local D8 = self:Read(self.PC+1)
local S8 = ((D8&127)-(D8&128))
local SP = self.SP + S8 

if S8 >= 0 then
    self.Cf = ( (self.SP & 0xFF) + ( S8 ) ) > 0xFF
    self.Hf = ( (self.SP & 0xF) + ( S8 & 0xF ) ) > 0xF
else
    self.Cf = (SP & 0xFF) <= (self.SP & 0xFF)
    self.Hf = (SP & 0xF) <= (self.SP & 0xF)
end
Run Code Online (Sandbox Code Playgroud)