From d2e7dda20f7ce8c064ac1200af34a9f967e3594b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Magalh=C3=A3es?= <joamag@gmail.com> Date: Fri, 8 Jul 2022 17:08:27 +0100 Subject: [PATCH] feat: better bank handling support --- src/mmu.rs | 3 ++- src/rom.rs | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/mmu.rs b/src/mmu.rs index 853d19cd..15df0604 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 d9b2a25b..279480fd 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() } -- GitLab