diff --git a/src/mmu.rs b/src/mmu.rs index 853d19cda8370a676d43cee7853b28c37e73bb4a..15df0604e16dcc473c1051ad6aaf94b4d53e4570 100644 --- a/src/mmu.rs +++ b/src/mmu.rs @@ -1,4 +1,4 @@ -use crate::{pad::Pad, ppu::Ppu, timer::Timer}; +use crate::{pad::Pad, ppu::Ppu, timer::Timer, rom::Rom}; pub const BIOS_SIZE: usize = 256; pub const ROM_SIZE: usize = 32768; @@ -251,6 +251,7 @@ impl Mmu { } struct Mbc1 { + rom: Rom, rom_bank: u8, } diff --git a/src/rom.rs b/src/rom.rs index d9b2a25beb7873d8a57928b164b7500e735ccaf7..279480fdd1dc7ab0120233b0b17f0f0a45e2281f 100644 --- a/src/rom.rs +++ b/src/rom.rs @@ -1,6 +1,8 @@ use core::fmt; use std::fmt::{Display, Formatter}; +pub const BANK_SIZE: usize = 16384; + pub struct Rom { data: Vec<u8>, } @@ -84,6 +86,12 @@ impl Rom { &self.data } + pub fn get_bank(&self, index: u8) -> &[u8] { + let start = index as usize * BANK_SIZE; + let end = (index + 1) as usize * BANK_SIZE; + &self.data[start..end] + } + pub fn title(&self) -> &str { std::str::from_utf8(&self.data[0x0134..0x0143]).unwrap() }