Website Summary Files Commits Branches @commit @diff @stats
path: root / vm / src / vmm / command.rs
diff options
context:
space:
mode:
Commit2653f4e53f9e878b8c4d09088fd79b4e22a48865 (patch)
Author
 Syndamia <kamen@syndamia.com>
2025-02-14 16:06:45 +0200
Committer
 Syndamia <kamen@syndamia.com>
2025-02-14 16:06:45 +0200
Filesa82289da31eb8eed58d0383eb9495416f7cd9180 /vm/src/vmm/command.rs
tonkobali-2653f4e53f9e878b8c4d09088fd79b4e22a48865.tar
tonkobali-2653f4e53f9e878b8c4d09088fd79b4e22a48865.tar.gz
tonkobali-2653f4e53f9e878b8c4d09088fd79b4e22a48865.zip
Parentc8955f48580db8067765f76c8967e44dbb06517a (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.rs22
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));
+ }
}
},
}