diff --git a/src/mmu.rs b/src/mmu.rs
index ad8bbacaf070ae39fc1b1fbafc2d0288558e16dd..1648e9f8485a82782a3adb439067fccd63fe786f 100644
--- a/src/mmu.rs
+++ b/src/mmu.rs
@@ -33,25 +33,17 @@ impl Mmu {
         &self.ppu
     }
 
-    pub fn read(&self, addr: u16) -> u8 {
+    pub fn read(&mut self, addr: u16) -> u8 {
         match addr & 0xf000 {
             // BIOS
             0x0000 => {
-                //@todo we still need to control if we're reading from boot
-                // if(MMU._inboot)
-                // {
-                // if(addr < 0x0100)
-                // return MMU._boot[addr];
-                // else if(Z80._r.pc == 0x0100)
-                // MMU._inboot = 0;
-                //}
-                //return MMU._rom[addr];
-                if self.boot_active {
-                    if addr < 0x0100 {
-                        return self.boot[addr as usize];
-                    } /*  else if self.cpu.as_ref().unwrap().borrow().pc() == 0x0100 {
-                          self.boot_active = false;
-                      }*/
+                // in case the boot mode is active and the
+                // address is withing boot memory reads from it
+                if self.boot_active && addr <= 0x00fe {
+                    if addr == 0x00fe {
+                        self.boot_active = false;
+                    }
+                    return self.boot[addr as usize];
                 }
                 self.rom[addr as usize]
             }