gboxide 0.2.2

A GameBoy Emulator written in Rust
Documentation
pub mod cpu;
pub mod registers;
pub mod mmu;
pub mod interrupt;
pub mod timer;
pub mod lcd;
pub mod joypad;

use std::error::Error;

use crate::cartridge::Cartridge;
use crate::gameboy;

pub struct GameBoy {
    cpu: gameboy::cpu::CPU,
    mmu: gameboy::mmu::MMU,
}

impl GameBoy {
    pub fn new(cartridge: Cartridge) -> GameBoy {
        println!("{:#?}", cartridge.header);
        println!("read_rom_size: {}", cartridge.rom_len());

        let cpu = gameboy::cpu::CPU::new();
        let mmu = gameboy::mmu::MMU::new(cartridge);

        GameBoy { cpu, mmu }
    }

    pub fn set_controls(&mut self, controls: joypad::Controls) {
        self.mmu.joypad.set_from_controls(controls, &mut self.mmu.interrupt);
    }

    pub fn draw_frame(&self, frame: &mut [u8]) {
        frame.clone_from_slice(self.mmu.lcd.get_frame());
    }

    pub fn run_to_vblank(&mut self) -> Result<(), Box<dyn Error>> {
        self.cpu.run_to_vblank(&mut self.mmu)?;

        Ok(())
    }

    pub fn run_forever(&mut self) -> Result<(), Box<dyn Error>> {
        self.cpu.run_forever(&mut self.mmu)?;

        Ok(())
    }
}