Fix MBC3 latch (#987)

* Fix MBC3 latch

* more
This commit is contained in:
Logan McNaughton 2026-05-30 09:43:22 +02:00 committed by GitHub
parent 24e5a3fac4
commit 399b5d65e5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 7 additions and 21 deletions

View File

@ -19,7 +19,6 @@ pub struct GbCart {
pub mbc1_mode: bool,
pub ram_bank: u16,
pub rom_bank: u32,
pub latch: bool,
pub rtc_regs: [u8; MBC3_RTC_REGS_COUNT],
pub rtc_regs_latch: [u8; MBC3_RTC_REGS_COUNT],
pub last_elapsed_time: i64,
@ -255,12 +254,9 @@ fn write_mbc3(
} else if address < 0x6000 {
cart.ram_bank = (value & 0xf) as u16;
} else if address < 0x8000 {
if cart.cart_type == CartType::MBC3RamBattRtc {
if !cart.latch && (value & 0x1) != 0 {
update_rtc_regs(cart, elapsed_time);
cart.rtc_regs_latch = cart.rtc_regs;
}
cart.latch = (value & 0x1) != 0;
if cart.cart_type == CartType::MBC3RamBattRtc && (value & 0x1) != 0 {
update_rtc_regs(cart, elapsed_time);
cart.rtc_regs_latch = cart.rtc_regs;
}
} else if (0xa000..0xc000).contains(&address) {
if !cart.ram_enabled {
@ -284,7 +280,6 @@ fn read_mbc3(
address: u16,
data: usize,
size: usize,
elapsed_time: i64,
) {
if address < 0x4000 {
let banked_address = address & 0x3FFF;
@ -309,15 +304,8 @@ fn read_mbc3(
.unwrap_or(&vec![0; size]),
);
} else if cart.cart_type == CartType::MBC3RamBattRtc {
if cart.latch {
for i in 0..size {
pif_ram[data + i] = cart.rtc_regs_latch[cart.ram_bank as usize - 0x8];
}
} else {
update_rtc_regs(cart, elapsed_time);
for i in 0..size {
pif_ram[data + i] = cart.rtc_regs[cart.ram_bank as usize - 0x8];
}
for i in 0..size {
pif_ram[data + i] = cart.rtc_regs_latch[cart.ram_bank as usize - 0x8];
}
}
} else {
@ -395,7 +383,6 @@ pub fn read(
address: u16,
data: usize,
size: usize,
elapsed_time: i64,
) {
if !cart.enabled {
for i in 0..size {
@ -405,8 +392,8 @@ pub fn read(
}
match cart.cart_type {
CartType::MBC1RamBatt => read_mbc1(pif_ram, cart, address, data, size),
CartType::MBC3RamBatt => read_mbc3(pif_ram, cart, address, data, size, elapsed_time),
CartType::MBC3RamBattRtc => read_mbc3(pif_ram, cart, address, data, size, elapsed_time),
CartType::MBC3RamBatt => read_mbc3(pif_ram, cart, address, data, size),
CartType::MBC3RamBattRtc => read_mbc3(pif_ram, cart, address, data, size),
CartType::MBC5RamBatt => read_mbc5(pif_ram, cart, address, data, size),
_ => panic!("Unsupported cart type"),
}

View File

@ -58,7 +58,6 @@ pub fn read(device: &mut device::Device, channel: usize, address: u16, data: usi
0x4000 * pak.bank + (address & 0x7fff) - 0x4000,
data,
size,
device.vi.elapsed_time as i64,
);
}
_ => {