diff --git a/frontends/sdl/src/main.rs b/frontends/sdl/src/main.rs
index 6e51071513fc53e243cea2930d2bb01bde721cc7..d0b54912ad7ac87596644530d3cec9970f6d770f 100644
--- a/frontends/sdl/src/main.rs
+++ b/frontends/sdl/src/main.rs
@@ -203,7 +203,10 @@ impl Emulator {
 
     pub fn load_rom(&mut self, path: Option<&str>) {
         let path_res = path.unwrap_or(&self.rom_path);
-        let rom = self.system.load_rom_file(path_res);
+        let rom = self.system.load_rom_file(
+            path_res,
+            Some("C:/repo.other/boytacean/res/roms.prop/super_mario_2.sav"),
+        );
         println!(
             "========= Cartridge =========\n{}\n=============================",
             rom
diff --git a/src/gb.rs b/src/gb.rs
index 87b2379fa0412c2186a5e3b463fc3c05904f5778..6fc26c29b703350c6e19d091def5b403f1bfd118 100644
--- a/src/gb.rs
+++ b/src/gb.rs
@@ -642,7 +642,7 @@ impl GameBoy {
     }
 
     pub fn set_ram_data(&mut self, ram_data: Vec<u8>) {
-        self.mmu().rom().set_ram_data(ram_data)
+        self.mmu().rom().set_ram_data(&ram_data)
     }
 
     pub fn registers(&mut self) -> Registers {
@@ -974,15 +974,25 @@ impl GameBoy {
         self.load_boot_file(BootRom::Cgb);
     }
 
-    pub fn load_rom(&mut self, data: &[u8]) -> &mut Cartridge {
-        let rom = Cartridge::from_data(data);
+    pub fn load_rom(&mut self, data: &[u8], ram_data: Option<&[u8]>) -> &mut Cartridge {
+        let mut rom = Cartridge::from_data(data);
+        match ram_data {
+            Some(ram_data) => rom.set_ram_data(ram_data),
+            None => (),
+        }
         self.mmu().set_rom(rom);
         self.mmu().rom()
     }
 
-    pub fn load_rom_file(&mut self, path: &str) -> &mut Cartridge {
+    pub fn load_rom_file(&mut self, path: &str, ram_path: Option<&str>) -> &mut Cartridge {
         let data = read_file(path);
-        self.load_rom(&data)
+        match ram_path {
+            Some(ram_path) => {
+                let ram_data = read_file(ram_path);
+                self.load_rom(&data, Some(&ram_data))
+            }
+            None => self.load_rom(&data, None),
+        }
     }
 
     pub fn attach_serial(&mut self, device: Box<dyn SerialDevice>) {
diff --git a/src/rom.rs b/src/rom.rs
index 90d0545d79e229ef11f8b7771710a8d63082443b..f793667fa3d84c9f5c63627effbd6ae50f3a08e6 100644
--- a/src/rom.rs
+++ b/src/rom.rs
@@ -587,12 +587,16 @@ impl Cartridge {
         )
     }
 
+    pub fn rom_data_eager(&self) -> Vec<u8> {
+        self.rom_data.clone()
+    }
+
     pub fn ram_data_eager(&self) -> Vec<u8> {
         self.ram_data.clone()
     }
 
-    pub fn set_ram_data(&mut self, ram_data: Vec<u8>) {
-        self.ram_data = ram_data;
+    pub fn set_ram_data(&mut self, data: &[u8]) {
+        self.ram_data = data.to_vec();
     }
 
     pub fn description(&self, column_length: usize) -> String {
diff --git a/src/test.rs b/src/test.rs
index 43f4ab89ff59b349ed930df205036c2ff9dfe67e..ff38d784b70cb9379c89a7adf2e09d2b0b844ab0 100644
--- a/src/test.rs
+++ b/src/test.rs
@@ -30,7 +30,7 @@ pub fn run_test(rom_path: &str, max_cycles: Option<u64>, options: TestOptions) -
     let max_cycles = max_cycles.unwrap_or(u64::MAX);
 
     let mut game_boy = build_test(options);
-    game_boy.load_rom_file(rom_path);
+    game_boy.load_rom_file(rom_path, None);
 
     loop {
         cycles += game_boy.clock() as u64;