diff --git a/emulator/Cargo.toml b/emulator/Cargo.toml index 23f7142..95df15a 100644 --- a/emulator/Cargo.toml +++ b/emulator/Cargo.toml @@ -16,6 +16,7 @@ required-features = ["config"] [dependencies] common = { path = "../common" } assembler = { path = "../assembler" } +compiler = { path = "../compiler" } dsa_editor = { path = "../dsa_editor" } egui = "0.31.1" dirs = "6.0.0" diff --git a/emulator/src/emulator/ui/editor.rs b/emulator/src/emulator/ui/editor.rs index e49ad85..e1d4b4b 100644 --- a/emulator/src/emulator/ui/editor.rs +++ b/emulator/src/emulator/ui/editor.rs @@ -451,6 +451,29 @@ impl Editor { .flat_map(|i| i.encode().to_be_bytes().to_vec()) .collect(); } + Some("dsc") => { + let output_path = Path::new(path).with_extension("dsa"); + if let Err(e) = compiler::compile_file(path, &output_path) { + self.error = Some(format!("Compiler error: {}", e)); + } + + let mut compiler = CompilerEngine::new(); + compiler.start_compilation(&output_path); + + // Or block until done + let instructions = match compiler.wait_for_result() { + Ok(instructions) => instructions, + Err(e) => { + self.error = Some(format!("Assembler error: {}", e)); + return; + } + }; + + self.output = instructions + .iter() + .flat_map(|i| i.encode().to_be_bytes().to_vec()) + .collect(); + } Some("dsb") => { if let Ok(bytes) = fs::read(path) { self.output = bytes;