diff --git a/simu/src/cpu.rs b/simu/src/cpu.rs index 4371d27..926f781 100644 --- a/simu/src/cpu.rs +++ b/simu/src/cpu.rs @@ -589,6 +589,15 @@ impl Computer { } _ => (), } + if SHARED + .external_enabled_interupts + .load(std::sync::atomic::Ordering::Relaxed) + == 0 + { + println!("Program terminated"); + self.error = true; + return; + } println!("awaiting interupt..."); } atomic_wait::wait(&SHARED.external_interupts, 0); diff --git a/simu/src/main.rs b/simu/src/main.rs index 2dcfd0b..52a52d7 100644 --- a/simu/src/main.rs +++ b/simu/src/main.rs @@ -412,6 +412,25 @@ fn main() -> Result<(), Error> { } false } + "t" | "to" => { + if next.len() >= 2 { + match parse_int::parse::(next[1]) { + Ok(v) => { + while !simulation.error && simulation.pc != (v as usize/4) { + simulation.step(); + } + false + }, + Err(e) => { + println!("{e}"); + true + }, + } + } else { + println!("{HELP_MSG}"); + true + } + } _ => { println!("{HELP_MSG}"); true