Reset RSP steps on BREAK
This commit is contained in:
@@ -23,6 +23,7 @@ inline void special(MI& mi, Registers& regs, RSP& rsp, u32 instr) {
|
|||||||
case 0x09: rsp.jalr(instr); break;
|
case 0x09: rsp.jalr(instr); break;
|
||||||
case 0x0D:
|
case 0x0D:
|
||||||
rsp.spStatus.halt = true;
|
rsp.spStatus.halt = true;
|
||||||
|
rsp.steps = 0;
|
||||||
rsp.spStatus.broke = true;
|
rsp.spStatus.broke = true;
|
||||||
if(rsp.spStatus.interruptOnBreak) {
|
if(rsp.spStatus.interruptOnBreak) {
|
||||||
InterruptRaise(mi, regs, Interrupt::SP);
|
InterruptRaise(mi, regs, Interrupt::SP);
|
||||||
@@ -160,10 +161,14 @@ inline void cop0(Registers& regs, Mem& mem, u32 instr) {
|
|||||||
RSP& rsp = mmio.rsp;
|
RSP& rsp = mmio.rsp;
|
||||||
RDP& rdp = mmio.rdp;
|
RDP& rdp = mmio.rdp;
|
||||||
//util::print("Cop0 {:02X}\n", mask);
|
//util::print("Cop0 {:02X}\n", mask);
|
||||||
switch(mask) {
|
if((instr & 0x7FF) == 0) {
|
||||||
case 0x00: rsp.mfc0(rdp, instr); break;
|
switch (mask) {
|
||||||
case 0x04: rsp.mtc0(regs, mem, instr); break;
|
case 0x00: rsp.mfc0(rdp, instr); break;
|
||||||
default: util::panic("Unhandled RSP COP0 ({:05b})\n", mask);
|
case 0x04: rsp.mtc0(regs, mem, instr); break;
|
||||||
|
default: util::panic("Unhandled RSP COP0 ({:05b})\n", mask);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
util::panic("RSP COP0 unknown {:08X}\n", instr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user