diff options
| Commit | 2653f4e53f9e878b8c4d09088fd79b4e22a48865 (patch) | |
|---|---|---|
| Author | 2025-02-14 16:06:45 +0200 | |
| Committer | 2025-02-14 16:06:45 +0200 | |
| Files | a82289da31eb8eed58d0383eb9495416f7cd9180 /vm/src/vmm/command.rs | |
| tonkobali-2653f4e53f9e878b8c4d09088fd79b4e22a48865.tar tonkobali-2653f4e53f9e878b8c4d09088fd79b4e22a48865.tar.gz tonkobali-2653f4e53f9e878b8c4d09088fd79b4e22a48865.zip | ||
| Parent | c8955f48580db8067765f76c8967e44dbb06517a (diff) | |
feat(vm): Add ability to store data in memory and to start execution after halt
1 files changed, 16 insertions, 6 deletions
| -rw-r--r-- | vm/src/vmm/command.rs | 22 |
diff --git a/vm/src/vmm/command.rs b/vm/src/vmm/command.rs index 2688b5f..0811da3 100644 --- a/vm/src/vmm/command.rs +++ b/vm/src/vmm/command.rs @@ -21,17 +21,27 @@ pub(super) fn parse_and_exec(input: String, vm: &mut VirtualMachine) -> Result<( } match args[0] { - "s" | "start" => { + "r" | "run" => { expects_n_args(&args, 1)?; + if ! vm.is_halted() { + return Err(format!("Machine already running!")); + } vm.set_start(args[1].parse().unwrap()); }, + "s" | "store" => { + expects_n_args(&args, 2)?; + + vm.set_word(args[1].parse().unwrap(), args[2].parse().unwrap()); + }, "q" | "quit" | "e" | "exit" => return Err(String::new()), _ => { - if let Some(num) = args[0].parse::<usize>().ok() { - println!("{}", vm.get_word(num)); - } - else { - return Err(format!("Unknown command '{}'!", args[0])); + for arg in args { + if let Some(num) = arg.parse::<usize>().ok() { + println!("{}", vm.get_word(num)); + } + else { + return Err(format!("Unknown command '{}'!", arg)); + } } }, } |
