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

时间:2011-03-01 19:55:21

标签: assembly z80 gameboy

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

如此处所示:http://www.pastraiser.com/cpu/gameboy/gameboy_opcodes.html SP + e的总和影响半携带和携带标志,因此您应该检查是否从第3位到第4位以及第7位到第8位(从0开始!)