feat(serial): retain disconnected external-clock requests

This commit is contained in:
0xrsydn 2026-10-07 03:58:04 +07:00
commit d329c76dc3
9 changed files with 299 additions and 22 deletions

View file

@ -288,6 +288,28 @@ fn serial_sound_reset_flags_are_selective_and_all_devices_return() {
}
}
#[test]
fn serial_reset_cancels_an_external_clock_request_only_when_selected() {
use gba_core::io::{RCNT, SIOCNT};
for thumb in [false, true] {
for flags in [0, 0x20, 0x40, 0x80, 0xff] {
let (mut m, pc) = prepare(flags, thumb, 0x1f);
m.memory_mut().write16(RCNT, 0).unwrap();
m.memory_mut().write16(SIOCNT, 0x5080).unwrap();
complete(&mut m, pc);
assert_eq!(
m.memory().read16(SIOCNT).unwrap(),
if flags & 0x20 != 0 { 4 } else { 0x5084 }
);
assert_eq!(
m.memory().read8(RCNT + 1).unwrap(),
if flags & 0x20 != 0 { 0x80 } else { 0 }
);
assert_eq!(m.memory().read16(IF).unwrap() & 0x80, 0);
}
}
}
#[test]
fn caller_registers_flags_modes_and_interrupt_masks_are_preserved() {
for thumb in [false, true] {