diff --git a/src/main.rs b/src/main.rs
index cf55c7c..ae2a283 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -83,9 +83,10 @@ impl Memory {
                 // todo - switchable rom banks
                 if self.bootrom_enabled && (address as usize) < self.bootrom.len() {
                     return self.bootrom[address as usize];
-                }
+                } else {
                 return self.rom[address as usize];
             }
+            }
             0x8000..0xA000 => {
                 return self.vram[(address - 0x8000) as usize];
             }
@@ -169,6 +170,7 @@ impl Memory {
     }
 }
 
+#[derive(Clone, Copy)]
 pub struct State {
     af: Register,
     bc: Register,
@@ -208,6 +210,7 @@ fn main() {
         last_instruction: 0x0,
         last_instruction_addr: 0x0,
     };
+    cpu_ram_init(&mut cpu);
     #[allow(unused_variables)]
     let mut cycle_num = 0;
     match args.step_by {
@@ -253,3 +256,25 @@ fn print_cycles(cycles: &i32) {
     );
     stdout().flush().unwrap();
 }
+
+fn cpu_ram_init(cpu: &mut CPU) {
+    cpu.memory.set(0xFF10, 0x80);
+    cpu.memory.set(0xFF11, 0xBF);
+    cpu.memory.set(0xFF12, 0xF3);
+    cpu.memory.set(0xFF14, 0xBF);
+    cpu.memory.set(0xFF16, 0x3F);
+    cpu.memory.set(0xFF19, 0xBF);
+    cpu.memory.set(0xFF1A, 0x7F);
+    cpu.memory.set(0xFF1B, 0xFF);
+    cpu.memory.set(0xFF1C, 0x9F);
+    cpu.memory.set(0xFF1E, 0xBF);
+    cpu.memory.set(0xFF20, 0xFF);
+    cpu.memory.set(0xFF23, 0xBF);
+    cpu.memory.set(0xFF24, 0x77);
+    cpu.memory.set(0xFF25, 0xF3);
+    cpu.memory.set(0xFF26, 0xF1);
+    cpu.memory.set(0xFF40, 0x91);
+    cpu.memory.set(0xFF47, 0xFC);
+    cpu.memory.set(0xFF48, 0xFF);
+    cpu.memory.set(0xFF49, 0xFF);
+}