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