remove mutability from mapper read funcs
This commit is contained in:
parent
f8718718a1
commit
4be3570c85
|
@ -15,7 +15,7 @@ impl Cnrom {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Mapper for Cnrom {
|
impl Mapper for Cnrom {
|
||||||
fn read(&mut self, address: usize) -> u8 {
|
fn read(&self, address: usize) -> u8 {
|
||||||
let pl = self.cart.prg_rom.len();
|
let pl = self.cart.prg_rom.len();
|
||||||
let addr = address % 0x4000;
|
let addr = address % 0x4000;
|
||||||
match address {
|
match address {
|
||||||
|
|
|
@ -111,7 +111,7 @@ impl Mmc1 {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Mapper for Mmc1 {
|
impl Mapper for Mmc1 {
|
||||||
fn read(&mut self, address: usize) -> u8 {
|
fn read(&self, address: usize) -> u8 {
|
||||||
match address {
|
match address {
|
||||||
0x0000..=0x1FFF => {
|
0x0000..=0x1FFF => {
|
||||||
if self.cart.chr_rom_size == 0 {
|
if self.cart.chr_rom_size == 0 {
|
||||||
|
|
|
@ -67,7 +67,7 @@ impl Mmc3 {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Mapper for Mmc3 {
|
impl Mapper for Mmc3 {
|
||||||
fn read(&mut self, address: usize) -> u8 {
|
fn read(&self, address: usize) -> u8 {
|
||||||
let val = match address {
|
let val = match address {
|
||||||
0x0000..=0x1FFF => { // reading from CHR-ROM
|
0x0000..=0x1FFF => { // reading from CHR-ROM
|
||||||
let offset_1k = address % 0x400;
|
let offset_1k = address % 0x400;
|
||||||
|
|
|
@ -15,7 +15,7 @@ use std::rc::Rc;
|
||||||
use std::io::Read;
|
use std::io::Read;
|
||||||
|
|
||||||
pub trait Mapper {
|
pub trait Mapper {
|
||||||
fn read(&mut self, address: usize) -> u8;
|
fn read(&self, address: usize) -> u8;
|
||||||
fn write(&mut self, address: usize, value: u8);
|
fn write(&mut self, address: usize, value: u8);
|
||||||
fn get_mirroring(&mut self) -> Mirror;
|
fn get_mirroring(&mut self) -> Mirror;
|
||||||
fn load_battery_backed_ram(&mut self);
|
fn load_battery_backed_ram(&mut self);
|
||||||
|
|
|
@ -15,7 +15,7 @@ impl Nrom {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Mapper for Nrom {
|
impl Mapper for Nrom {
|
||||||
fn read(&mut self, address: usize) -> u8 {
|
fn read(&self, address: usize) -> u8 {
|
||||||
let addr = address % 0x4000;
|
let addr = address % 0x4000;
|
||||||
match address {
|
match address {
|
||||||
0x0000..=0x1FFF => {
|
0x0000..=0x1FFF => {
|
||||||
|
|
|
@ -17,7 +17,7 @@ impl Uxrom {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Mapper for Uxrom {
|
impl Mapper for Uxrom {
|
||||||
fn read(&mut self, address: usize) -> u8 {
|
fn read(&self, address: usize) -> u8 {
|
||||||
match address {
|
match address {
|
||||||
0x0000..=0x1FFF => {
|
0x0000..=0x1FFF => {
|
||||||
if self.cart.chr_rom_size > 0 {
|
if self.cart.chr_rom_size > 0 {
|
||||||
|
|
|
@ -189,7 +189,7 @@ impl Cpu {
|
||||||
0x4016 => self.read_controller(),
|
0x4016 => self.read_controller(),
|
||||||
0x4000..=0x4017 => 0, // can't read from these APU registers
|
0x4000..=0x4017 => 0, // can't read from these APU registers
|
||||||
0x4018..=0x401F => 0, // APU and I/O functionality that is normally disabled. See CPU Test Mode.
|
0x4018..=0x401F => 0, // APU and I/O functionality that is normally disabled. See CPU Test Mode.
|
||||||
0x4020..=0xFFFF => self.mapper.borrow_mut().read(address),
|
0x4020..=0xFFFF => self.mapper.borrow().read(address),
|
||||||
_ => panic!("invalid read from 0x{:02x}", address),
|
_ => panic!("invalid read from 0x{:02x}", address),
|
||||||
};
|
};
|
||||||
val
|
val
|
||||||
|
|
|
@ -4,7 +4,7 @@ impl super::Ppu {
|
||||||
|
|
||||||
pub fn read(&mut self, address: usize) -> u8 {
|
pub fn read(&mut self, address: usize) -> u8 {
|
||||||
match address {
|
match address {
|
||||||
0x0000..=0x1FFF => self.mapper.borrow_mut().read(address),
|
0x0000..=0x1FFF => self.mapper.borrow().read(address),
|
||||||
0x2000..=0x3EFF => self.read_nametable(address),
|
0x2000..=0x3EFF => self.read_nametable(address),
|
||||||
0x3F00..=0x3FFF => {
|
0x3F00..=0x3FFF => {
|
||||||
let a = address % 0x0020;
|
let a = address % 0x0020;
|
||||||
|
|
Loading…
Reference in New Issue