mirror of
https://github.com/gopher64/gopher64.git
synced 2026-07-11 01:25:20 +02:00
Don't save timestamp to GB save (#860)
* use real time for GB RTC * more * more * more
This commit is contained in:
@@ -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(×tamp.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 {
|
||||
|
||||
Reference in New Issue
Block a user