diff --git a/Cargo.toml b/Cargo.toml index 5a2433c..6792ae2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,6 +25,7 @@ mimalloc = "0.1" regex = "1.11" tungstenite = "0.26" socket2 = "0.5" +postcard = { version = "1.1", features = ["use-std"] } clap = { version = "4.4", features = ["derive"] } [dependencies.reqwest] diff --git a/src/device/cart_rom.rs b/src/device/cart_rom.rs index 96afe9a..600461f 100644 --- a/src/device/cart_rom.rs +++ b/src/device/cart_rom.rs @@ -85,9 +85,8 @@ pub fn dma_read( device.rdram.mem[(dram_addr + i) as usize ^ device.byte_swap]; device.ui.saves.romsave.0.insert( - (cart_addr + i).to_string(), - serde_json::to_value(device.rdram.mem[(dram_addr + i) as usize ^ device.byte_swap]) - .unwrap(), + cart_addr + i, + device.rdram.mem[(dram_addr + i) as usize ^ device.byte_swap], ); } } @@ -139,8 +138,7 @@ pub fn load_rom_save(device: &mut device::Device) { return; } for (key, value) in device.ui.saves.romsave.0.iter() { - device.cart.rom[key.parse::().unwrap()] = - serde_json::from_value(value.clone()).unwrap() + device.cart.rom[*key as usize] = *value } } diff --git a/src/ui.rs b/src/ui.rs index 0fd4ac8..8e6c425 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -142,7 +142,7 @@ impl Ui { sram: (Vec::new(), false), flash: (Vec::new(), false), mempak: (Vec::new(), false), - romsave: (serde_json::Map::new(), false), + romsave: (std::collections::HashMap::new(), false), }, pak_audio: audio::PakAudio { mempak: include_bytes!("../data/mempak.wav").to_vec(), diff --git a/src/ui/storage.rs b/src/ui/storage.rs index ea3a561..8015726 100644 --- a/src/ui/storage.rs +++ b/src/ui/storage.rs @@ -27,7 +27,7 @@ pub struct Saves { pub sram: (Vec, bool), pub flash: (Vec, bool), pub mempak: (Vec, bool), - pub romsave: (serde_json::Map, bool), + pub romsave: (std::collections::HashMap, bool), } fn get_save_type(game_id: &str) -> Vec { @@ -142,7 +142,7 @@ pub fn load_saves(ui: &mut ui::Ui, netplay: &mut Option) { // can't do romsaves with the current netplay implementation let romsave = std::fs::read(&mut ui.paths.romsave_file_path); if romsave.is_ok() { - ui.saves.romsave.0 = serde_json::from_slice(romsave.unwrap().as_ref()).unwrap(); + ui.saves.romsave.0 = postcard::from_bytes(romsave.unwrap().as_ref()).unwrap(); } } } @@ -203,8 +203,8 @@ pub fn load_saves(ui: &mut ui::Ui, netplay: &mut Option) { } fn write_rom_save(ui: &ui::Ui) { - let f = std::fs::File::create(ui.paths.romsave_file_path.clone()).unwrap(); - serde_json::to_writer(f, &ui.saves.romsave.0).unwrap(); + let data = postcard::to_stdvec(&ui.saves.romsave.0).unwrap(); + std::fs::write(ui.paths.romsave_file_path.clone(), data).unwrap(); } pub fn write_saves(ui: &ui::Ui, netplay: &Option) {