cpu/cpu - Handle halt mode
This commit is contained in:
parent
077f834c28
commit
5cabe03d25
2 changed files with 12 additions and 1 deletions
11
cpu/cpu.cpp
11
cpu/cpu.cpp
|
@ -56,7 +56,10 @@ void Cpu::step()
|
|||
{
|
||||
if(!handleInterrupts()) // if no isr has been called, decode an instruction
|
||||
{
|
||||
executeInstruction();
|
||||
if (halted)
|
||||
processed_mcycles += 4;
|
||||
else
|
||||
executeInstruction();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -77,6 +80,8 @@ void Cpu::reset()
|
|||
state.IME = IME_OFF;
|
||||
state.IE = 0;
|
||||
state.IF = 0;
|
||||
|
||||
halted = false;
|
||||
}
|
||||
|
||||
u8 Cpu::readPC8()
|
||||
|
@ -225,6 +230,10 @@ bool Cpu::handleInterrupts()
|
|||
// servicable interrupts (assuming IME is on)
|
||||
u8 si = state.IE & state.IF & INT_MASK;
|
||||
|
||||
// Once there's an interrupt we exit halt mode
|
||||
if (si)
|
||||
halted = false;
|
||||
|
||||
if (state.IME == IME_SCHEDULED)
|
||||
state.IME = IME_ON;
|
||||
else if (state.IME == IME_ON && si != 0)
|
||||
|
|
|
@ -91,6 +91,8 @@ struct Cpu_state {
|
|||
u8 IE;
|
||||
u8 IF;
|
||||
|
||||
bool halted;
|
||||
|
||||
void setAF(u16 v);
|
||||
u16 getAF();
|
||||
|
||||
|
|
Loading…
Reference in a new issue