diff --git a/cpu/decoder.cpp b/cpu/decoder.cpp index 640e714..0a599e0 100644 --- a/cpu/decoder.cpp +++ b/cpu/decoder.cpp @@ -455,6 +455,18 @@ void Cpu::executeInstruction() state.IME = IME_SCHEDULED; break; + case 0xE8: // ADD SP, e8 + u32 lhs = state.SP; + s32 rhs = (s8)readPC8(); + u32 low_add = (lhs & 0x0FFF) + (rhs & 0x0FFF); + state.halfcarry = (low_add & 0x1000); + u32 res32 = lhs + rhs; + state.carry = (res32 & 0x10000); + state.SP = (u16)res32; + state.subtract = false; + state.zero = false; + mcycles = 4; + default: panic("Unknown opcode 0x%x\n",op); }