From 89dfeeeb2d47f50360993057d36048cc2dfa748c Mon Sep 17 00:00:00 2001 From: Simon Gellis Date: Sun, 3 Aug 2025 18:42:19 -0400 Subject: [PATCH] Randomize SRAM when first created --- Cargo.lock | 1 + Cargo.toml | 1 + src/emulator.rs | 18 +++++++++++++++--- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index af16434..398d7ac 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1842,6 +1842,7 @@ dependencies = [ "num-traits", "oneshot", "pollster", + "rand 0.9.2", "rfd", "rtrb", "rubato", diff --git a/Cargo.toml b/Cargo.toml index 7e66489..022d750 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -30,6 +30,7 @@ num-derive = "0.4" num-traits = "0.2" oneshot = "0.1" pollster = "0.4" +rand = "0.9" rfd = { version = "0.15", default-features = false, features = ["xdg-portal", "async-std"]} rtrb = "0.3" rubato = "0.16" diff --git a/src/emulator.rs b/src/emulator.rs index 9c55d06..55019ec 100644 --- a/src/emulator.rs +++ b/src/emulator.rs @@ -16,6 +16,7 @@ use anyhow::Result; use atomic::Atomic; use bytemuck::NoUninit; use egui_notify::Toast; +use rand::Rng; use tracing::{error, warn}; use crate::{ @@ -78,10 +79,21 @@ impl Cart { .create(true) .truncate(false) .open(sram_path(rom_path, sim_id))?; - sram_file.set_len(8 * 1024)?; - let mut sram = vec![]; - sram_file.read_to_end(&mut sram)?; + let sram = if sram_file.metadata()?.len() == 0 { + // new SRAM file, randomize the contents + let mut sram = vec![0; 8 * 1024]; + let mut rng = rand::rng(); + for dst in sram.iter_mut().step_by(2) { + *dst = rng.random(); + } + sram + } else { + let mut sram = Vec::with_capacity(8 * 1024); + sram_file.read_to_end(&mut sram)?; + sram + }; + Ok(Cart { rom_path: rom_path.to_path_buf(), rom,