minor tweak to interrupt system (#211)

This commit is contained in:
Logan McNaughton 2025-02-02 11:23:32 +01:00 committed by GitHub
parent 7d63a694cc
commit a7c2c26d78
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 6 additions and 2 deletions

View File

@ -196,6 +196,7 @@ impl Device {
regs: [0; cop0::COP0_REGS_COUNT as usize],
reg_write_masks: [0; cop0::COP0_REGS_COUNT as usize],
reg_latch: 0,
is_event: false,
pending_compare_interrupt: false,
instrs: [cop0::reserved; 32],
instrs2: [cop0::reserved; 32],

View File

@ -97,6 +97,7 @@ pub struct Cop0 {
pub tlb_lut_r: Vec<device::tlb::TlbLut>,
pub tlb_lut_w: Vec<device::tlb::TlbLut>,
pub tlb_entries: [device::tlb::TlbEntry; 32],
pub is_event: bool,
pub pending_compare_interrupt: bool,
}

View File

@ -53,7 +53,9 @@ pub fn trigger_event(device: &mut device::Device) {
device.cpu.events[next_event_name].enabled = false;
let handler = device.cpu.events[next_event_name].handler;
device.cpu.cop0.is_event = true;
handler(device);
device.cpu.cop0.is_event = false;
set_next_event(device);
}

View File

@ -30,7 +30,7 @@ pub fn check_pending_interrupts(device: &mut device::Device) {
return;
}
if device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] == device::cop0::COP0_CAUSE_IP7 {
if device.cpu.cop0.is_event {
interrupt_exception(device);
} else {
device::events::create_event(

View File

@ -116,7 +116,7 @@ pub fn play_audio(device: &mut device::Device, dram_addr: usize, length: u64) {
let min_latency = (device.ui.audio_freq * 0.02) * 4.0;
if audio_queued < min_latency {
let silence_buffer: Vec<u8> = vec![0; (min_latency - audio_queued) as usize & !3];
let silence_buffer: Vec<u8> = vec![0; min_latency as usize & !3];
if !unsafe {
sdl3_sys::audio::SDL_PutAudioStreamData(
device.ui.audio_stream,