Website Summary Files Commits Branches @commit @diff @stats
path: root / vm / src / main.rs
diff options
context:
space:
mode:
Commit991e6fdd96296bf7bcbee10c47c4f56dd1f83cf9 (patch)
Author
 Syndamia <kamen@syndamia.com>
2025-02-14 13:28:22 +0200
Committer
 Syndamia <kamen@syndamia.com>
2025-02-14 13:28:39 +0200
Files56026c30dfd88759af455ebfd3787e1cd06b2720 /vm/src/main.rs
tonkobali-991e6fdd96296bf7bcbee10c47c4f56dd1f83cf9.tar
tonkobali-991e6fdd96296bf7bcbee10c47c4f56dd1f83cf9.tar.gz
tonkobali-991e6fdd96296bf7bcbee10c47c4f56dd1f83cf9.zip
Parent5df95aaf466c2e2beaa321c380d03a4df7d07aaa (diff)
feat(vm): Proper cli
1 files changed, 25 insertions, 22 deletions
-rw-r--r--vm/src/main.rs47
diff --git a/vm/src/main.rs b/vm/src/main.rs
index 0076ba1..b3907ea 100644
--- a/vm/src/main.rs
+++ b/vm/src/main.rs
@@ -1,29 +1,32 @@
-use std::{
- sync::Arc, thread
-};
-
mod vm;
-use vm::{ VirtualMachine, VirtualMachineInterface };
mod vmm;
+
+use std::{ sync::Arc, thread };
+use clap::Parser;
+
+use vm::{ VirtualMachine, VirtualMachineInterface };
use vmm::VirtualMachineMonitor;
+#[derive(Parser, Debug)]
+#[command(about, long_about = None)]
+struct Args {
+ binary_path: Option<String>,
+
+ #[arg(short, long, default_value_t = 10)]
+ tick_gap: u64,
+
+ #[arg(short, long, default_value_t = 500)]
+ refresh: u64,
+}
+
fn main() {
- /* This is a simple program: calculate 331 + 95 in address 5 (answer 426)
- *
- * > ADD 331, 95
- * > JMP 0
- *
- * > subleq 331, 0
- * > subleq 0, 95
- * > subleq 0, 0
- * > subleq 0, 0, 0
- *
- * > subleq 3, 0, next
- * > subleq 0, 4, next
- * > subleq 0, 0, next
- * > subleq 0, 0, 0
- */
- let vm = VirtualMachine::create_from_file("./program.bin");
+ let args = Args::parse();
+
+ let vm = if let Some(path) = &args.binary_path {
+ VirtualMachine::create_from_file(args.tick_gap, path)
+ } else {
+ VirtualMachine::create(args.tick_gap)
+ };
let _vm_handle = {
let vm = Arc::clone(&vm);
@@ -32,6 +35,6 @@ fn main() {
})
};
- let mut monitor = VirtualMachineMonitor::new();
+ let mut monitor = VirtualMachineMonitor::new(args.refresh);
monitor.start(vm);
}