aboutsummaryrefslogblamecommitdiff
path: root/src/memory.rs
blob: fb07ad5094b9dd155af4b37a1a26da4ed098c73d (plain) (tree)
1
2
3
4
5
6
7
8
9
10
                    
             
                 
                          
                           
                        
                        
 

                                    
                                             

 
                          



                                      

                                 


                        
                                 
                                                 

                                                      


                                  
                                     
     
 

                                               
     



                                     
                          
                                               
                                 
                                              




                                          
             

                                 

                                                                             

                      


                                 
                                           

         
 


                                              
                          
                                                       

                                 






                                                                      






                                                                             
             


                                                      



                                                                



                                 
                                                      
         



                          



                                      

 
                        

                                                 
                  


                                  
                   


     







                                  
                 
                                                        

                               
                                                                       

 

                                         




                                      
                        
                     
                                                   
                                                                                  


                     


                                                       

                     

                                                                                         


                     


                                                              

                     
                                                
                                       



                                                 
                                                   


     
                                 

                                         
                          
                                  
                                 
                                                        
                                 
                                                     
                
                                                               

         
 
                                                  
                       
                          
                                          
                                 
                                                                
                                 
                                                             
                
                                                                

         
 
 
#![allow(dead_code)]
use ppu::PPU;
use mos6502::CPU;
use cartridge::MirrorType;
use controller::Controller;
use core::cell::RefCell;
use core::ptr::null_mut;

pub trait VMem {
    fn read(&self, addr: u16) -> u8;
    fn write(&mut self, addr: u16, data: u8);
}

pub struct CPUMemory<'a> {
    sram: [u8; 2048],
    ppu: *mut PPU<'a>,
    cpu: *mut CPU<'a>,
    mapper: &'a RefCell<&'a mut VMem>,
    ctl1: Option<&'a Controller>,
    ctl2: Option<&'a Controller>
}

impl<'a> CPUMemory<'a> {
    pub fn new(ppu: &mut PPU<'a>,
               mapper: &'a RefCell<&'a mut VMem>,
               ctl1: Option<&'a Controller>,
               ctl2: Option<&'a Controller>) -> Self {
        CPUMemory{sram: [0; 2048],
                  cpu: null_mut(),
                  ppu: ppu,
                  mapper, ctl1, ctl2}</