monistode_emulator_bindings/
lib.rs1mod utils;
2use std::u8;
3
4use crate::memory::{MemoryBlock, MemoryType};
5use crate::processor::{WasmProcessor, WasmProcessorContinue};
6use processors::{create_processor, ProcessorType};
7use registers::RegisterState;
8use wasm_bindgen::prelude::*;
9
10pub use processors::available_processors;
11mod memory;
12mod processor;
13mod processors;
14mod registers;
15
16#[wasm_bindgen]
17pub struct Runner {
18 processor: Box<dyn WasmProcessor>,
19 message: Result<(), String>,
20}
21
22#[wasm_bindgen]
23impl Runner {
24 #[wasm_bindgen(constructor)]
25 pub fn new(processor_type: ProcessorType, binary: &[u8]) -> Self {
26 let (processor, message) = create_processor(processor_type, binary);
27 Runner { processor, message }
28 }
29
30 #[wasm_bindgen]
31 pub fn run(
32 &mut self,
33 output: &js_sys::Function,
34 input: &js_sys::Function,
35 ) -> WasmProcessorContinue {
36 self.processor.run(output, input)
37 }
38
39 #[wasm_bindgen]
40 pub fn run_n(
41 &mut self,
42 output: &js_sys::Function,
43 input: &js_sys::Function,
44 n: usize,
45 ) -> WasmProcessorContinue {
46 self.processor.run_n(output, input, n)
47 }
48
49 #[wasm_bindgen]
50 pub fn get_memory(&mut self) -> Vec<MemoryBlock> {
51 self.processor.get_memory()
52 }
53
54 #[wasm_bindgen]
55 pub fn set_memory(&mut self, mem_type: MemoryType, index: usize, value: u8) -> bool {
56 self.processor.set_memory(mem_type, index, value)
57 }
58
59 #[wasm_bindgen]
60 pub fn get_registers(&mut self) -> Vec<RegisterState> {
61 self.processor.get_registers()
62 }
63
64 #[wasm_bindgen]
65 pub fn error_message(&self) -> Option<String> {
66 match &self.message {
67 Ok(_) => None,
68 Err(message) => Some(message.clone()),
69 }
70 }
71}