7

LD HL,(SP+e)ゲームボーイZ80では、操作はHフラグとCフラグにどのように影響しますか?(ハーフキャリー+キャリー)

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

4

2 に答える 2

16

これは古い質問だと思いますが、しばらく前に同様の問題が発生しました。私の知る限り、それを正しく実行するドキュメントやオープンソースエミュレータがまったくないため、ソリューションを追加したいと思います。解決策を見つけるために、実際のゲームボーイで実際のデバッグを行いました。

両方の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
于 2011-08-31T17:47:20.837 に答える
1

ここに見られるように:http://www.pastraiser.com/cpu/gameboy/gameboy_opcodes.html SP + eの合計は、ハーフキャリーとキャリーフラグに影響するため、ビット3から4へのキャリーがあるかどうかを確認する必要があります。 7から8(0から開始!)

于 2011-03-26T00:03:10.160 に答える