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] }