diff options
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/src/main.rs b/src/main.rs index f4ef2cc..c4cb1e1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -20,10 +20,10 @@ use std::cell::RefCell; use docopt::Docopt; +use rustv::cache; use rustv::elfloader; use rustv::isa::{self, IsaType}; use rustv::memory; -use rustv::memory::Mmu; use rustv::simulator; use memory_tracker::MemoryTracker; @@ -98,9 +98,23 @@ fn main() { // TODO: initialize global data let memory_ref = Rc::new(RefCell::new(memory)); - let cache = memory::DirectMappedCache::new(2, 64, memory_ref.clone()); + + let updater = globals::Updater::new( + memory_ref.clone(), + Box::new(memory::IdentityMmu::new()), + Box::new(memory::IdentityMmu::new())); + updater.init_memory(); + + let player1_event = globals::CacheEventHandler::new( + &updater, globals::Player::One); + let player2_event = globals::CacheEventHandler::new( + &updater, globals::Player::Two); + + let cache = cache::DirectMappedCache::new( + 2, 64, memory_ref.clone(), player1_event); let cache_ref = Rc::new(RefCell::new(cache)); - let cache2 = memory::DirectMappedCache::new(2, 64, memory_ref.clone()); + let cache2 = cache::DirectMappedCache::new( + 2, 64, memory_ref.clone(), player2_event); let cache2_ref = Rc::new(RefCell::new(cache2)); let mut cores = vec![]; @@ -155,7 +169,7 @@ fn main() { let end = time::precise_time_s(); for (core_id, cycles_stalled, total_cycles) in simulator.report().iter().cloned() { - println!("Core {}: stalled {:08} of {:08} cycles ({:.2}%)", + println!("Core {}: stalled {:8} of {:8} cycles ({:.2}%)", core_id, cycles_stalled, total_cycles, |