aboutsummaryrefslogtreecommitdiff
path: root/src/mapper.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/mapper.rs')
-rw-r--r--src/mapper.rs8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/mapper.rs b/src/mapper.rs
index 3d72189..8a6c261 100644
--- a/src/mapper.rs
+++ b/src/mapper.rs
@@ -7,6 +7,7 @@ use utils::{Read, Write, load_prefix, save_prefix};
pub trait Mapper : VMem {
fn get_cart(&self) -> &Cartridge;
+ fn get_cart_mut(&mut self) -> &mut Cartridge;
fn tick(&mut self, _bus: &CPUBus) {}
fn load(&mut self, reader: &mut Read) -> bool;
fn save(&self, writer: &mut Write) -> bool;
@@ -35,6 +36,7 @@ impl<'a> core::ops::Deref for RefMapper<'a> {
}
}
+#[repr(C)]
pub struct Mapper1<'a, C> where C: Cartridge {
cart: C,
prg_banks: [&'a [u8]; 2],
@@ -177,6 +179,7 @@ impl<'a, C> Mapper1<'a, C> where C: Cartridge {
impl<'a, C> Mapper for Mapper1<'a, C> where C: Cartridge {
fn get_cart(&self) -> &Cartridge {&self.cart}
+ fn get_cart_mut(&mut self) -> &mut Cartridge {&mut self.cart}
fn load(&mut self, reader: &mut Read) -> bool {
for v in self.prg_banks.iter_mut() {
@@ -215,6 +218,7 @@ impl<'a, C> Mapper for Mapper1<'a, C> where C: Cartridge {
}
}
+#[repr(C)]
pub struct Mapper2<'a, C> where C: Cartridge {
cart: C,
prg_banks: [&'a [u8]; 2],
@@ -282,6 +286,7 @@ impl<'a, C> Mapper2<'a, C> where C: Cartridge {
impl<'a, C> Mapper for Mapper2<'a, C> where C: Cartridge {
fn get_cart(&self) -> &Cartridge {&self.cart}
+ fn get_cart_mut(&mut self) -> &mut Cartridge {&mut self.cart}
fn load(&mut self, reader: &mut Read) -> bool {
for v in self.prg_banks.iter_mut() {
@@ -312,6 +317,7 @@ impl<'a, C> Mapper for Mapper2<'a, C> where C: Cartridge {
}
}
+#[repr(C)]
pub struct Mapper4<'a, C> where C: Cartridge {
cart: C,
prg_banks: [&'a [u8]; 4],
@@ -500,6 +506,8 @@ impl<'a, C> Mapper4<'a, C> where C: Cartridge {
impl<'a, C> Mapper for Mapper4<'a, C> where C: Cartridge {
fn get_cart(&self) -> &Cartridge {&self.cart}
+ fn get_cart_mut(&mut self) -> &mut Cartridge {&mut self.cart}
+
fn tick(&mut self, bus: &CPUBus) {
let ppu = bus.get_ppu();
if ppu.cycle != 260 {