在 Gameboy Z80 上,究竟如何LD HL,(SP+e)
操作影响 H 和 C 标志吗? (半进位+进位)
参考:http://www.devrs.com/gb/files/opcodes.html
我意识到这是一个老问题,但我不久前遇到了类似的问题,只想添加我的解决方案,因为据我所知,绝对没有文档或开源模拟器可以正确执行此操作。我在真正的游戏机上进行了一些实际调试来找到解决方案。
对于 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)