diff --git a/src/gb.rs b/src/gb.rs
index 0d1da401e7d5accbad188be162a40ba3fbd203ad..cf4dd195cdfe4eac0490656e612b35f80072625c 100644
--- a/src/gb.rs
+++ b/src/gb.rs
@@ -1,8 +1,14 @@
-use std::{cell::RefCell, rc::Rc};
-
-use crate::{cpu::Cpu, mmu::Mmu, ppu::Ppu, util::read_file};
-
-pub type SharedMut<T> = Rc<RefCell<T>>;
+use std::{
+    cell::RefCell,
+    rc::{Rc, Weak},
+};
+
+use crate::{
+    cpu::Cpu,
+    mmu::Mmu,
+    ppu::Ppu,
+    util::{read_file, SharedMut},
+};
 
 pub struct GameBoy {
     cpu: Cpu,
@@ -24,6 +30,14 @@ impl GameBoy {
         &self.cpu
     }
 
+    pub fn mmu(&mut self) -> &Mmu {
+        self.cpu.mmu()
+    }
+
+    pub fn ppu(&mut self) -> &Ppu {
+        self.mmu().ppu()
+    }
+
     pub fn load_boot(&mut self, path: &str) {
         let data = read_file(path);
         self.cpu.mmu().write_boot(0x0000, &data);
diff --git a/src/mmu.rs b/src/mmu.rs
index 23e74f4a5075f43faca14b58aecf7d6637924f50..ad8bbacaf070ae39fc1b1fbafc2d0288558e16dd 100644
--- a/src/mmu.rs
+++ b/src/mmu.rs
@@ -29,6 +29,10 @@ impl Mmu {
         }
     }
 
+    pub fn ppu(&self) -> &Ppu {
+        &self.ppu
+    }
+
     pub fn read(&self, addr: u16) -> u8 {
         match addr & 0xf000 {
             // BIOS
@@ -45,8 +49,9 @@ impl Mmu {
                 if self.boot_active {
                     if addr < 0x0100 {
                         return self.boot[addr as usize];
-                    }
-                    //else if self @todo implementar isto
+                    } /*  else if self.cpu.as_ref().unwrap().borrow().pc() == 0x0100 {
+                          self.boot_active = false;
+                      }*/
                 }
                 self.rom[addr as usize]
             }