Skip to content
Snippets Groups Projects
gb.rs 1.26 KiB
Newer Older
  • Learn to ignore specific revisions
  • use crate::{
        cpu::Cpu,
        mmu::Mmu,
        ppu::{Ppu, FRAME_BUFFER_SIZE},
        util::read_file,
    };
    
    
    pub struct GameBoy {
        cpu: Cpu,
    }
    
    impl GameBoy {
        pub fn new() -> GameBoy {
    
            let ppu = Ppu::new();
            let mmu = Mmu::new(ppu);
    
            let cpu = Cpu::new(mmu);
            GameBoy { cpu: cpu }
        }
    
    
        pub fn clock(&mut self) -> u8 {
    
            let cycles = self.cpu_clock();
            self.ppu_clock(cycles);
            cycles
        }
    
        pub fn cpu_clock(&mut self) -> u8 {
    
        pub fn ppu_clock(&mut self, cycles: u8) {
            self.ppu().clock(cycles)
        }
    
    
        pub fn cpu(&mut self) -> &mut Cpu {
            &mut self.cpu
    
        pub fn mmu(&mut self) -> &mut Mmu {
    
            self.cpu.mmu()
        }
    
    
        pub fn ppu(&mut self) -> &mut Ppu {
            self.cpu.ppu()
    
        pub fn frame_buffer(&mut self) -> &Box<[u8; FRAME_BUFFER_SIZE]> {
    
            &(self.ppu().frame_buffer)
        }
    
    
        pub fn load_rom(&mut self, path: &str) {
            let data = read_file(path);
            self.cpu.mmu().write_rom(0x0000, &data);
        }
    
    
        pub fn load_boot(&mut self, path: &str) {
            let data = read_file(path);
    
            self.cpu.mmu().write_boot(0x0000, &data);
    
        }
    
        pub fn load_boot_default(&mut self) {
    
            self.load_boot("./res/dmg_rom.bin");