diff options
Diffstat (limited to 'src/cartridge.rs')
-rw-r--r-- | src/cartridge.rs | 37 |
1 files changed, 24 insertions, 13 deletions
diff --git a/src/cartridge.rs b/src/cartridge.rs index f96c234..b8d2b68 100644 --- a/src/cartridge.rs +++ b/src/cartridge.rs @@ -1,3 +1,4 @@ +#![allow(dead_code)] use core::cell::RefCell; #[derive(Copy, Clone)] @@ -16,23 +17,33 @@ pub enum BankType { } pub struct Cartridge { - chr_rom: [u8; 8192], - prg_rom: RefCell<[u8; 8192]>, - sram: [u8; 8192], + chr_rom: RefCell<Vec<u8>>, + prg_rom: RefCell<Vec<u8>>, + sram: RefCell<Vec<u8>>, pub mirror_type: MirrorType } impl Cartridge { - pub fn get_bank_num(&self, kind: BankType) -> usize {0} - pub fn get_bank(&self, idx: usize, kind: BankType) -> *mut [u8] { - &mut *self.prg_rom.borrow_mut() - } - pub fn new() -> Self { - Cartridge { - chr_rom: [0; 8192], - prg_rom: RefCell::new([0; 8192]), - sram: [0; 8192], - mirror_type: MirrorType::Horizontal + pub fn get_size(&self, kind: BankType) -> usize { + match kind { + BankType::PrgRom => self.prg_rom.borrow().len(), + BankType::ChrRom => self.chr_rom.borrow().len(), + BankType::Sram => self.sram.borrow().len() } } + pub fn get_bank(&self, base: usize, size: usize, kind: BankType) -> *mut [u8] { + &mut (match kind { + BankType::PrgRom => self.prg_rom.borrow_mut(), + BankType::ChrRom => self.chr_rom.borrow_mut(), + BankType::Sram => self.sram.borrow_mut(), + })[base..base + size] + } + pub fn new(chr_rom: Vec<u8>, + prg_rom: Vec<u8>, + sram: Vec<u8>, + mirror_type: MirrorType) -> Self { + Cartridge{chr_rom: RefCell::new(chr_rom), + prg_rom: RefCell::new(prg_rom), + sram: RefCell::new(sram), mirror_type} + } } |