This commit is contained in:
Logan McNaughton
2023-10-11 10:36:06 -06:00
parent 3d94f14c5b
commit 010e0f3fd8
4 changed files with 20 additions and 3 deletions
+1 -2
View File
@@ -71,8 +71,7 @@ pub fn do_dma(device: &mut device::Device) {
device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + device.ai.fifo[0].duration,
dma_event,
);
device::mi::set_rcp_interrupt(device, device::mi::MI_INTR_AI);
device::mi::schedule_rcp_interrupt(device, device::mi::MI_INTR_AI);
}
pub fn fifo_push(device: &mut device::Device) {
+1
View File
@@ -8,6 +8,7 @@ pub enum EventType {
PI,
DP,
SP,
InterruptCheck,
SPDma,
Compare,
EventTypeCount,
+17
View File
@@ -163,6 +163,23 @@ pub fn set_rcp_interrupt(device: &mut device::Device, interrupt: u32) {
device::exceptions::check_pending_interrupts(device)
}
pub fn schedule_rcp_interrupt(device: &mut device::Device, interrupt: u32) {
device.mi.regs[MI_INTR_REG as usize] |= interrupt;
if device.mi.regs[MI_INTR_REG as usize] & device.mi.regs[MI_INTR_MASK_REG as usize] != 0 {
device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] &=
!device::cop0::COP0_CAUSE_EXCCODE_MASK;
device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] |= device::cop0::COP0_CAUSE_IP2;
}
device::events::create_event(
device,
device::events::EventType::InterruptCheck,
device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize],
device::exceptions::check_pending_interrupts,
)
}
pub fn init(device: &mut device::Device) {
device.mi.regs[MI_VERSION_REG as usize] = 0x02020102
}
+1 -1
View File
@@ -332,7 +332,7 @@ pub fn update_sp_status(device: &mut device::Device, w: u32) {
}
/* set SP interrupt */
if (w & SP_SET_INTR) != 0 && (w & SP_CLR_INTR) == 0 {
device::mi::set_rcp_interrupt(device, device::mi::MI_INTR_SP)
device::mi::schedule_rcp_interrupt(device, device::mi::MI_INTR_SP);
}
/* clear / set single step */