Don't save timestamp to GB save (#860)

* use real time for GB RTC

* more

* more

* more
This commit is contained in:
Logan McNaughton
2026-05-09 15:12:20 +02:00
committed by GitHub
parent 2b72c24dbe
commit 55bf63210a
+7 -12
View File
@@ -22,8 +22,7 @@ pub struct GbCart {
pub latch: bool,
pub rtc_regs: [u8; MBC3_RTC_REGS_COUNT],
pub rtc_regs_latch: [u8; MBC3_RTC_REGS_COUNT],
pub rtc_timestamp: i64,
pub last_time: i64,
pub last_elapsed_time: i64,
}
#[derive(Default, Copy, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
@@ -43,14 +42,10 @@ pub fn init(gb_cart: &mut device::controller::gbcart::GbCart, rom: &[u8], ram: &
44 => {
offset = ram.len() - 44;
gb_cart.ram = ram[..ram.len() - 44].to_vec();
gb_cart.rtc_timestamp =
i32::from_le_bytes(ram[offset + 40..offset + 44].try_into().unwrap()) as i64;
}
48 => {
offset = ram.len() - 48;
gb_cart.ram = ram[..ram.len() - 48].to_vec();
gb_cart.rtc_timestamp =
i64::from_le_bytes(ram[offset + 40..offset + 48].try_into().unwrap());
}
_ => {
gb_cart.ram = ram.to_vec();
@@ -115,8 +110,8 @@ pub fn save(
f.write_all(&(gb_cart.rtc_regs_latch[MBC3_RTC_DAYS_H] as u32).to_le_bytes())
.unwrap();
let timestamp = gb_cart.rtc_timestamp.saturating_add(elapsed_time);
f.write_all(&timestamp.to_le_bytes()).unwrap();
let max = ((i32::MAX as i64) << 32) | (i32::MAX as i64);
f.write_all(&max.to_le_bytes()).unwrap();
f.flush().unwrap();
}
@@ -126,8 +121,8 @@ pub fn save(
}
fn update_rtc_regs(cart: &mut device::controller::gbcart::GbCart, elapsed_time: i64) {
let mut diff = elapsed_time - cart.last_time;
cart.last_time = elapsed_time;
let mut diff = elapsed_time - cart.last_elapsed_time;
cart.last_elapsed_time = elapsed_time;
if diff > 0 {
cart.rtc_regs[MBC3_RTC_SECONDS] += (diff % 60) as u8;
@@ -157,8 +152,8 @@ fn update_rtc_regs(cart: &mut device::controller::gbcart::GbCart, elapsed_time:
+ diff;
cart.rtc_regs[MBC3_RTC_DAYS_L] = (days & 0xff) as u8;
cart.rtc_regs[MBC3_RTC_DAYS_H] =
((cart.rtc_regs[MBC3_RTC_DAYS_H] & !0x01) as i64 | (days & 0x100)) as u8;
cart.rtc_regs[MBC3_RTC_DAYS_H] &= !0x01;
cart.rtc_regs[MBC3_RTC_DAYS_H] |= ((days >> 8) & 1) as u8;
/* set carry bit if days overflow */
if days > 511 {