aboutsummaryrefslogtreecommitdiff
path: root/src/desktop/load_save.rs
diff options
context:
space:
mode:
authorAstatin <[email protected]>2025-04-03 18:35:03 +0200
committerAstatin <[email protected]>2025-04-03 18:35:03 +0200
commit9a8e4117be8d30109229600346e7d9561c52a3e3 (patch)
tree6d2531b675e609d3d5d734732f1328769dddf557 /src/desktop/load_save.rs
parentc1fb610e198d785aa57440b86c69587e5caaf563 (diff)
Separate core from desktop target
Diffstat (limited to 'src/desktop/load_save.rs')
-rw-r--r--src/desktop/load_save.rs69
1 files changed, 69 insertions, 0 deletions
diff --git a/src/desktop/load_save.rs b/src/desktop/load_save.rs
new file mode 100644
index 0000000..dfe2083
--- /dev/null
+++ b/src/desktop/load_save.rs
@@ -0,0 +1,69 @@
+use std::fs::File;
+use std::io::{Write, Read};
+use crate::io::LoadSave;
+
+pub struct FSLoadSave {
+ rom_file: String,
+ save_file: String,
+}
+
+impl FSLoadSave {
+ pub fn new(rom_file: impl Into<String>, save_file: impl Into<String>) -> Self {
+ Self {
+ rom_file: rom_file.into(),
+ save_file: save_file.into(),
+ }
+ }
+}
+
+impl LoadSave for FSLoadSave {
+ type Error = std::io::Error;
+
+ fn load_rom(&self, rom: &mut [u8]) -> Result<(), std::io::Error> {
+ let mut f = File::open(&self.rom_file)?;
+
+ f.read(rom)?;
+
+ return Ok(());
+ }
+
+ fn load_bootrom(&self, boot_rom: &mut [u8]) -> Result<(), std::io::Error> {
+ println!("MBC: {:02x}", boot_rom[0x147]);
+ println!("CGB: {:02x}", boot_rom[0x143]);
+
+ if boot_rom[0x143] == 0x80 || boot_rom[0x143] == 0xc0 {
+ unimplemented!("CGB Boot rom is not implemented");
+ // let bytes = include_bytes!("../assets/cgb_boot.bin");
+
+ // self.boot_rom[..0x900].copy_from_slice(bytes);
+ // self.cgb_mode = true;
+ // self.display.cgb_mode = true;
+ } else {
+ let bytes = include_bytes!("../../assets/dmg_boot.bin");
+
+ boot_rom[..0x100].copy_from_slice(bytes);
+ }
+
+ Ok(())
+ }
+
+ fn load_external_ram(&self, external_ram: &mut [u8]) -> Result<(), std::io::Error> {
+ let mut f = File::open(&self.save_file)?;
+
+ f.read(external_ram)?;
+
+ println!("Save file loaded from \"{}\"!", self.save_file);
+
+ Ok(())
+ }
+
+ fn save_external_ram(&self, external_ram: &[u8]) -> Result<(), std::io::Error> {
+ let mut f = File::create(&self.save_file)?;
+
+ f.write_all(&external_ram)?;
+
+ println!("Save written to \"{}\"!", self.save_file);
+
+ Ok(())
+ }
+}