diff options
Diffstat (limited to 'src/cartridge.rs')
-rw-r--r-- | src/cartridge.rs | 40 |
1 files changed, 34 insertions, 6 deletions
diff --git a/src/cartridge.rs b/src/cartridge.rs index 28928c0..f96c234 100644 --- a/src/cartridge.rs +++ b/src/cartridge.rs @@ -1,10 +1,38 @@ +use core::cell::RefCell; + +#[derive(Copy, Clone)] +pub enum MirrorType { + Horizontal = 0, + Vertical = 1, + Single0 = 2, + Single1 = 3, + Four = 4 +} + pub enum BankType { - PRG_ROM, /* program rom */ - CHR_ROM, /* pattern rom */ - SRAM, /* save ram */ + PrgRom, /* program rom */ + ChrRom, /* pattern rom */ + Sram, /* save ram */ +} + +pub struct Cartridge { + chr_rom: [u8; 8192], + prg_rom: RefCell<[u8; 8192]>, + sram: [u8; 8192], + pub mirror_type: MirrorType } -pub trait Cartridge { - fn get_bank_num(&self, kind: BankType) -> usize; - fn get_bank(&self, idx: usize, kind: BankType) -> *mut [u8]; +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 + } + } } |